ORACLE TECHNOLOGY NETWORK
 
 
   

Oracle Technology Network (OTN) Japan - 掲示板 » テクノロジー » .NET

スレッド: PLS-00222のエラーについて

このスレッドに返信する このスレッドに返信する スレッド一覧へ スレッド一覧へ

Permlink 返信数: 26 - ページ数: 2 [ 1 2 | 次へ ] - 最新投稿 : 2007/04/20 13:36 最新投稿者: kyoyu_sub - スレッド表示形式:
kyoyu_sub

投稿数: 26
登録日時: 07/04/11


PLS-00222のエラーについて
投稿時刻: 2007/04/19 14:37
  このスレッドに返信します… 返信

以下のパッケージとパッケージ本体を作成しましたが、
パッケージ定義部はうまくコンパイルできて、本体のほうは以下のエラーが出ました。
原因はよくわからないので、教えていただけますか?
エラー:
PL/SQL: SQL Statement ignored
PLS-00222: この有効範囲内に、名前HOKAN_KBNの関数は存在しません。
PL/SQL: ORA-00904: : 無効な識別子です。

パッケージと本体は以下の通りです。
CREATE OR REPLACE PACKAGE INSERT_TKTANAJI IS
PROCEDURE sp_ins
(HOKAN_KBN CHAR,
ST_NO NUMBER,
MAKER_CD CHAR,
SYOHIN_CD CHAR,
LOCATION_NO CHAR,
i_count INTEGER);
END INSERT_TKTANAJI;
/

CREATE OR REPLACE PACKAGE BODY INSERT_TKTANAJI IS
PROCEDURE sp_ins
(HOKAN_KBN CHAR,
ST_NO NUMBER,
MAKER_CD CHAR,
SYOHIN_CD CHAR,
LOCATION_NO CHAR,
i_count INTEGER)
IS
i_index INTEGER;
BEGIN
For i_index In 1..i_count LOOP
INSERT INTO tktanaji
VALUES (HOKAN_KBN(i_index) ,
ST_NO(i_index) ,
MAKER_CD(i_index) ,
SYOHIN_CD(i_index) ,
LOCATION_NO(i_index) ;
END LOOP;
Exception
WHEN DUP_VAL_ON_INDEX THEN
NULL;
END sp_ins;
END INSERT_TKTANAJI;
/


以上です、どうぞよろしくお願いします。

naoki

投稿数: 846
登録日時: 02/03/15


Re: PLS-00222のエラーについて
投稿時刻: 2007/04/19 14:46   kyoyu_sub さんへの返信です。 kyoyu_sub さんへの返信です。
  このスレッドに返信します… 返信

> PLS-00222: この有効範囲内に、名前HOKAN_KBNの関数は存在しません。

> INSERT INTO tktanaji
> VALUES (HOKAN_KBN(i_index) ,
> ST_NO(i_index) ,
> MAKER_CD(i_index) ,
> SYOHIN_CD(i_index) ,
> LOCATION_NO(i_index) ;

このINSERT文がおかしいんですが、ここでは何をしたいのでしょうか?

jyugem

投稿数: 3,423
登録日時: 00/09/13


Re: PLS-00222のエラーについて
投稿時刻: 2007/04/19 14:51   kyoyu_sub さんへの返信です。 kyoyu_sub さんへの返信です。
  このスレッドに返信します… 返信


> For i_index In 1..i_count LOOP
> INSERT INTO tktanaji
> VALUES (HOKAN_KBN(i_index) ,
^^^^^^^^^^^^^^^^^^


とかで関数の呼び出しの形式になっているからでは?

では。

tabizou

投稿数: 451
登録日時: 05/10/14


Re: PLS-00222のエラーについて
投稿時刻: 2007/04/19 14:52   naoki さんへの返信です。 naoki さんへの返信です。
  このスレッドに返信します… 返信

> > PLS-00222: この有効範囲内に、名前HOKAN_KBNの関数は存在しません。
> このINSERT文がおかしいんですが、ここでは何をしたいのでしょうか?

arrayなデータを引数渡しで、loopでinsert したいのでは無いかと

kyoyu_sub

投稿数: 26
登録日時: 07/04/11


Re: PLS-00222のエラーについて
投稿時刻: 2007/04/19 15:06   naoki さんへの返信です。 naoki さんへの返信です。
  このスレッドに返信します… 返信

>このINSERT文がおかしいんですが、ここでは何をしたいのでしょうか?
ご回答ありがとうございます。
vb.netからこのパッケージを呼び出して、テーブルtktanajiにINSERT処理を行いたいです。

ktakamura

投稿数: 379
登録日時: 07/02/08


Re: PLS-00222のエラーについて
投稿時刻: 2007/04/19 15:10   tabizou さんへの返信です。 tabizou さんへの返信です。
  このスレッドに返信します… 返信

> arrayなデータを引数渡しで、loopでinsert したいのでは無いかと

そのようですね。
VARRAYでそれぞれの引数のTYPEを定義して、それを渡すようにしてはどうですか。
この辺を参考にしたら分かりますかね。
http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/appdev.102/B19257-01/collections.html#1004

kyoyu_sub

投稿数: 26
登録日時: 07/04/11


Re: PLS-00222のエラーについて
投稿時刻: 2007/04/19 15:15   jyugem さんへの返信です。 jyugem さんへの返信です。
  このスレッドに返信します… 返信

すみません、もうちょっと詳しく教えていただけますか?

kyoyu_sub

投稿数: 26
登録日時: 07/04/11


Re: PLS-00222のエラーについて
投稿時刻: 2007/04/19 15:18   ktakamura さんへの返信です。 ktakamura さんへの返信です。
  このスレッドに返信します… 返信

>そのようですね。
>VARRAYでそれぞれの引数のTYPEを定義して、それを渡すようにしてはどうですか。
>この辺を参考にしたら分かりますかね。
>http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/appdev.102/>B19257-01/collections.html#1004

ご回答ありがとうございます。
TYPEの定義を試してみましたが、下記のドキュメントも参考にしていますが、
よく理解できなかった。
number型とchar型が混在する場合のTYPEの定義方法を教えていただけますか

jyugem

投稿数: 3,423
登録日時: 00/09/13


Re: PLS-00222のエラーについて
投稿時刻: 2007/04/19 15:25   kyoyu_sub さんへの返信です。 kyoyu_sub さんへの返信です。
  このスレッドに返信します… 返信

> よく理解できなかった。
> number型とchar型が混在する場合のTYPEの定義方法を教えていただけますか

http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/sq_pl03.htm

辺りは参考になりますか?
# googleで vb.net oracle varray で検索したものです

では。

y-kamijo

投稿数: 109
登録日時: 97/04/08


Re: PLS-00222のエラーについて
投稿時刻: 2007/04/19 15:35   kyoyu_sub さんへの返信です。 kyoyu_sub さんへの返信です。
  このスレッドに返信します… 返信

> すみません、もうちょっと詳しく教えていただけますか?

下記のドキュメントに準じたコーディングをしていますか?

> http://otndnld.oracle.co.jp/tech/linux_win/pdf/prac_oo4o.pdf
> 「1-3.カーソル変数・PL/SQL 表の利用」

# これって「.NETの部屋」が適切ですよ。

ktakamura

投稿数: 379
登録日時: 07/02/08


Re: PLS-00222のエラーについて
投稿時刻: 2007/04/19 15:47   kyoyu_sub さんへの返信です。 kyoyu_sub さんへの返信です。
  このスレッドに返信します… 返信

> number型とchar型が混在する場合のTYPEの定義方法を教えていただけますか

まず、number型とchar型の入ったRECORDを定義して下さい。
次にそれを使ったVARRAYのTYPEを定義して下さい。

http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/appdev.102/B19257-01/collections.html#2280
ここの例5-8辺りが参考になると思いますが。

kyoyu_sub

投稿数: 26
登録日時: 07/04/11


Re: PLS-00222のエラーについて
投稿時刻: 2007/04/19 15:47   y-kamijo さんへの返信です。 y-kamijo さんへの返信です。
  このスレッドに返信します… 返信

>下記のドキュメントに準じたコーディングをしていますか?
> http://otndnld.oracle.co.jp/tech/linux_win/pdf/prac_oo4o.pdf
> 「1-3.カーソル変数・PL/SQL 表の利用」

こんにちは
上記のドキュメントを参照していますが、
うまくいきません。TYPEの定義の問題だと思いますが、
原因がどこにあるかはよくわかりません。
TYPE tktanaji IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
で定義すると、コンパイルはうまくいきますが、
VB.NETから実行すると、
pls-00418:配列バインドの型はPL/SQL表の行の型と一致する必要があります。
というエラーが出てきます。
これを解決できなく、TYPE定義をはずしたら、
PLS-00222のエラーに変りました。
プログラムの修正がかなり長引いたので、すごく困っています。

y-kamijo

投稿数: 109
登録日時: 97/04/08


Re: PLS-00222のエラーについて
投稿時刻: 2007/04/19 16:20   kyoyu_sub さんへの返信です。 kyoyu_sub さんへの返信です。
  このスレッドに返信します… 返信

> TYPEの定義の問題だと思いますが、
> 原因がどこにあるかはよくわかりません。
> TYPE tktanaji IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;

PL/SQL側ではBINARY_INTEGER型に指定していますが、

> VB.NETから実行すると、
> pls-00418:配列バインドの型はPL/SQL表の行の型と一致する必要があります。
> というエラーが出てきます。

VB.NET側のServerTypeには何を指定しましたか?

kyoyu_sub

投稿数: 26
登録日時: 07/04/11


Re: PLS-00222のエラーについて
投稿時刻: 2007/04/19 16:21   ktakamura さんへの返信です。 ktakamura さんへの返信です。
  このスレッドに返信します… 返信

>まず、number型とchar型の入ったRECORDを定義して下さい。
>次にそれを使ったVARRAYのTYPEを定義して下さい。

ご回答ありがとうございます。
PLSQLに関してまったく初心者なので、
上記のパッケージで、type定義方法を教えていただけますか?

kyoyu_sub

投稿数: 26
登録日時: 07/04/11


Re: PLS-00222のエラーについて
投稿時刻: 2007/04/19 16:36   y-kamijo さんへの返信です。 y-kamijo さんへの返信です。
  このスレッドに返信します… 返信

ご回答ありがとうございます。

ServerTypeはバインド変数定義時の設定項目ですか?
VB.NET側ではバインド変数の定義はしていません。
.ADDTABLEメソッドでORATYPE_CHARとORATYPE_NUMBER両方あります。






ウェブサイトのご使用条件 | 個人情報保護基本方針/情報保護基本方針