+ -
当前位置:首页 → 问答吧 → 遇到个游标奇怪的问题,请高手来帮忙

遇到个游标奇怪的问题,请高手来帮忙

时间:2011-11-21

来源:互联网

代码大致如下:
PRO_INDEXDATA(IN_TABLES VARCHAR2)
is
  cursor A_CUR(CUR_TABLES VARCHAR2) is
  SELECT TABLE_NAME
  FROM ALL_TABLES
  WHERE TABLE_NAME IN (CUR_TABLES);
  AAA A_CUR%rowtype;

V_TABLES VARCHAR2(200);

begin
  if IN_TABLES is null then
...
  else
  V_TABLES := '''' || REPLACE(UPPER(IN_TABLES), ',', ''',''') || ''''---前几天在论坛问别人的,意思是如果遇到aaa,bb,cc结果变成'aaa','bb','cc',但是好像这样写当游标参数有问题,结果查不出记录来,不知道怎么搞的,有谁能解决这个问题。dbms_output.put_line(V_TABLES); ----能打印的出for ..LOOP
dbms_output.put_line(1); --打印不出,查不到记录,直接跳出游标end loop
end;

作者: sxq129601   发布时间: 2011-11-21

这样写编译器会把它当成一个参数的,如果知道in 的范围,比如就只有三个就写三个参数好了。

如:

DECLARE

var VARCHAR2(100);
CURSOR v_cur(lv_par VARCHAR2,lv_par2 VARCHAR2,lv_par3 VARCHAR2) IS
SELECT 1 fir
FROM dual
WHERE 'a' IN (lv_par,lv_par2,lv_par3);

v_record v_cur%ROWTYPE;

BEGIN

FOR v_record IN v_cur('a','b','c') LOOP

dbms_output.put_line(v_record.fir);
END LOOP;

END;

1 是可以打印出来的。

如果不确定个数, 就用动态sql拼写了。试一试!

作者: gjswxhb   发布时间: 2011-11-22

热门下载

更多