- ベストアンサー
Function内に記述したdbms_output.put_lineの表示について
Functionのテスト(デバッグ)にて、 dbms_output.put_lineを使用しております。 しかし、 SQL*Plusで「SET SERVEROUTPUT ON」を発行してから SELECT文を発行しても、 「dbms_output.put_line」で指定した値が表示されません。 ソースにはdbms_output.put_line文を入力しておりますし、 コンパイルも通っております。 SELECT文にてdbms_output.put_lineで指定した値を表示するには、 どのようにすればよいのでしょうか? なお環境は、 Oracle8iを使用しております。
- susumufire
- お礼率88% (56/63)
- Oracle
- 回答数2
- ありがとう数4
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
ひょっとしてこれ? dbms_outputはPL/SQLでのみ動くので、 declare a varchar2(1); begin select fnc(2) into a from tbl where col1 = 'hoge' ; end; / なら出力されますが、 select fnc(2) from tbl; だと出力されません。
その他の回答 (1)
- taka451213
- ベストアンサー率47% (436/922)
こんにちは。 うーん、 まさかとは思いますが、バッファサイズが0??? そんな事じゃないですよね・・・。 (^^ゞ
お礼
ご回答ありがとうございます。 多分、バッファのサイズが0だと、 Functionは動かないと思います。 念のため、バッファサイズを確認しましたが、 0ではありませんでした。
関連するQ&A
- DBMS_OUTPUT.PUT_LINEを実行したらすぐに画面表示する
DBMS_OUTPUT.PUT_LINEを実行したらすぐに画面表示する方法 Oracle 10g を SQLPLUS で使っています。 ストアドプロシージャ内に多数のDBMS_OUTPUT.PUT_LINEを記述しておりますが、プロシージャが終了しないとDBMS_OUTPUT.PUT_LINEの出力結果がが画面表示されません。 たとえば10分の処理だと10分後にまとめてDBMS_OUTPUT.PUT_LINEの表示がされるのですが、DBMS_OUTPUT.PUT_LINEが実行されたタイミングでリアルタイムに画面表示する方法はありますか?
- ベストアンサー
- Oracle
- 質問:DBMS_OUTPUTの使用方法
初めまして、今業務でPL/SQLを使っているのですが、何を調べても分からないのでお聞きします。 DBMS_OUTPUTをプログラムに書き込んで画面表示をしています。文字や変数に格納された情報は出るのですが、空業や、スペースは以下のようにしてもどうしても表示されません。どうすればよいのでしょうか。 私が試した方法。↓ DBMS_OUTPUT.PUT_LINE( '' ); や DBMS_OUTPUT.NEW_LINE; です。 どうか教えてください。お願いします。
- ベストアンサー
- その他(データベース)
- pl/sqlでselect文の結果をCSV出力しようとしています。(o
pl/sqlでselect文の結果をCSV出力しようとしています。(oracle 8.16) そこで以下のようにクエリの結果を出力しようとしているのですが、 SQL文の長さが255バイト(文字?)以下ならば正常に動くのですが、 255を超えると正常な結果が返ってこない状況です。 (エラーは発生しないが、結果が1カラム分しか出力されない。) OPEN c FOR SQL文; LOOP FETCH c INTO vOutputLine; EXIT WHEN c%NOTFOUND; DBMS_OUTPUT.PUT_LINE(SUBSTR(vOutputLine,1,100)); DBMS_OUTPUT.PUT_LINE(SUBSTR(vOutputLine,101,100)); DBMS_OUTPUT.PUT_LINE(SUBSTR(vOutputLine,201,100)); DBMS_OUTPUT.PUT_LINE(SUBSTR(vOutputLine,301,100)); DBMS_OUTPUT.PUT_LINE(SUBSTR(vOutputLine,401,100)); DBMS_OUTPUT.PUT_LINE(SUBSTR(vOutputLine,501,100)); END LOOP; CLOSE c; oracle8だとPUT_LINE などで使用できる一行のバッファサイズが 255 バイトまでという記事があったのでそれが原因かなとおもってのですが、解決方法が分かりません http://www.shift-the-oracle.com/plsql/dbms_output/ 解決方法、もしくは他に原因が検討違いでしたら教えていただけます様お願いします。
- 締切済み
- Oracle
- mod_plsql使用時のDBMS_OUTPUT.PUT_LINEの出力先
DBMS_OUTPUT.PUT_LINEを使用してデバッグメッセージを出力しようとしましたが、肝心の出力先がわからず困り果てています。 内部で使用しているApacheの設定ファイルへの記述ではないか、と当たりをつけてはみたものの、情報が少なく解決には至りませんでした。 現在Apacheのlogsディレクトリに出力されているファイルは、access.logとerror.log(とsslのログ)です。 見るべき情報ソース、パラメータの名前、設定値等ご存知の方はいらっしゃいませんでしょうか。
- ベストアンサー
- Oracle
- Oracleでミリ秒の加算
Oracleで秒以下の単位を含む加算の仕方を教えてください。 下記のサンプルでtargetTimeが0.5秒ずつ増えていくようにしたいのですがうまくいきません。 ちょっと書き方を変えればいいだけの事のような気がするのですが、いろいろ試したのですがうまくいきませんでした…。 よろしくお願いします。 SET SERVEROUTPUT ON FORMAT WRAPPED DECLARE targetTime TIMESTAMP(6) := TO_TIMESTAMP('2012/08/14 06:00:00', 'YYYY/MM/DD HH24:MI:SS'); vAddTime NUMBER(20, 10) := (1 / 86400) * 0.5; i integer := 0; BEGIN dbms_output.put_line('加算する値'); dbms_output.put_line(vAddTime); while (i < 10) loop dbms_output.put_line(targetTime); targetTime := targetTime + vAddTime; i := i + 1; end loop; END;
- ベストアンサー
- Oracle
- PLSQLのCASE文でNULLを評価する際の動作について
PLSQLのCASE文でNULLを評価する際の動作について PLSQLのCASE文でNULLを評価する時、下記の例1ではNULLを判定できず、 例2を使えばNULLを判定できました。 問題は解決したのですが理屈がわかりません。 ご存知の方、教えてください。 --例1 DECLARE MOJI VARCHAR2(1); BEGIN CASE MOJI WHEN NULL THEN DBMS_OUTPUT.PUT_LINE('NULL DESU'); ELSE DBMS_OUTPUT.PUT_LINE('NULL DEHA NAI'); END CASE; END; --例2 DECLARE MOJI VARCHAR2(1); BEGIN CASE NVL(MOJI,' ') WHEN ' ' THEN DBMS_OUTPUT.PUT_LINE('NULL DESU'); ELSE DBMS_OUTPUT.PUT_LINE('NULL DEHA NAI'); END CASE; END;
- ベストアンサー
- その他(プログラミング・開発)
- PL/SQL デバック方法:入力を受け付けるには?
oracle初心者です。 DBMS_OUTPUT.PUT_LINEでデバック用の出力ができると思いますが、これの入力版はないのでしょうか? C言語で言うscanf()です。 getch()のようなものでもOKです。 環境は Oracle8.?? SQL Plus(コマンドプロンプトみたいなもやつ)でいつも実行しています。 よろしくお願いします。
- 締切済み
- Oracle
- PL SQL のループ
あるセレクト文のパフォーマンスを測定するためにループで複数回実行し時間を測定したいのですが、select 変数 into をしないとコンパイルできず実行できません。 同じセレクト文を複数回実行し時間を測定するのに良い方法は無いでしょうか? CREATE OR REPLACE PROCEDURE test IS BEGIN DBMS_OUTPUT.PUT_LINE(TO_CHAR(sysdate(),'YYYY/MM/DD HH24:MI:SS')); FOR i IN 1..100 LOOP SELECT a,b,c,d,e FROM tbl; END LOOP; DBMS_OUTPUT.PUT_LINE(TO_CHAR(sysdate(),'YYYY/MM/DD HH24:MI:SS')); END;
- ベストアンサー
- Oracle
- 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;
- ベストアンサー
- その他(データベース)
お礼
ご回答ありがとうございます。 やはりプロシージャでないとdbms_outputは出力されませんか・・・ ファンクションのテストにはプロシージャで行うのがよさそうですね。