web-dev-qa-db-ja.com

Oracleパッケージの作成でPLS-00103が発生しました:シンボル「CREATE」に遭遇しました

Oracle SQL Developerを使用してOracleパッケージを作成していますが、このコンパイルエラーが発生しました:

エラー(7,1):PLS-00103:シンボル "CREATE"に遭遇しました。

create or replace
PACKAGE TestPackage AS 
 FUNCTION beforePopulate RETURN BOOLEAN;
 FUNCTION afterPopulate RETURN BOOLEAN;
END TestPackage;

CREATE OR REPLACE PACKAGE BODY TestPackage AS
   FUNCTION beforePopulate RETURN BOOLEAN AS
   BEGIN
      DELETE FROM TEST_1;
      INSERT INTO TEST_1
      SELECT * FROM TEST WHERE VALUE=300;
      COMMIT;
      RETURN TRUE;
     EXCEPTION
       WHEN OTHERS THEN
        RETURN FALSE;
   END;
   FUNCTION afterPopulate RETURN BOOLEAN AS
     BEGIN
         UPDATE TEST SET RESULT="completed" WHERE VALUE=300;
            COMMIT;
         RETURN TRUE;
         EXCEPTION
           WHEN OTHERS RETURN FALSE;
        END;
  END;
END TestPackage;

6行目に/を追加すると、エラーは次のようになりました。

エラー(6,1):PLS-00103:シンボル「/」が発生しました

私はこのような空の実装に疲れました:

create or replace 
package package1 as 
END PACKAGE1;

CREATE OR REPLACE 
package body package1 as 
end package1;

私は同じエラーを受け取りました。

22
Gary

BEGIN、ENDなどがある場合、SQLではなくPL/SQLを使用しています。

PL/SQLブロックは、行の先頭で単一の(「フォワード」)スラッシュで終了する必要があります。これにより、PL/SQLブロックの処理が完了したことがOracleに通知されるため、そのテキストブロックがコンパイルされます。

SQLクエリ-セミコロンで終了:

update orders set status = 'COMPLETE' where order_id = 55255;

PL/SQLブロック-コマンド区切りセミコロン、ブロックはスラッシュで終了します:

create or replace procedure mark_order_complete (completed_order_id in number)
is
begin
     update orders set status = 'COMPLETE' where order_id = :completed_order_id;
end mark_order_complete;
/
27
Andrew Wolfe

これは、Oracle SQL Developerを使用して私にとってはうまくいきました:

create or replace PACKAGE TestPackage AS
FUNCTION beforePopulate 
 RETURN BOOLEAN;  
FUNCTION afterPopulate 
 RETURN BOOLEAN;
END TestPackage;
/
CREATE OR REPLACE PACKAGE BODY TestPackage AS    
 FUNCTION beforePopulate 
  RETURN BOOLEAN  AS    
 BEGIN       
  DELETE FROM TESTE;      
  INSERT INTO TESTE       
  SELECT 1,1,1 FROM DUAL; 
  COMMIT;     
  RETURN TRUE;  
 EXCEPTION    
  WHEN OTHERS THEN   
   RETURN FALSE;   
 END;
 FUNCTION afterPopulate 
  RETURN BOOLEAN  AS  
 BEGIN
  UPDATE TESTE SET TESTE='OK' WHERE TESTE='';
  COMMIT;       
  RETURN TRUE;  
 EXCEPTION       
  WHEN OTHERS THEN RETURN FALSE;    
 END; 
END TestPackage;
/   

使用するテーブルと列を実際に作成するまで、実行できませんでした。

6
M. P. R.

数時間のフラストレーションの後、私はなんとかこのものを機能させることができました。 exact問題がありました。

私にとっての解決策は、パッケージコードではなく、スクリプトとして実行することでした。 SQLワークシートでスラッシュは正しく機能します。私は違いを付けています、それがあなたを助けることを願っています!

enter image description here

4
Dropout

同じ問題がありました。メインメニューodを使用してパッケージを作成し、同じ.sqlファイル内にパッケージ宣言と本体を配置します。すべてのコードをコピーして新しいワークシートに貼り付け、後に "/" package_nameを終了し(パッケージ宣言と本文の後)、ワークシートをスクリプトとして実行します。

2
Error

f5でパッケージとパッケージ本体を個別に実行する

1
Vishy

Sqldeveloperのすべてのdbパッケージコード(プロシージャヘッダーと実装の両方)をuser/packages/MY_PACKAGE_NAME/MY_PACKAGE_BODYの代わりにコピーしたときに、この問題が発生しました(エラー(6,1):PLS-00103:シンボル "/"に遭遇しました)ヘッダー(末尾に '/'なし)をuser/packages/MY_PACKAGE_NAMEにコピーし、実装(先頭にヘッダーなしで '/'なしに)をuser/packages/MY_PACKAGE_NAME/MY_PACKAGE_BODYにコピーします。

0
Jan Němec