2012-11-30 3 views
2

레코드가 테이블에 있는지 여부를 알려주는 SQL % ROWCOUNT 함수를 사용하고 싶습니다.Oracle에서 rowcount

DECLARE 
v_emp employee%ROWTYPE; 
CURSOR c_emp IS 
SELECT * FROM employee WHERE name='chuck'; 
BEGIN 
OPEN c_emp; 

    FETCH c_emp INTO v_emp; 
    IF SQL%ROWCOUNT=1 THEN 
      DBMS_OUTPUT.PUT_LINE('found'); 
      ELSE 
        DBMS_OUTPUT.PUT_LINE(TO_CHAR('not found')); 
     END IF; 
END; 

그러나 그 이름이 데이터베이스에

감사

답변

4

일반적으로, 당신은 좋겠 존재와 그 기록에 있는데도 전혀 아무것도 인쇄되지 않습니다 : 내가 가진 코드는 다음과 같다 , 당신은 아니오, <<cursor_name>>%rowcount을 확인해야 당신이 정말로 명시 적 커서를 사용하려면

DECLARE 
    l_count PLS_INTEGER; 
BEGIN 
    SELECT COUNT(*) 
    INTO l_count 
    FROM employee 
    WHERE name = 'chuck' 
    AND rownum = 1; 

    IF(l_count = 1) 
    THEN 
    dbms_output.put_line('found'); 
    ELSE 
    dbms_output.put_line('not found'); 
    END IF; 
END; 

그런 짓을 t sql%rowcount을 사용하여 가져온 행 수를 확인하십시오. 명시 적 커서를 사용하려면 커서를 닫아야합니다. 당신이 당신의 테이블 정의 또는 사용중인 데이터를 게시하지 않았기 때문에, 나는 예를

SQL> ed 
Wrote file afiedt.buf 

    1 DECLARE 
    2 v_emp emp%ROWTYPE; 
    3 CURSOR c_emp IS 
    4  SELECT * FROM emp WHERE ename='SMITH'; 
    5 BEGIN 
    6 OPEN c_emp; 
    7 FETCH c_emp INTO v_emp; 
    8 IF c_emp%ROWCOUNT=1 THEN 
    9  DBMS_OUTPUT.PUT_LINE('found'); 
10 ELSE 
11  DBMS_OUTPUT.PUT_LINE(TO_CHAR('not found')); 
12 END IF; 
13 CLOSE c_emp; 
14* END; 
SQL>/
found 

PL/SQL procedure successfully completed. 

SCOTT 스키마에 EMP 테이블을 사용합니다 그리고 당신은, 당신이 무엇을 사용 방법에 상관없이 점에 유의하지 DBMS_OUTPUT의 출력을 표시하려면 사용중인 도구에서 출력을 활성화해야합니다. SQL * Plus를 사용하는 경우 익명 PL/SQL 블록을 실행하기 전에

을 실행하기 전에 실행해야합니다.

0

솔루션 SQL%ROWCOUNT 및 지역 변수없이 :

begin 
    for entry in (select case when count(*) = 0 then 'found' 
          else 'not found' 
         end as is_found_txt 
        from dual 
        where exists(select null 
           from employee 
           where name = 'chuck')) 
    loop 
     dbms_output.put_line(entry.is_found_txt); 
    end loop; 
end;