试试这个:
CREATE OR REPLACE PROCEDURE procA (
  p_Description IN VARCHAR2) IS 
  v_strCreate VARCHAR2(100);
  v_strDrop   VARCHAR2(100);
BEGIN
  v_strDrop := 'DROP TABLE AA';
  BEGIN
    EXECUTE IMMEDIATE v_strDrop;
    COMMIT;
    v_strCreate := 'CREATE TABLE AA' || p_Description;
    EXECUTE IMMEDIATE v_strCreate;
    COMMIT;
  EXCEPTION
    WHEN OTHERS THEN
      IF SQLCODE != -942 THEN
        RAISE;
      END IF;
  END;  
END ProcAA;

解决方案 »

  1.   

    語句看起來沒有錯誤,是不是你的oracle版本比較低,不支持execute immediate啊?
    你使用dbms_sql吧
      

  2.   

    To :jiezhi(浪子)是DBMS-SQL 用的是oracle 8.0.5
      

  3.   

    To:armu80830(此情可待) 加了COMMIT也还是报一样的错误
      

  4.   

    查了一下资料我写的这种所谓“本地动态SQL”在Oracle8i以下的版本中不受支持
      

  5.   

    8i以上才支持execute immediate 
    8.05只能用dbms_sql
      

  6.   

    是的,我在8I那里测试你的过程通过了。8。0。5不行
    用这个。
    CREATE OR REPLACE PROCEDURE procA (
      p_Description IN VARCHAR2) IS 
      v_strCreate VARCHAR2(100);
      v_strDrop   VARCHAR2(100);
    C_SQL  NUMBER;
    RET    NUMBER;
    P_ERROR INTEGER;
    BEGIN
      v_strDrop := 'DROP TABLE AA';
      BEGIN
       C_SQL := DBMS_SQL.OPEN_CURSOR;
       DBMS_SQL.PARSE( C_SQL, v_strDrop, DBMS_SQL.v7 ) ;
       ret := DBMS_SQL.EXECUTE( C_SQL ) ;
      EXCEPTION
             WHEN OTHERS THEN
                    IF SQLCODE != -942 THEN
                     RAISE;
                  END IF;

      END;
    v_strCreate := 'CREATE TABLE AA' || p_Description;
    DBMS_SQL.PARSE( C_SQL, v_strCreate, DBMS_SQL.v7 ) ;
       ret := DBMS_SQL.EXECUTE( C_SQL ) ;
    DBMS_SQL.CLOSE_CURSOR(C_SQL);
    END;
      

  7.   

    谢谢再问一下 一定要用DBMS_SQL.EXECUTE( C_SQL ) ;吗? 有什么说法?
      

  8.   

    if you want to get more detail,please see:Choosing Between Native Dynamic SQL and the DBMS_SQL Package
     http://gigabase.idi.ntnu.no/oradoc/appdev.901/a88876/adg09dyn.htm#26586
      

  9.   

    LGQDUCKY(飘) 的做法正确
    EXECUTE IMMEDIATE好像不能直接使用drop语句!
      

  10.   

    to  skyxj(java学习中…▲天行健) :
    不要好象啊,自己寫個程序測試一下就知道了。
    在oracle8i使用EXECUTE IMMEDIATE 'drop ...';是沒有問題的。