DECLARE
A_NAME STUDENTS_1.NAME%TYPE;
B_NAME STUDENTS_1.NAME%TYPE;
C_NAME STUDENTS_1.NAME%TYPE;
GRADE_ST STUDENTS_1.GRADE%TYPE;
CURSOR A IS SELECT NAME FROM STUDENTS_1 WHERE REGEXP_LIKE(GRADE,'(A)','i');
CURSOR B IS SELECT NAME FROM STUDENTS_1 WHERE REGEXP_LIKE(GRADE,'(B)','i');
CURSOR C IS SELECT NAME FROM STUDENTS_1 WHERE REGEXP_LIKE(GRADE,'(C)','i');
BEGIN
GRADE_ST:= &CHOICE;
IF (GRADE_ST='A') THEN
OPEN A;
LOOP
FETCH A INTO A_NAME;
EXIT WHEN A%NOTFOUND;
INSERT INTO SCHOLARSHIP_A VALUES(A_NAME);
END LOOP;
CLOSE A;
ELSIF (GRADE_ST='B') THEN
OPEN B;
LOOP
FETCH B INTO B_NAME;
EXIT WHEN B%NOTFOUND;
INSERT INTO SCHOLARSHIP_B VALUES(B_NAME);
END LOOP;
CLOSE B;
ELSE
OPEN C;
LOOP
FETCH C INTO C_NAME;
EXIT WHEN C%NOTFOUND;
INSERT INTO SCHOLARSHIP_C VALUES(C_NAME);
END LOOP;
CLOSE C;
END IF;
END;
/
我正在三個不同的學術表與等級A,B,C,如果我的用戶輸入值,而不是等級我發現瞭解決方案,但我不t要給值作爲用戶輸入我想用戶輸入應該是等級 就像我輸入A我應該從表 得到所有等級A的名字,但我結束了這個錯誤PLS-00382:表達式是錯誤的類型的在光標
btw'for r in(從y選擇x,其中z)loop'構造可以節省大量代碼,並且通常更加高效和可靠。或者你可以在純SQL中用'insert when ...'(多表插入)來完成整個事情。 –