问题描述
CREATE OR REPLACE PROCEDURE COMPILE_OBJECT(my_type VARCHAR2,my_name VARCHAR2,my_package_part VARCHAR2 := NULL) IS
v_text VARCHAR2(500) := 'ALTER :my_type :my_name COMPILE :my_package_part';
BEGIN
--try alter objects
EXECUTE IMMEDIATE v_text USING my_type,my_name,my_package_part;
END;
解决方法
就像Sayan所说的那样,是这样的:
SQL> CREATE OR REPLACE PROCEDURE compile_object (
2 my_type VARCHAR2,3 my_name VARCHAR2,4 my_package_part VARCHAR2 := NULL)
5 IS
6 v_text VARCHAR2 (500);
7 BEGIN
8 v_text :=
9 'alter '
10 || my_type
11 || ' '
12 || DBMS_ASSERT.sql_object_name (my_name)
13 || ' compile '
14 || my_package_part;
15
16 EXECUTE IMMEDIATE v_text;
17 END;
18 /
Procedure created.
SQL> EXEC compile_object('procedure','p_roles',null);
PL/SQL procedure successfully completed.
SQL>