21

Oracle sql開発者を使用して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行目にaを追加する/と、エラーは次のようになります。

エラー(6,1):PLS-00103:記号「/」が検出されました

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

create or replace 
package package1 as 
END PACKAGE1;

CREATE OR REPLACE 
package body package1 as 
end package1;

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

4

6 に答える 6

28

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

PL/SQL ブロックは、行の最初にある 1 つの (「フォワード」) スラッシュで終了する必要があります。これにより、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;
/
于 2012-02-11T03:42:26.260 に答える
6

これは、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;
/   

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

于 2012-02-10T17:41:32.193 に答える
5

数時間の欲求不満の後、私はこのようなことをうまく機能させることができました. 私はあなたと同じように正確な問題を抱えていました。

私にとっての解決策は、パッケージコードではなく、スクリプトとして実行することでした。スラッシュは、SQL ワークシートで正しく機能します。違いを添付します。お役に立てば幸いです。

ここに画像の説明を入力

于 2013-05-09T15:09:46.667 に答える
2

私も同じ問題を抱えていました。左側のメイン メニューを使用してパッケージを作成し、パッケージ宣言と本体を同じ .sql ファイル内に配置します。すべてのコードをコピーして新しいワークシートに貼り付け、最後のpackage_nameの後に(パッケージ宣言と本体の両方の後に)「/」を付けてから、ワークシートをスクリプトとして実行すると、問題が解決します。

于 2014-08-07T07:57:12.257 に答える
1

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

于 2013-02-21T13:33:43.020 に答える
0

sqldeveloper のすべての db パッケージ コード (プロシージャ ヘッダーと実装の両方) を user/packages/MY_PACKAGE_NAME/MY_PACKAGE_BODY ではなくヘッダー (末尾に「/」なし) を user/packages/MY_PACKAGE_NAME にコピーし、実装 (上部にヘッダーなし、末尾に「/」なし) を user/packages/MY_PACKAGE_NAME/MY_PACKAGE_BODY にコピーします。

于 2017-01-25T11:21:09.943 に答える