0

したがって、私はストアド プロシージャを扱ったことがなく、一般的に DB の経験があまりなく、パッケージを作成する必要があるタスクを割り当てられて行き詰まっています。

SQL Developerを使用して、このコードでJUMPTOというパッケージを作成しようとしています...


create or replace package JUMPTO is
  type t_locations is ref cursor;

  procedure procGetLocations(locations out t_locations);

end JUMPTO;

実行すると、この PL/SQL コード ブロックが吐き出されます...


DECLARE
  LOCATIONS APPLICATION.JUMPTO.t_locations;
BEGIN

  JUMPTO.PROCGET_LOCATIONS(
    LOCATIONS => LOCATIONS
  );
  -- Modify the code to output the variable
  -- DBMS_OUTPUT.PUT_LINE('LOCATIONS = ' || LOCATIONS);
END;

私が見つけたチュートリアルでは、その 2 行目のコメントを削除するように言われました。私はコメントの有無にかかわらず試しました。

「OK」を押すと、エラーが発生します...


ORA-06550: line 2, column 32:
PLS-00302: component 'JUMPTO' must be declared
ORA-06550: line 2, column 13:
PL/SQL: item ignored
ORA-06550: line 6, column 18:
PLS-00320: the declaration of the type of this expression is incomplete or malformed
ORA-06550: line 5, column 3:
PL/SQL: Statement ignored
ORA-06512: at line 58

何が起こっているのかまったくわかりません。これは私にとってまったく新しい領域です。データベースからいくつかのものを選択しただけのボディを作成しようとしましたが、頭の中で思うように何も機能していません。誰でも私にこれについての洞察を与えることができますか?

4

2 に答える 2

2

Oracle PL / SQLパッケージには、次の2つの部分があります。

  • パッケージ仕様(グローバルにアクセス可能な定数、関数、プロシージャ、変数などがリストされているパブリック部分)。
  • パッケージ本体(パッケージ仕様を実装するためのコードが存在する場所)。

最初のコードはパッケージ仕様(JUMPTO)を宣言しました。タイプ(t_locations)とプロシージャ(procGetLocations)を宣言しましたが、入力はありませんが、タイプt_locationsの1つの変数(locations)を出力します。

最初に(行ったように)パッケージ仕様をコンパイルし、次に次のようにパッケージ本体をコンパイルします。

create or replace package body JUMPTO is  
procedure procGetLocations(locations out t_locations) is  
begin    
locations := null; -- Your code goes here
end procGetLocations;
end JUMPTO;

これで、他のPL / SQLブロック(匿名またはその他)でプロシージャprocGetLocationsを呼び出すことができます。

于 2009-01-15T01:44:26.787 に答える
2

まず、パッケージ本体を宣言する必要があります。たとえば、次のようになります。

create or replace package body JUMPTO is

  procedure procGetLocations(locations out t_locations)
  is
  begin
    locations := null; -- Need code here
  end;

end JUMPTO;

コンパイルするにはこれが必要です:

 DECLARE
     LOCATIONS JUMPTO.t_locations;
   BEGIN
     JUMPTO.PROCGETLOCATIONS(
       LOCATIONS => LOCATIONS
     );
   END;
于 2009-01-08T23:03:18.120 に答える