存储过程里面不可以用create table语句吗?我怎样才能动态建表?例一create or replace function test return varchar2 asv_cursor number;v_string varchar2(200);v_row number;beginv_cursor:=dbms_sql.open_cursor;--v_string:='update fnd_user a set a.description=''fred'' where a.user_id=1055';v_string:='create table testdb (text varchar2(200))';dbms_sql.parse(v_cursor,v_string,dbms_sql.native);v_row:=dbms_sql.execute(v_cursor);dbms_sql.close_cursor(v_cursor);return ('成功执行');exceptionwhen others thendbms_sql.close_cursor(v_cursor);return ('执行失败!'||sqlcode||sqlerrm);raise;end;例二CREATE OR REPLACE PROCEDURE Test1 ISv_SqlVARCHAR2(200); Cursor_create VARCHAR2(100);ResultNUMBER;BEGINv_Sql := 'CREATE TABLE T1(A VARCHAR2(200))';cursor_create := dbms_sql.open_cursor;DBMS_SQL.PARSE(cursor_create, v_SQL,dbms_sql.native);Result := dbms_sql.EXECUTE(cursor_create);DBMS_SQL.close_cursor(cursor_create);END Test1;

解决方案 »

  1.   

    楼上的,楼主是说“如何在存储过程中动态执行SQL或者过程“
    而不仅是动态创建表或者动态执行ddl语句因为函数,存储过程不知道如何存储在数据库中的,所以很难建表维护至于动态执行过程,和函数一样直接调用就可以了----其实并不是动态的
    动态的是指编译的时候没有绑定变量
      

  2.   

    SORRY
    说错了一句:过程存储在dba_source里面,以文本形式存储
    select * from dba_source 就可以看到