create  or  replace  procedure  system.P_CREATE_TAB  is  
begin  
   execute immediate 'create  table  system.emp(  
       ID  NUMBER(4)  NOT  NULL,  
       SAL  NUMBER(6,1))';  
end; 

 

解决方案 »

  1.   

    存储过程里面不可以用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;
      

  2.   

    to  bzszp(SongZip) :
     这样没错了,可是为什么啊
      

  3.   

    对于ddl语句,需要用动态sql才可以。
      

  4.   

    動態SQL語句在過程中使用DDL語句的時候,必須使用動態SQL語句的說
      

  5.   

    接上.这个也是有编译错误,可是书上的方法就是这么说的.
    真晕啦....大哥帮忙create or replace procedure system.P_ADD_DATA is
      i  system.emp.id%type := 20;
      j  system.emp.sal%type := 500;
    begin
      delete all from system.emp;
      while i <= 50 loop
         insert into system.emp(id,sal) values
         i,j);
         i := i + 1;
         j := j + 100;
      end loop;
    end;
      

  6.   

    我看我们项目中的一些存贮过程也没有这个execute immediate
      

  7.   

    create  or  replace  procedure  system.P_ADD_DATA  as
       i    system.emp.id%type  :=  20;  
       j    system.emp.sal%type  :=  500;  
    begin              
       delete  from  system.emp;  
       while  i <= 50  loop  
             insert  into  system.emp(id,sal)  values  
             (i,j);  
             i := i + 1;  
             j := j + 100;  
       end  loop;  
    end;
      

  8.   

    哦,这样啊
    create or replace procedure system.P_ADD_DATA is
      i  system.emp.id%type := 20;
      j  system.emp.sal%type := 500;
    begin
      execute immediate 'delete all from system.emp';
      while i <= 50 loop
         execute immediate 'insert into system.emp(id,sal) values
         i,j)';
         i := i + 1;
         j := j + 100;
      end loop;
    end;