10

プロシージャ内でSELECTをデバッグしようとしていますが、匿名ブロックを使用してデバッグしようとしています。SQL Developerが最後のSELECTステートメントを返すようにしたいのですが、エラーが発生します。

ORA-06550: line 21, column 5:
PLS-00428: an INTO clause is expected in this SELECT statement

プロシージャ内には、そのselectのINTOがありますが、デバッグ用の最後のSELECTステートメントの結果を簡単に取得できる簡単な方法はありますか?匿名のブロックと変数を使用しているので、コードは実際にプロシージャ内にあるものとできるだけ類似しているため、コードを変更する必要はありません。

set serveroutput on format wrapped;
DECLARE
  p_cd_doc_type number;
  p_dc_doc_code varchar2(200);
  p_dt_base date;
  p_qt_days number;
  p_vl_mov_total number;
  p_qt_transac number;
  v_dt_max date;
  v_dt_min date;
begin
  p_dt_base := sysdate;
  p_qt_days := 1;

  v_dt_max := trunc(p_dt_base) + 1;
  v_dt_min := v_dt_max - p_qt_days;
  p_vl_mov_total := 0;

  DBMS_OUTPUT.PUT_LINE('v_dt_max = ' || v_dt_max);
  DBMS_OUTPUT.PUT_LINE('v_dt_min = ' || v_dt_min);

    select *
    from tb_cad_cliente a join tb_trn_transacao b
      on a.cd_cliente = b.cd_cliente 
    where a.cd_doc_type = p_cd_doc_type
    and a.dc_doc_code = p_dc_doc_code
    and b.dt_row between v_dt_min and v_dt_max
    and b.cd_status = 3;
end;
4

5 に答える 5

11

これを試して、結果を簡単に印刷できます。

declare
your_variable varchar2(19);
BEGIN
DBMS_OUTPUT.PUT_LINE('init..');
 FOR x IN (SELECT      your_column
                 FROM you_table
                 where rownum<2
             order by 1)
   LOOP
      DBMS_OUTPUT.PUT_LINE(x.your_column);
   END LOOP;
END;
于 2011-07-11T10:56:45.657 に答える
1

selectの値を返すには、コンテナ(参照カーソルまたはREF CURSOR)に選択する必要があります。宣言にはref_cursor_out SYS_REFCURSOR; 、選択内容を含めて次のように変更する必要があります。

select * into ref_cursor_out ...

SQL Developerには、結果セットをグリッドにロードして表示するようにIDEに指示するオプションがあります(私はToadユーザーなので、SDのどこにあるかを忘れています)。

[編集:@DCookieからのコメントごとに、キャッチしてくれてありがとう!]

于 2011-06-23T14:26:46.403 に答える
1

Oracle12c以降の場合

declare
    rfc sys_refcursor; 
begin
    open rfc for select * from table;
    dbms_sql.return_result(rfc);
end;
于 2021-03-02T03:27:01.430 に答える
0

エラー

私の知る限り、デバッグに使用するツールが何であれ、pl / sqlブロック(匿名および名前付き)はPL/SQLコンパイラに対して有効である必要があります。実際のところ、ブロックはPL / SQLコンパイラに対して有効ではなく、エラーはそこにあり、SQLDeveloperではなくPL/SQLコンパイラから発生しています。

PLS-00428:このSELECT文にはINTO句が必要です原因:SELECTINTO文のINTO句が省略されました。たとえば、コードはSELECT deptno、dname、loc FROM dept WHERE...のようになります。SELECTdeptno、dname、loc INTO dept_rec FROM deptWHERE...の代わりにPL/SQLでは、サブクエリのみがINTO句なしで記述されます。 。処置:必要なINTO句を追加してください

ORA-06550:行string、列string:string原因:通常、PL/SQLコンパイルエラーです。アクション:なし

エラーが発生する理由

Pl / sqlエラーが表示された場合は、コードマニュアル で調査するしかありません。静的SQL文の名前の解決


PS: ルートは常に同じです:

質問する方法

すべての「オラクル」はここにあります:

SQLDeveloper

于 2011-06-23T15:40:58.200 に答える
0

最近、MSSQLからPLSQLに変更しましたが、分析目的のプロシージャからのテーブルとしての戻り値がありません。2つのステップでテーブルを返す単純な動的クエリを作成しました。多分誰かがそれを使用します:

/* 
rkry20150929: Return table from anonymous block 
*/
declare
v_stmt varchar2(1000);
c int;
BEGIN
 select count(*) into c from user_tables where table_name = upper('tmp_result');
 if c>0
 THEN 
  v_stmt := 'truncate table tmp_result';
  execute immediate v_stmt; 
  v_stmt := 'drop table tmp_result';
  execute immediate v_stmt; 
 end if;
 v_stmt :='CREATE GLOBAL TEMPORARY TABLE tmp_result on commit preserve rows AS ';
 v_stmt:= v_stmt || 
 /*-----THERE FILL SQL COMMAND-----------*/'
 SELECT ''Result select to table in anonymous block '' MyColumn FROM DUAL
 ';/*-----THERE FILL SQL COMMAND-----------*/
 execute immediate v_stmt;
 End;
 /*FIRST EXECUTE TO HERE */
SELECT * FROM tmp_result;
于 2015-09-29T12:02:13.543 に答える