SET SERVEROUTPUT ON
DECLARE VARSEC_RIGHT_SID NVARCHAR2(100);
BEGIN
    SELECT SEC_RIGHT_SID INTO VARSEC_RIGHT_SID FROM USER_RIGHT
    
    IF SQL%FOUND THEN
        DBMS_OUTPUT.PUT_LINE('存在:' ||  VARSEC_RIGHT_SID);
    END IF;
END;[當查詢沒數據時候就報錯,怎麼寫啊!剛接觸Oracle。謝謝,指點!

解决方案 »

  1.   

    Exception When No_data_found then    Dbms_output.put_line(‘不存在’);
      

  2.   

    参考代码(请适当补充异常处理的知识)DECLARE VARSEC_RIGHT_SID NVARCHAR2(100);
    BEGIN
        SELECT SEC_RIGHT_SID INTO VARSEC_RIGHT_SID FROM USER_RIGHT    
        IF SQL%FOUND THEN
            DBMS_OUTPUT.PUT_LINE('存在:' ||  VARSEC_RIGHT_SID);
        END IF;
    EXCEPTION
        WHEN NO_DATA_FOUND THEN
            DBMS_OUTPUT.PUT_LINE('没有数据');    
    END;
      

  3.   

    嗯!謝謝,如果是這種結構呢?DECLARE 
        --變量聲明
        VARSEC_RIGHT_SID  NVARCHAR2 (100);
        QVARSEC_RIGHT_SID NVARCHAR2 (100);
    CURSOR CUR_MES_GRP  IS
        SELECT SEC_RIGHT_SID  FROM MES_SEC_RIGHT ORDER BY SEC_RIGHT_SID DESC;   --權限維護表
    BEGIN
        OPEN CUR_MES_GRP;
        FETCH CUR_MES_GRP INTO VARSEC_RIGHT_SID;
        WHILE CUR_MES_GRP%FOUND
        LOOP
            SELECT SEC_RIGHT_SID INTO QVARSEC_RIGHT_SID  FROM     MES_SEC_GRP WHERE SEC_RIGHT_SID=VARSEC_RIGHT_SID
    里面查詢遊標沒讀取數據也會報錯。用上面方法不能解決問題。
      

  4.   

    你的循环写的有问题。
    循环至少要包在FETCH语句的外面啊。一般都使用光标FOR循环了。
    参考代码如下: