CREATE OR REPLACE PROCEDURE test1
(
  cv_1 IN OUT SYS_REFCURSOR,
cv_2 IN OUT SYS_REFCURSOR
)
AS
 v_database NVARCHAR2(128);
BEGIN
open cv_1 for
      SELECT * 
        FROM ( SELECT  字段1,字段2  FROM 表1    )
        WHERE ROWNUM <= 1;   IF ( 没有记录 ) THEN  --请问这个如果处理        SELECT *
        INTO v_database from (select 字段1 from 表2)         IF ( 存在记录 ) THEN  --请问这个如果处理
            open cv_2  for SELECT v_database from dual;
         else
             操行别的操作
         END IF;
   END IF;END;-------------------
最终得到dataset

解决方案 »

  1.   

    没必要用游标啊  SELECT count(*) into v_flag  
      FROM ( SELECT 字段1,字段2 FROM 表1 )
      WHERE ROWNUM <= 1;
    if v_flag=0 then --没有记录
    if v_flag>=1 then --有记录 
      

  2.   

    我需要返回的记录集,最终返回dataset
      

  3.   

      SELECT count(*) into v_flag   
      FROM ( SELECT 字段1,字段2 FROM 表1 )
      WHERE ROWNUM <= 1;
    if v_flag=0 then --没有记录
    if v_flag>=1 then --有记录 
    那你加一段这样的语句 
      

  4.   

    那你可以直接open cursor啊   cursor不是有notfound么
    但是相比之下  多一次查询  和打开一个游标  个人觉得  还是多一次查询好
    毕竟游标也算是资源了
      

  5.   

    定义一个dataset变量;然后open 变量 for sql语句;然后判断该变量是否为空就行了
    参考一下:
    http://topic.csdn.net/u/20110113/10/a25ab493-2793-4ad3-a1f0-ad41e11ec314.html?75821
      

  6.   

    你fetch cv_1 into xxx之后,oracle数据会返回个布尔变量给你的,如果有记录就是true,没有记录为false
    所以cv_1%found代表有记录,cv_1%notfound代表没有记录,这应该很常用的变量的吧
      

  7.   

    我觉得这里不能够去fetch游标 楼主的需求是返回游标里的内容 在过程里不做处理的 
      

  8.   

    怎么不能。我fetch一次我就推出不就行了。
      

  9.   

    ...第一次的时候为什么要open cv_1,直接计算count(*)不就可以了.
      

  10.   


    if cv_1%notfound then 
    ...
    else
    ...
    end if
      

  11.   


    CREATE OR REPLACE PROCEDURE test1
    (
      cv_1 IN OUT SYS_REFCURSOR,
    cv_2 IN OUT SYS_REFCURSOR
    )
    AS
     v_database NVARCHAR2(128);
    BEGIN
    open cv_1 for
      SELECT * 
      FROM ( SELECT 字段1,字段2 FROM 表1 )
      WHERE ROWNUM <= 1;  BEGIN
        SELECT COUNT(*) INTO CNT FROM 表1 WHERE ROWNUM <= 1;  IF CNT = 0 THEN --no data  SELECT *
      INTO v_database from (select 字段1 from 表2)  IF CNT > 0 THEN --have data
      open cv_2 for SELECT v_database from dual;
      else
      操行别的操作
      END IF;
      END IF;END;