- PR -

ストアド実行エラー(ORA-24338)

1
投稿者投稿内容
なりこ
ベテラン
会議室デビュー日: 2005/06/09
投稿数: 61
投稿日時: 2005-08-01 16:54

いつもお世話になっています。

オラクルのPL/SQLを実行しているのですが、今まで正常に行えていた
ストアド実行が、リビルド後「ORA-24338文字の処理が実行されません」と
いうエラーが発生するようになりました。

ただ、ストアド自体は正常に終了できているようで、戻り値に値が
帰ってきています。
色々調べたのですが、検討がつきません。
おなじ様な現象に遭遇した方いらっしゃいませんか?

<ストアドCall>
OraCmd = new OracleCommand("PK_XXX.FC_YYY","オラクルコネクション");
OraCmd.CommandType = CommandType.StoredProcedure;

pMaker = "1000";
pTaid = "1";

OraCmd.Parameters.Clear();

Parameters.Add(new OracleParameter("rVal", OracleType.Int16,1)).Direction= ParameterDirection.ReturnValue;

OraCmd.Parameters.Add(new OracleParameter("IN_MAKER", OracleType.VarChar)).Value = pMaker;

OraDBCmd.OraCmd.Parameters.Add(new OracleParameter("IN_TAID", OracleType.VarChar)).Value = pTaid;

OraCmd.Parameters.Add(new OracleParameter("OUT_MSG", OracleType.VarChar,2000)).Direction = ParameterDirection.Output;

OraCmd.Parameters.Add(new OracleParameter("OUT_CURSOR", OracleType.Cursor)).Direction = ParameterDirection.Output;

OracleDataAdapter MyDA = new OracleDataAdapter(OraDBCmd.OraCmd);

OraDBCmd.OraCmd.ExecuteNonQuery(); <----ここでエラー発生



じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-08-01 17:17
こんにちは、じゃんぬ です。

引用:

オラクルのPL/SQLを実行しているのですが、今まで正常に行えていた
ストアド実行が、リビルド後「ORA-24338文字の処理が実行されません」と
いうエラーが発生するようになりました。
ただ、ストアド自体は正常に終了できているようで、戻り値に値が帰ってきています。


そういう時は、C# 側のソースではなくて、PL/SQL 側のソースを疑った方が良いです。
エラーが起きた時のパラメータを渡して、Oracle 側で実行してみてください。



_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
なりこ
ベテラン
会議室デビュー日: 2005/06/09
投稿数: 61
投稿日時: 2005-08-01 17:35

じゃんぬ さん
返信ありがとうございます。

エラーが出た際、Oracleのストアドも疑ったので、PL/SQL Developerを使って
検証してみました。その結果正常に終了できていたので
C#側のソースなんだろうと思ったのですが。。。

ちなみに
Oracmd.Parameters["rVal"].Value.ToString()
としてやると、値は入っているのです。。
いったいなんなのでしょうか・・・。

じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-08-01 17:44
こんにちは、じゃんぬ です。

引用:

エラーが出た際、Oracleのストアドも疑ったので、PL/SQL Developerを使って
検証してみました。その結果正常に終了できていたので
C#側のソースなんだろうと思ったのですが。。。


うーん、ORA-24338 ですから PL/SQL 側だと思うのですが...

ORA-24338: 文の処理が実行されません。
 原因: 文ハンドルを実行する前に、フェッチまたは記述が実行されようとしました。
 処置: 文を実行してからデータをフェッチまたは記述してください。

全く心当たりはありませんか?



_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
今川 美保(夏椰)
ぬし
会議室デビュー日: 2004/06/10
投稿数: 363
お住まい・勤務地: 神奈川県茅ヶ崎市
投稿日時: 2005-08-01 18:00
参考になりますでしょうか?


http://www.orafaq.com/forum/t/4521/0/

http://support.microsoft.com/default.aspx?scid=kb;ja;321715
なりこ
ベテラン
会議室デビュー日: 2005/06/09
投稿数: 61
投稿日時: 2005-08-02 10:15
夏椰さん、じゃんぬさん
返信ありがとうございます。

エラーの原因が判明しました。
OracleのPL/SQLでカーソルをOpen後、
戻り値変数にカーソルを設定し、その後すぐCloseしていました。
そのCloseを外したら、正常に実行されました。
(リビルドしたからエラーが出たのでは無く、ストアドも修正したあとで
リビルドし、実行したらエラーがでた為、エラー原因を勘違いしてしまいました)

カーソルをCloseしてしまっているから、ソース側でデータが取得
できないのでしょうが、その場合、カーソルはCloseしないまま
終わっていることにならないのでしょうか?
引き続き調べてみます。


<ストアド>
FUNCTION FC_XXXXX (
IN_MAKER IN VARCHAR2
,IN_TAID IN VARCHAR2
,OUT_MSG OUT VARCHAR2
,OUT_CURSOR OUT type_cursor
)
RETURN SMALLINT
IS

BEGIN

 SQL文


--カーソルオープン
OPEN W_CURSOR FOR SQL文;

-- OUT引数にカーソルを渡す
OUT_CURSOR := W_CURSOR;

CLOSE W_CURSOR;    <--これをコメントにすると正常に終了

/* 正常終了 */
return(0) ;

<ストアドCall側>
DataSet ds = new DataSet();

OraDBCmd.OraCmd.Parameters.Clear();
OraDBCmd.OraCmd.Parameters.Add(new OracleParameter("rVal", OracleType.Int16)).Direction= ParameterDirection.ReturnValue;

OraDBCmd.OraCmd.Parameters.Add(new OracleParameter("IN_MAKER", OracleType.VarChar)).Value = pMaker;

OraDBCmd.OraCmd.Parameters.Add(new OracleParameter("IN_TAID", OracleType.VarChar)).Value = pTaid;

OraDBCmd.OraCmd.Parameters.Add(new OracleParameter("OUT_MSG", OracleType.VarChar,2000)).Direction = ParameterDirection.Output;

OraDBCmd.OraCmd.Parameters.Add(new OracleParameter("OUT_CURSOR", OracleType.Cursor)).Direction = ParameterDirection.Output;

OracleDataAdapter MyDA = new OracleDataAdapter(OraDBCmd.OraCmd);

OraDBCmd.OraCmd.ExecuteOracleScalar();

rVal = OraDBCmd.OraCmd.Parameters["rVal"].Value.ToString();

if(rVal=="0")
{
MyDA.Fill(ds);
rFlg=true;
}
今川 美保(夏椰)
ぬし
会議室デビュー日: 2004/06/10
投稿数: 363
お住まい・勤務地: 神奈川県茅ヶ崎市
投稿日時: 2005-08-02 10:29
引用:

なりこさんの書き込み (2005-08-02 10:15) より:

カーソルをCloseしてしまっているから、ソース側でデータが取得
できないのでしょうが、その場合、カーソルはCloseしないまま
終わっていることにならないのでしょうか?
引き続き調べてみます。


http://otndnld.oracle.co.jp/document/products/oracle10g/101/doc_v6/win.101/B15519-01/featRefCursor.htm#sthref277
を読まれたことはありますでしょうか?
なりこ
ベテラン
会議室デビュー日: 2005/06/09
投稿数: 61
投稿日時: 2005-08-02 13:14
夏椰 さん

参考サイトありがとうございました。
やはり、Closeしてはダメなんですね。
1

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