在sqlserver中为了判断select语句有没有查询结果使用一下方法
if no exists (select * from tableA)
这种情况在oracle中应该如何处理。

解决方案 »

  1.   


    SQL> declare
      2    cnt int;
      3  begin
      4    select count(1) into cnt from tbl;
      5    if cnt=0 then
      6      dbms_output.put_line('No exists');
      7    else
      8      dbms_output.put_line('Data already exists');
      9    end if;
     10  end;
     11  /Data already existsPL/SQL procedure successfully completedSQL> 
      

  2.   

    正解!如果后面的操作也需要用到检索结果的话,可以使用CURSOR来实现。
    例:
    DECLARE  
        CURSOR c1 IS SELECT  ename, sal  FROM emp  WHERE  rownum<11;
        v_ename     VARCHAR2(10);
        v_sal       NUMBER(7,2);
    BEGIN
        OPEN  c1;
        FETCH  c1  INTO  v_ename, v_sal;
        WHILE  c1%FOUND LOOP
            DBMS_OUTPUT.PUT_LINE(v_ename||TO_CHAR(v_sal) );
            FETCH  c1  INTO v_ename, v_sal;
        END LOOP;
        CLOSE c1;
    END;可以通过%ROWCOUNT属性, 返回已从CURSOR中读取得记录数。
      

  3.   

    也就是说oracle中并没有等价的语句,是吗?
    只能变通实现
      

  4.   

    如果是insert/update数据的话,推荐用merge.
      

  5.   

    declare
      intRowCount number := 0;
    begin
      select count(*) into intRowCount from a;
      if intRowCount = 0 then
        dbms_output.put_line('No Data');
      else
        dbms_output.put_line('Have Data');
      end if;
    end;