- PR -

PL/SQL

1
投稿者投稿内容
effemia
常連さん
会議室デビュー日: 2005/04/05
投稿数: 34
お住まい・勤務地: 札幌
投稿日時: 2006-12-18 15:46
お世話になります。

Oracle10gにて、パッケージを作成しています。
初歩的な質問で恐縮ですが、
あるパッケージA内に、ファンクションAを作成し、
ファンクションA内より、別のパッケージB内のファンクションBを
コールする手法について、調査していましたがわかりません。

どなたか教えていただけないでしょうか。
よろしくお願い致します。
未記入
会議室デビュー日: 2006/11/10
投稿数: 12
投稿日時: 2006-12-18 18:56
Bのパッケージ(ボディでない)に、関数宣言すれば
Bのパッケージ名.ファンクション名で
Aから呼べたと思います。

SELECT文などでファンクションを呼びたいのであれば
プラグマを書かないとだめですね。

effemia
常連さん
会議室デビュー日: 2005/04/05
投稿数: 34
お住まい・勤務地: 札幌
投稿日時: 2006-12-19 09:25
引用:

未記入さんの書き込み (2006-12-18 18:56) より:
Bのパッケージ(ボディでない)に、関数宣言すれば
Bのパッケージ名.ファンクション名で
Aから呼べたと思います。

SELECT文などでファンクションを呼びたいのであれば
プラグマを書かないとだめですね。





お世話になります。ご回答ありがとうございました。
具体的なソースを記述して、
長くなることとは思い恐縮ですが、以下のようになるのでしょうか。

1.PACKAGEにAを以下のように作成。

CREATE OR REPLACE Package ユーザA.Aパッケージ IS

FUNCTION 関数AA ( ) Return Boolean;

Bパッケージ.関数BB;

END Aパッケージ;
/

2.PACKAGEにBを以下のように作成。

CREATE OR REPLACE Package ユーザA.Bパッケージ IS

FUNCTION 関数BB ( ) Return Boolean;

END Bパッケージ;
/

3.PACKAGE BODYにAを以下のように作成。

CREATE OR REPLACE PACKAGE BODY Aユーザ.Aパッケージ IS

FUNCTION 関数AA ( ) Return Boolean Is

Begin

   処理

END 関数AA;

END Aパッケージ;
/

CREATE OR REPLACE PACKAGE BODY Aユーザ.Bパッケージ IS

FUNCTION 関数BB ( ) Return Boolean Is

Begin

    処理

END 関数BB;

END Bパッケージ;
/
未記入
会議室デビュー日: 2006/11/10
投稿数: 12
投稿日時: 2006-12-19 09:48
> Bのパッケージ(ボディでない)に、関数宣言
できてます。

>あるパッケージA内に、ファンクションAを作成し、
>ファンクションA内より、別のパッケージB内のファンクションBを
>コールする
ここが理解されてないようですね。
effemia
常連さん
会議室デビュー日: 2005/04/05
投稿数: 34
お住まい・勤務地: 札幌
投稿日時: 2006-12-19 10:10
引用:

未記入さんの書き込み (2006-12-19 09:48) より:
> Bのパッケージ(ボディでない)に、関数宣言
できてます。

>あるパッケージA内に、ファンクションAを作成し、
>ファンクションA内より、別のパッケージB内のファンクションBを
>コールする
ここが理解されてないようですね。




たびたびすみません。
今、調べていたのですが関数AA内で「CALL」を使用して
関数BBをコールするのでしょうか。
また、「EXECUTE」という関数も発見したのですが、
こちらを使用するのでしょうか。

また、当掲示板に書き込む前にPAKAGEに
関数宣言する処理を入れたのですが、
PLS-00103のエラーがでて、コンパイルが通らない状況です。
もう少し調べてみます。
らざるす
会議室デビュー日: 2002/11/15
投稿数: 11
投稿日時: 2006-12-19 10:58
CREATE OR REPLACE Package ユーザA.Aパッケージ IS
FUNCTION 関数AA ( ) Return Boolean;
Bパッケージ.関数BB;  ←これいらない
END Aパッケージ;
/

CREATE OR REPLACE PACKAGE BODY Aユーザ.Aパッケージ IS
FUNCTION 関数AA ( ) Return Boolean Is
BOOLEAN B := FALSE;
Begin
B := Bパッケージ.BB;
   処理
END 関数AA;
END Aパッケージ;
/

こんな感じでは?
effemia
常連さん
会議室デビュー日: 2005/04/05
投稿数: 34
お住まい・勤務地: 札幌
投稿日時: 2006-12-19 11:17
引用:

らざるすさんの書き込み (2006-12-19 10:58) より:
CREATE OR REPLACE Package ユーザA.Aパッケージ IS
FUNCTION 関数AA ( ) Return Boolean;
Bパッケージ.関数BB;  ←これいらない
END Aパッケージ;
/

CREATE OR REPLACE PACKAGE BODY Aユーザ.Aパッケージ IS
FUNCTION 関数AA ( ) Return Boolean Is
BOOLEAN B := FALSE;
Begin
B := Bパッケージ.BB;
   処理
END 関数AA;
END Aパッケージ;
/

こんな感じでは?



らざるすさん、ご回答ありがとうございました。

そのソースで試したことがあると思うのですが、
そのときはコンパイルエラーになって
別な方法かと思い、Web・参考書で調査していました。
らざるすさんのおっしゃるとおり、
もう一度整理して、落ち着いて記述したところ
コンパイルとおりました。
どうもありがとうございました。

ちょっと、焦って記述して凡ミス等気づかなかったんだと思います。
大変助かりました。
お騒がせしてすみませんでした。
1

スキルアップ/キャリアアップ(JOB@IT)