• 締切済み

PL/SQL デバック方法:入力を受け付けるには?

oracle初心者です。 DBMS_OUTPUT.PUT_LINEでデバック用の出力ができると思いますが、これの入力版はないのでしょうか? C言語で言うscanf()です。 getch()のようなものでもOKです。 環境は Oracle8.?? SQL Plus(コマンドプロンプトみたいなもやつ)でいつも実行しています。 よろしくお願いします。

  • Oracle
  • 回答数1
  • ありがとう数2

みんなの回答

  • patak
  • ベストアンサー率23% (108/457)
回答No.1

たとえば DECLARE wk_name TBL.LAST_NAME%TYPE; wK_sal TBL.SALARY%TYPE ; wk_emono TBL.EMPLOYEE_ID%TYPE := &p_empno; BEGIN SELECT LAST_NAME, SALARY INTO wk_name, wk_sal FROM TBL WHERE EMPLOYEE_ID = wk_empno; -- DBMS_OUTPUT.PUT_LINE('従業員No.' || wk_empno || 'の' || wk_name || '氏の給与は' || wk_sal); END; / p_empnoに値を入力してください: このときの wk_emono TBL.EMPLOYEE_ID%TYPE := &p_empno; の指定で入力情報を設定することができます。 パッケージでのパラメタも同様です。

tomoki5347
質問者

お礼

p_empnoに値を入力してください: 旧 4: wk_emono TBL.EMPLOYEE_ID%TYPE := &p_empno; 新 4: wk_emono TBL.EMPLOYEE_ID%TYPE := OEM_sqlplus_input_finished; wk_name TBL.LAST_NAME%TYPE; こんなエラーが出ちゃいます。 SQL Plus SQL Worksheet でも実行可能でしょうか?

関連するQ&A

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

  • 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;

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

  • PL/SQLでエラー

    PL/SQLの使用方法を検討しており、下記のようにサンプルを作成しました。 //1. 宣言部 create or replace package Pac is procedure Pro1(p1 in varchar2); end; / パッケージが作成されました //2. 本体 create or replace package body Pac is procedure Pro1(p1 in varchar2) is tempdate DATE; begin select to_char(sysdate, 'yyyy/mm/dd') INTO tempdate from dual; DBMS_OUTPUT.PUT_LINE('引数は' || p1 || 'です。'); DBMS_OUTPUT.PUT_LINE('日付は' || tempdate || 'です。'); end; end; / パッケージ本体が作成されました //3. 実行 execute Pac.Pro1('a'); // エラー内容 行1でエラーが発生しました。: ORA-00900: invalid SQL statement SQLPlusより、上記の[1. 宣言部]でパッケージを作成し、[2. 本体]で本体部分を作成しました。 その後、[3. 実行]を実施しましたが、 エラーが出力されて実行されません。 何がいけないのかお気づきの点がございましたら、 よろしくお願いします。

  • PL/SQLで

    set serveroutput on size 100000; declare wk_cnt integer; begin wk_cnt := 100; for wk_cnt in 1..10 loop … end loop; dbms_output.put_line(wk_cnt); end; / で、最後のwk_cntが10(11?)ではなく100になります。 何故でしょうか??

  • 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の動的SQLで複数の項目を取得する方法教えて下さい。

    動的SQLで複数の項目を取得する方法で 悩んでいます。 下記の例だと、1項目しか取れません。 何か他のやり方でもいいので、複数の項目を 取得する方法を教えていただきたいです。 ********************************************* declare sql_stmt varchar2(200); wk_grp varchar2(5); wk_name varchar2(30); type cursor_type is ref cursor; cur_name cursor_type; begin wk_grp := '1u'; open cur_name for 'select 名前 from 社員表 where 所属グループ = :v1' using wk_grp; loop fetch cur_name into wk_name; exit when cur_name%notfound; dbms_output.put_line(wk_name); end loop; close cur_name; end; ********************************************* 下記のようなDBMS_SQLパッケージ?? を利用した方法がいいんでしょうかね。。。。 DBMS_SQL.COLUMN_VALUE(SQL,1,WK_NAME) DBMS_SQL.COLUMN_VALUE(SQL,2,WK_NO) よくわかってないので、宜しくお願いします。

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

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

  • 質問:DBMS_OUTPUTの使用方法

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

  • 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;