使用一个引用游标处理两个不同的查询
Posted
技术标签:
【中文标题】使用一个引用游标处理两个不同的查询【英文标题】:Handle two different queries with one ref cursor 【发布时间】:2013-07-31 13:27:37 【问题描述】:我有两个选择查询,我想 为他们俩打开光标?
v_str1:='SELECT ROWID FROM ' || p_tblname|| 'WHERE '|| p_cname||'='''||
p_cvalue || '''';
v_str2:='SELECT COUNT ( * )
INTO v_cnt
FROM ' ||
p_tblname||
'WHERE '|| p_cname||' = '''||p_cvalue||'''';
.....
OPEN ref_cur_name FOR v_str1
LOOP
IF v_cnt = 1
THEN
EXIT;
ELSE
EXECUTE IMMEDIATE 'DELETE FROM '|| p_tblname||
'WHERE ROWID = REC.ROWID';
END IF;
v_cnt := v_cnt - 1;
END LOOP;
第一个查询是一个 select 语句,其他的只是将计数放入 v_cnt
。现在我需要执行这两个查询。现在有没有办法同时使用这两个查询?
OPEN
语句后也有语法错误,即在循环。
【问题讨论】:
请分享错误信息? ` 找到 'LOOP',期待: ;使用-或- || -or- / -or- ** -or- (+) -or- % 。 [ -or- : @CASE CONNECT_BY_ROOT 十进制数 EXISTS FALSE float integer NEW PRIOR SQL TRUE -or- ( * + - AT CONTINUE CURSOR DAY identifier MOD MODEL MULTISET NOT NULL REM string THE WHEN YEAR` 我在打开后缺少分号。 我找到了解决方案。问题是分号; 【参考方案1】:使用立即执行
EXECUTE IMMEDIATE 'SELECT COUNT ( * )
INTO v_cnt
FROM ' ||
p_tblname||
'WHERE '|| p_cname||' = '''||p_cvalue||'''';
【讨论】:
以上是关于使用一个引用游标处理两个不同的查询的主要内容,如果未能解决你的问题,请参考以下文章