4
Set ServerOutput on size 100000;
declare
countTab number := 0;
countCol number := 0;
currDate varchar2(30);
scale number := 0;


Begin

select count(*) into countCol from USER_TAB_COLUMNS where TABLE_NAME = 'EVAPP_INTERFACE' and COLUMN_NAME = 'TARGET_AMNT_LTV_NUM' and DATA_SCALE is null; 
IF  (countCol <> 0) then   

 DBMS_OUTPUT.put_line('  EVAPP_INTERFACE.TARGET_AMNT_LTV_NUM values begin'); 
 execute immediate 'select APPSEQNO, TARGET_AMNT_LTV_NUM from evapp_interface where TARGET_AMNT_LTV_NUM > 999999999999';

END IF;
END;
\

選択クエリの結果を表示しようとしています。selectステートメントだけをそのまま実行してみましたが、記載されている列が見つからないという例外があります。そこで、列の前にテーブル名を入れてみたところ、を使用する必要があるとの不満があり、それINTOも使用しましたが、それでも構文が気に入らなかったのです。

4

1 に答える 1

3

SQL * Plusを使用していると仮定すると、最も簡単なオプションはおそらく次のようなことを行うことです。

Set ServerOutput on size 100000;
variable rc refcursor;
declare
  countTab number := 0;
  countCol number := 0;
  currDate varchar2(30);
  scale number := 0;
Begin
  select count(*) 
    into countCol 
    from USER_TAB_COLUMNS 
   where TABLE_NAME = 'EVAPP_INTERFACE' 
     and COLUMN_NAME = 'TARGET_AMNT_LTV_NUM' 
     and DATA_SCALE is null; 
  IF  (countCol <> 0) then   
    DBMS_OUTPUT.put_line('  EVAPP_INTERFACE.TARGET_AMNT_LTV_NUM values begin'); 
    open :rc 
     FOR 'select APPSEQNO, TARGET_AMNT_LTV_NUM ' ||
         '  from evapp_interface ' ||
         ' where TARGET_AMNT_LTV_NUM > 999999999999';
  END IF;
END;
/

PRINT rc;

PL / SQLの結果を表示する場合は、カーソルを開き、結果をローカル変数にフェッチしてから、ローカル変数に書き込むなどの操作を行う必要がありますDBMS_OUTPUT

于 2012-07-23T15:35:52.467 に答える