oracle – pl / SQL显示select语句的结果

前端之家收集整理的这篇文章主要介绍了oracle – pl / SQL显示select语句的结果前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
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,我也使用它,但它仍然不喜欢语法.

解决方法

假设您正在使用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.

猜你在找的Oracle相关文章