用动态SQL来实现例CREATE OR REPLACE PROCEDURE Test1 IS
  v_Sql         VARCHAR2(200); 
  Cursor_create VARCHAR2(100);
  Result        NUMBER;
BEGIN      
      v_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.   

    freddy2003 高手,需要什么权限才能执行该存储过程呢,DBA角色,系统权限为默认的不行,
    麻烦你帮我写点注释,那个DBMS_SQL是个什么东东?
      

  2.   

    dbms_sql是包,具体可通过desc dbms_sql查看用法
    权限需显示赋权,例如
    grant create table to userfreddy2003的写法是在8中的写法,在8i及以后的版本中可以更简单,例如:
    CREATE OR REPLACE PROCEDURE Test1 as
    BEGIN      
      execute immediate '...';
    END Test1;
      

  3.   

    是的,有用户要有CREATE TABLE的权限才行。
    create or replace procedure name_pro(p_table varchar2)
    as
    str varchar2(50);
    begin
    str:='create table '||p_table||'(a varchar2(10))';--grant create any table to you_userexecute immediate str;
    end;
    /
      

  4.   

    用 execute immediate '...';来创建表是没问题。
    那返回多行记录怎么处理 execute immediate 'open out_result for select A1 from t1 '出错!
      

  5.   

    execute immediate SQL字符串