DBMS_SQL.NATIVE;
SQL> SQL> CREATE OR REPLACE PROCEDURE CreateDynamicTables( 2 p_Method IN VARCHAR2) 3 AUTHID CURRENT_USER AS 4 v_CreateString1 VARCHAR2(100) := 5 'CREATE TABLE dbms_sql_table (f1 NUMBER)'; 6 v_CreateString2 VARCHAR2(100) := 7 'CREATE TABLE native_table (f1 NUMBER)'; 8 v_Dummy INTEGER; 9 v_CursorID INTEGER; 10 BEGIN 11 IF p_Method = 'DBMS_SQL' THEN 12 v_CursorID := DBMS_SQL.OPEN_CURSOR; 13 DBMS_SQL.PARSE(v_CursorID, v_CreateString1, DBMS_SQL.NATIVE); 14 DBMS_SQL.CLOSE_CURSOR(v_CursorID); 15 ELSE 16 EXECUTE IMMEDIATE v_CreateString2; 17 END IF; 18 END CreateDynamicTables; 19 / Procedure created. SQL> SQL> exec CreateDynamicTables('DBMS_SQL') PL/SQL procedure successfully completed. SQL> exec CreateDynamicTables('native') PL/SQL procedure successfully completed. SQL> SQL> desc dbms_sql_table Name Null? Type ----------------------------------------------------------------------------------------------------------------------------------------------- -------- ------------------------------------------------------------------------------------------------ F1 NUMBER SQL> desc native_table Name Null? Type ----------------------------------------------------------------------------------------------------------------------------------------------- -------- ------------------------------------------------------------------------------------------------ F1 NUMBER SQL> SQL> DROP TABLE dbms_sql_table; Table dropped. SQL> DROP TABLE native_table; Table dropped. SQL>