• 締切済み

PL/PCLでORA-06502のエラー

失礼します。 あるストプロを作成し、VBから引数を渡して実行したところ、"ORA-06502: PL/SQL: 数値または値のエラー::文字列バッファが小さすぎます。"というエラーが出てきてしまいます。 しかし、VBから呼ぶのではなくストプロ単体で動かした場合は正常に動きます。ストプロ単体で動かしても同じエラーが出るのなら納得出来るのですが、VBからでのみエラーが出てきます。原因が全く分かりません。。そういうことってあるのでしょうか?? 何か原因が想像出来る方は教えて頂けると有り難いです。

noname#15844
noname#15844
  • Oracle
  • 回答数1
  • ありがとう数3

みんなの回答

回答No.1

ストアドプロシジャでも、ストアドファンクションでも 外的入力要素があって動作する以上、呼び出し方善し悪しで エラーになったり、正常終了したりということはあると考えるべきしょう。 で、単独動作の場合の呼び出し方と、VB内部で呼び出す場合で 違いがないことを確認されましたか? 何となく、VB側の変数の取り方が良くないとか、バグだとかで 不要なスペース等がストアドプロシジャに渡っているんじゃ ないですかね?

関連するQ&A

  • ORA-01438について

    OracleのPL/SQLの作成で "ORA-01438: 指定した精度を超えた値が列に指定されています"の エラーメッセージが出てしまいます。 PL/SQL上で、値が整数2桁+少数2桁 となるところを計算式を修正し 整数4桁になるようにしたところ、ORA-01438が出るようになりました。 ちなみに全てselectのはずです。 該当のカラムは副問い合わせを介してテーブルから呼んでいるのですが、 大本のカラムには精度(桁数)指定はありません。 いったいこれは何の精度指定に引っ掛かっているのでしょうか。 考えられる可能性を提示して頂けると大変助かります。

  • PL/SQLのエラーについて

    こんばんは。PL/SQLのエラーについて質問させて頂きます。 現在、Oracle8.1.7のデータベースを使用したオラクルのE-business Suiteという人事系システムで開発をしています。 そこで、SQL*Plusを使用してPL/SQLのパッケージをコンパイルしたところ、パッケージ仕様部も本体部もコンパイルのエラーは出なかったのですが、E-business SuiteにPL/SQLを設定し、動作させようとしたら、下記のようなエラーが発生しました。 -------------------------------------------------------------------- FDPSTP 内のOracleエラー 6550 原因: ORA-06550: 行 1、列 7: PLS-00221: 'ZT_TYOUHYOU_HENSEI_PKG'がプロシージャではないか、または未定義です。 ORA-06550: 行 1、列 7: PL/SQL: Statement ignored が原因で FDPSTP に失敗しました。 --------------------------------------------------------------------- また、作成したPL/SQLパッケージの仕様部は下記のとおりです。 -------------------------------------------------------------------- CREATE OR REPLACE PACKAGE APPS.ZT_TYOUHYOU_HENSEI_PKG AS FUNCTION get_henseihyo_kbn (i_grade IN VARCHAR2,o_hensei_kbn OUT VARCHAR2) RETURN NUMBER; <・・・・・中間部分は省略・・・・・> PROCEDURE main_shori (p_process_date IN VARCHAR2, p_location IN VARCHAR2); END ZT_TYOUHYOU_HENSEI_PKG; -------------------------------------------------------------------- 原因だと思われる心当たりの部分も探してみたのですが、このエラーの意味は何なのか、原因はどこにあるのか分かりません。 どなたかお判りの方、御回答よろしくお願い致します。

  • SQL実行エラー

    VBでオラクルを使ったアプリケーションをテストしているのですが、 次のようなエラーが出てとまってしまいます。 SQL実行エラー ORA-01801  日付形式が内部バッファに対して長すぎます。 原因はいったい何なのでしょうか? 知っている方がいらしたら教えてください。 宜しくお願いいたします。

  • オラクル(PL/SQL)のエラー

    いつもお世話になります。 オラクル・バージョン8.1.5を使用しています。 PL/SQLを実行すると以下のエラーが発生します。色々調べたのですが、解決しません。 なぜでしょうか?(ロジックがここでは書けないので、エラーのみ記載致します) ORA-06550:行1、列19:*PLS-00103: Encountered the symbol "." when expecting one of the following・・()-+mod この後ろは読めませんでした。 また、PL/SQLを実行したりするには、ただ単にオラクルをインストールしただけでは駄目なのでしょうか? よろしくお願い致します。

  • PL/SQL ORA-06502エラーに関して(動的SQL)

    こんにちは、いつもお世話になっております。 現在、会社で動的SQLを使用してとある開発をおこなっているのですが、 どうしても上手くいかないので、どなたか教えて下さいm(__)m 下記の動的SQL文で最後から2行目のSQL:DBMS_OUTPUT.PUT_LINE(varDel); を実行するとORA-06502: PL/SQL: 数値または値のエラー: 文字列バッファが小さすぎます。のエラーが 発生します、過去ログやgoogleで検索をかけてみたのですが、 どうにも解決方法がわからず困っています・・・・ お知恵のある方、教えて下さいませm(__)m ※多分、sql文が長いせいだとは思うのですが、どうしても これ以上は短くできず、静的ではなく、動的で動かさなければならない という条件付きなんですが、宜しく御願いします。 DECLARE numkeepD NUMBER := 0; -- データ保管期間格納用 varAST VARCHAR2(4) := '**'; -- アクセス区分定義外格納用 varkeepD VARCHAR2(2000); -- KEEP_DAYS取得SQL文格納用 varDel VARCHAR2(2000); -- DELETE文格納用 BEGIN varkeepD := 'SELECT KEEP_DAYS FROM SMCI4T910 WHERE ACC_KBN = '''||varAST||''''; DBMS_OUTPUT.PUT_LINE(varkeepD); EXECUTE IMMEDIATE (varkeepD) INTO numkeepD; DBMS_OUTPUT.PUT_LINE(numkeepD); -- アクセスログデータ削除SQL文格納 varDel := 'DELETE FROM '||cTABLE_STCI1T910||' ST910 ' ||'WHERE ' ||'ST910.DELETE_FLG = SCIS_CTS.cDEL_NO AND ' ||'EXISTS(' ||'SELECT 1 ' ||'FROM SMCI4T910 SM910 ' ||'WHERE ' ||'ST910.ACC_KBN = SM910.ACC_KBN AND ' ||'ST910.ACC_CYMD < TO_CHAR(SYSDATE - SM910.KEEP_DAYS,''YYYYMMDD'') AND ' ||'ST910.ACC_KBN <> varAST AND ' ||'SM910.DELETE_FLG = SCIS_CTS.cDEL_NO)'; DBMS_OUTPUT.PUT_LINE(varDel); --EXECUTE IMMEDIATE (varDel) END;

  • ORA-1036??

    突然本題ですが、 PL/SQLで条件によりINSERTかUPDATE処理を行いたいのです。 コンパイルは通りましたが、実行すると、 ORA-1036 というエラーが出ます。 マニュアルには ORA-1036:変数のname/numが無効です。 原因:ユーザー・サイドにバインド・コンテキストを見つけられません。 解決方法:バインドされている変数がSQL文に存在することを確認してください。 とあります。 insertやupdateの項目を何度もチェックしましたが、間違っていないと思います。 このエラーがでる可能性というのはどういう場合があるのか是非教えていただきたいのです。 チェックをしたものの、変数の見落としか、あるいは別の可能性があるのか知っている方がいましたら教えてもらえるとすっごく助かります。 あと、バインド・コンテキストとはなんでしょうか? 調べてみましたが、調べ方が悪いのか見つけられませんでした。

  • 『ORA-00936: 式がありません。』の回避方法。

    年の瀬を迎え、気分よく年を越したいのですが、このままでは越せるかどうかわかりません。。。 そこで、お力を貸して下さいm(__)m PL/SQLにてプログラミング中なのですが、SQL実行時に引数の中身が空の為に、ORA-00936: 式がありません。のメッセージが出てしまいます。 これを回避する方法として、 EXCEPTION WHEN OTHERS THEN dbms_output.put_line('取得項目不正'); としてエラーを拾っているのですが、これでは全てのエラーを拾ってしまうので、ORA-00936のみを拾えるEXCEPTIONをお知りの方は教えて下さい。お願いします。

  • 【PL/SQL】SQL文が長すぎてSELECTできない

    oracle9iのpl/sqlでSELECT文を発行し 取得したカーソルを返す処理をしています。 where句が動的になる為 実行するSQL文が長くなり ORA-06502: PL/SQL: 数値または値のエラー: 文字列バッファが小さすぎます。が発生しました のエラーが発生します。 そこで、SQL文の部分をCLOB型にしたり SQL文を「||」でつなげたり してみましたが、どちらもエラーになりました。 長すぎるSQL文を実行するには どうしたらよいでしょうか? 以下ソースです。(左側の数字は行数です) ----------------------------------- 1 PROCEDURE テスト(O_カーソル IN OUT 情報カーソル) IS 2 TYPE curType IS REF CURSOR; 3 tmpCur curType; 4 sqlStr VARCHAR2(32767); 5 6 7 BEGIN 8 9 sqlStr := 'SELECT ' 10 sqlStr := sqlStr || 'A,B ' 11 sqlStr := sqlStr || 'FROM' <<省略>> 12 OPEN tmpCur FOR sqlStr ←エラー発生 13 O_カーソル := tmpCur; --取得したカーソルを返す 14 END テスト; ----------------------------------- (1)SQL文をCLOB型にしてみる:コンパイルエラー 4 sqlStr CLOB (2)SQL文を「||」でつなげてみる:文字列バッファが小さすぎますでエラー Dim sqlStr1 VARCHAR2(32767); Dim sqlStr2 VARCHAR2(32767); Dim sqlStr3 VARCHAR2(32767); <<省略>> 12 OPEN tmpCur FOR (sqlStr1      || sqlStr2      || sqlStr3 <<省略>> )

  • PL/SQLのコンパイルエラーについて(ignored)

    以下はPL/SQLの一部です。 if (vn_CNT > 0 ) then -- 座席マスタ更新実行 行27 update M_SEAT 行28 set M_SEAT.CD_PC = :new.NK_PC , 行29 M_SEAT.CD_TANTO = :new.CD_TANTO , 行30 where M_SEAT.NO_PORT = :new.NO_PORT ; end if ; 実行すると以下のエラーがでます。。 行番号 = 27 列番号 = 3 エラー・テキスト = PL/SQL: SQL Statement ignored 行番号 = 30 列番号 = 5 エラー・テキスト = PL/SQL: ORA-01747: user.table.column、table.columnまたは列指定が無効です ちなみにOEMコンソールで作成しています。 M_SEATというテーブルは存在します。 権限どうのと言われているのはわかるのですが結局なにが原因なのかわかりません。 どなたか教えてください。

  • ORA-06502のエラー

    以下のPL/SQLを実行すると、ORA-06502:数値または値のエラーとでます。途中までは、INSERTできるのですが、IF文の180個目くらいでエラーになります。そのあたりをCur1の宣言時にWhereで指定するとうまくいきます。 DECLARE CURSOR Cur1 IS SELECT MOJI FROM A_TBL ; CNT NUMBER(10); KAKKO_FL NUMBER(1); BEGIN CNT := 0; KAKKO_FL :=0; FOR Cur_Rec1 IN Cur1 LOOP FOR S IN 1 .. LENGTH(Cur_Rec1.MOJI) LOOP IF(ASCII(SUBSTR(Cur_Rec1.MOJI,S,1)) = 33129) THEN /*33129は'('*/ EXECUTE IMMEDIATE ' INSERT INTO EDD.test1116 VALUES( ''' || Cur_Rec1.MOJI || ''' ) '; END IF; END LOOP; END LOOP; END; なにがなんだか、さっぱりわからないので、どうか、ご教授ください。