7
這讓我瘋狂。我想做一個列和一個變量的簡單比較,但它不起作用。下面一行總是記錄所有的元組,而我只需要那些由where子句調整的元組。PLSQL Procudure(Oracle)比較where子句中的變量
SELECT count(*) INTO cnt from class where class.fid = fid;
它看起來SOOOOO簡單,但我一直工作在這幾個小時。完整的SQL PROC是
大令人困惑的事情是,如果我更換FID一些硬編碼ID(如105),它給出了一個正確的答案),但是當我使用FID它只是不工作了,返回所有班級的人數。出於某種原因,總是class.fid = fid。當我使用>,<或<>時,返回0個計數!
create or replace PROCEDURE pro_report2
AS
CURSOR c_dept IS select deptid, dname from department;
TYPE cur_typ IS REF CURSOR;
c1 cur_typ;
query_str1 VARCHAR2(200);
fid faculty.fid%type := 102;
fname faculty.fname%type;
cnt NUMBER;
BEGIN
FOR dept_row in c_dept LOOP
DBMS_OUTPUT.PUT_LINE('Dept.Name: ' || dept_row.dname);
DBMS_OUTPUT.PUT_LINE('Faculty Name' || chr(9)|| chr(9) || '0 Class' || chr(9) || chr(9) || '1 Class' || chr(9) || chr(9) || '2 Classes' || chr(9) || '>2 Classes');
DBMS_OUTPUT.PUT_LINE('-------------------------------------------------------------------------------');
--find all faculty in this department
query_str1 := 'select fid, fname from faculty where faculty.deptid = ' || to_char(dept_row.deptid);
open c1 for query_str1;
LOOP
FETCH c1 into fid, fname;
exit when c1%notfound;
DBMS_OUTPUT.PUT_LINE(fname);
SELECT count(*) INTO cnt from class where class.fid = fid;
DBMS_OUTPUT.PUT_LINE(to_char(cnt) || ' ' || to_char(fid));
END LOOP;
-- Spaces between departments
DBMS_OUTPUT.PUT_LINE(chr(10));
DBMS_OUTPUT.PUT_LINE(chr(10));
END LOOP;
END;
感謝
謝謝你(及其他適當的替代品。)!那是一個可怕的錯誤,它耗費了我很多工作。它現在有效!我的天啊! – user1710120
@ user1710120我很高興你解決了這個問題。如果您願意,歡迎您將此答案標記爲正確。 – Wolf