-3
    create or replace FUNCTION NOTGIVEN RETURN VARCHAR2 AS
    IAD VARCHAR2(20);
    IND VARCHAR2(20);
    CURSOR C1 IS SELECT Q_ID  FROM QUESTION  WHERE NOT Q_ID in (SELECT Q.Q_ID FROM QUESTION Q INNER JOIN ANSWER A ON Q.Q_ID = A.Q_ID); 

    BEGIN
     OPEN C1;
      LOOP
      FETCH C1 INTO IND;
      EXIT WHEN C1%NOTFOUND;

      IF C1%FOUND THEN --if found then
      SELECT Q_ID INTO IAD FROM QUESTION WHERE Q_ID = IND;
      DBMS_OUTPUT.PUT_LINE(IAD);
      END IF;
     IF C1%NOTFOUND THEN
      DBMS_OUTPUT.PUT_LINE('no found');--if not found
      END IF;
     END LOOP;
     CLOSE C1;
      END NOTGIVEN;

我试图制作一个函数,它给出了所有答案不存在的问题,它给出了适当的输出,但显示了这种类型的错误 ORA-06503: PL/SQL: Function returned without value , line 21 ORA-06512: at line at 5 i也尝试了异常,但它不起作用。

4

1 回答 1

0

您编写了一个应该返回VARCHAR2值的函数,但代码中没有返回语句,因此该例程不返回值。

CREATE OR REPLACE FUNCTION NOTGIVEN
  RETURN VARCHAR2
AS
  IAD VARCHAR2(20);
  IND VARCHAR2(20);

  CURSOR C1 IS SELECT Q_ID
                 FROM QUESTION
                 WHERE NOT Q_ID IN (SELECT Q.Q_ID
                                      FROM QUESTION Q
                                      INNER JOIN ANSWER A
                                        ON Q.Q_ID = A.Q_ID); 
BEGIN
  OPEN C1;

  LOOP
    FETCH C1 INTO IND;
    EXIT WHEN C1%NOTFOUND;

    IF C1%FOUND THEN --if found then
      SELECT Q_ID
        INTO IAD
        FROM QUESTION
        WHERE Q_ID = IND;

      DBMS_OUTPUT.PUT_LINE(IAD);
    END IF;

    IF C1%NOTFOUND THEN
      DBMS_OUTPUT.PUT_LINE('no found');--if not found
    END IF;
  END LOOP;

  CLOSE C1;

  RETURN IAD;  -- added
END NOTGIVEN;

在这里,我IADEND NOTGIVEN.

祝你好运。

于 2018-09-29T04:15:01.057 回答