• ベストアンサー

質問:DBMS_OUTPUTの使用方法

初めまして、今業務でPL/SQLを使っているのですが、何を調べても分からないのでお聞きします。 DBMS_OUTPUTをプログラムに書き込んで画面表示をしています。文字や変数に格納された情報は出るのですが、空業や、スペースは以下のようにしてもどうしても表示されません。どうすればよいのでしょうか。 私が試した方法。↓ DBMS_OUTPUT.PUT_LINE( '' ); や DBMS_OUTPUT.NEW_LINE; です。 どうか教えてください。お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • muyoshid
  • ベストアンサー率72% (230/318)
回答No.1

こんにちわ DBMS_OUTPUT パッケージで空行の出力についてですが、 set serveroutput を実行する時に、format wrapped を指定すれば 問題を解決できると思います。 以下に、実行結果を示します。 ※ 通常 (デフォルト) のケース set serveroutput on begin dbms_output.put_line('123'); dbms_output.put_line(''); dbms_output.put_line('456'); end; / 123 456 PL/SQLプロシージャが正常に完了しました。 ※ format wrapped を指定したケース set serveroutput on format wrapped begin dbms_output.put_line('123'); dbms_output.put_line(''); dbms_output.put_line('456'); end; / 123 456 PL/SQLプロシージャが正常に完了しました。

関連するQ&A

  • 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を使用しております。

  • 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が実行されたタイミングでリアルタイムに画面表示する方法はありますか?

  • PL/SQLでの配列についてetc

    PL/SQLについて、何点か質問があります。 どれかひとつでも構わないので、皆さんのお知恵をお貸しください。 (1)ある配列変数に格納されている要素を全てDBMS_OUTPUT.PUT_LINE();で表示することってできますか? (PHPのecho var_dump();のような感じで) (2)ある配列変数に使用されている添え字(もしくは添え字の数)を取得することってできますか? (3)ORA-01403エラーはカーソルのデータが存在しない場合に、発生するケースはありますか? よろしくおねがいします。

  • 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/ 解決方法、もしくは他に原因が検討違いでしたら教えていただけます様お願いします。

  • DBMS_LOCK.SLEEPについて

    いつもお世話になっております。 PL/SQLパッケージにて、DBMS_LOCK.SLEEP()を使用したいのですが、 「DBMS_LOCKは宣言されてません。」とエラーになります。 DBMS_OUTPUTプロシージャに関しては正常に動作しているのですが、DBMS_LOCK.SLEEP()を使用するさいにインストールしなければいけないパッケージなどあるのでしょうか? 初心者で申し訳ありませんが、宜しくお願いします。

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

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

  • PL/SQLでの文字列と数値の比較について

    いつもお世話になっております。 次のように、今が午前中なら「AM」と表示するPL/SQLのプログラムを考えています。 BEGIN if TO_CHAR(SYSTIMESTAMP,'hh24')<12 THEN DBMS_OUTPUT.PUT_LINE('AM'); END if; END; / 動作しているように見えるのですが、TO_CHARはVARCHAR2型を返すとマニュアルに書いてありました。TO_CHARが返す値は数値に変換したほうがよいのでしょうか。あるいは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;

  • ストアドプロシージャでのパラメータのデータ型の質問

    いつもお世話になっております。たびたびの質問で恐縮です。 ストアドプロシージャでのパラメータのデータ型が設定できず困っております。たとえば次はパラメータの文字を表示させるものです。 CREATE OR REPLACE PROCEDURE test(p VARCHAR2(10)) IS t VARCHAR2(10); BEGIN t:=p; DBMS_OUTPUT.PUT_LINE(t); END; / コンパイルエラーになるので、パラメータのデータ型を、VARCHAR2のように(10)を取るとうまくいきます。しかし、変数定義の「t VARCHAR2(10)」の(10)を取ると文字列の制約制限からはずれるとのエラーになります。 VARCHAR2というのは、PL/SQLの変数あるいはパラメータではどのように記述すればよろしいのでしょうか。 基本的なことを理解しておらず、申し訳ありません。 どうか、よろしくお願いいたします。

  • mod_plsql使用時のDBMS_OUTPUT.PUT_LINEの出力先

    DBMS_OUTPUT.PUT_LINEを使用してデバッグメッセージを出力しようとしましたが、肝心の出力先がわからず困り果てています。 内部で使用しているApacheの設定ファイルへの記述ではないか、と当たりをつけてはみたものの、情報が少なく解決には至りませんでした。 現在Apacheのlogsディレクトリに出力されているファイルは、access.logとerror.log(とsslのログ)です。 見るべき情報ソース、パラメータの名前、設定値等ご存知の方はいらっしゃいませんでしょうか。