使用一个引用光标处理两个不同的查询

时间:2013-07-31 13:27:38

标签: plsql dynamic-sql ref-cursor

我有两个选择查询,我想 打开两个游标?


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语句,其他只是将计数放入 IF v_cnt = 1 THEN EXIT; ELSE EXECUTE IMMEDIATE 'DELETE FROM '|| p_tblname|| 'WHERE ROWID = REC.ROWID'; END IF; v_cnt := v_cnt - 1; 。现在我需要执行这两个查询。现在有没有办法同时使用这两个查询?

v_cnt语句后也存在语法错误,即在LOOP。

1 个答案:

答案 0 :(得分:0)

使用立即执行

EXECUTE IMMEDIATE 'SELECT   COUNT ( * )
 INTO   v_cnt
 FROM  '                                                                                                            ||
  p_tblname||
'WHERE  '|| p_cname||' = '''||p_cvalue||'''';