SQL Developerを使用したパッケージ作成の問題
-
06-07-2019 - |
質問
したがって、ストアドプロシージャを使用したことはなく、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
私は本当に何が起こっているのか全く分かりません。これは私にとって全く新しい領域です。データベースからいくつかのものを選択しただけのボディを作成しようとしましたが、頭の中で思うように動作していません。誰も私にこれに関する洞察を与えることができますか?
解決
まず、パッケージ本体を宣言する必要があります。たとえば:
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;
他のヒント
Oracle PL / SQLパッケージには2つの部分があります:
- パッケージ仕様(グローバルにアクセス可能な定数、関数、プロシージャ、変数などがリストされている公開部分)。
- パッケージ本体(パッケージ仕様を実装するためのコードがある場所)。
最初のコードがパッケージ仕様を宣言しました( JUMPTO )。型( t_locations )と、入力はないが型t_locationsの1つの変数( locations )を出力するプロシージャ( procGetLocations )を宣言しました。
最初にパッケージ仕様をコンパイルし(その後)、次のようにパッケージ本体をコンパイルします:
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 を呼び出すことができます。
所属していません StackOverflow