Điều này khiến tôi phát điên. Tôi muốn làm so sánh đơn giản của một cột và một biến nhưng nó chỉ không hoạt động. Dòng sau luôn luôn đếm tất cả các bộ dữ liệu trong khi tôi chỉ cần những người được điều chỉnh theo mệnh đề where.PLSQL Procudure (Oracle) So sánh một biến trong mệnh đề
SELECT count(*) INTO cnt from class where class.fid = fid;
Dường như rất đơn giản nhưng tôi đã làm việc này hàng giờ liền. Các sql proc hoàn chỉnh là
Điều khó hiểu lớn nhất là nếu tôi thay thế fid bằng một số ID được mã hóa cứng (như 105) nó đưa ra câu trả lời đúng), nhưng khi tôi sử dụng nó sẽ không hoạt động nữa và trả về đếm tất cả các lớp. Vì một lý do nào đó, luôn luôn class.fid = fid. Khi tôi sử dụng>, < hoặc <>, số 0 được trả về!
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;
Cảm ơn
Cảm ơn bạn (Plus thay thế thích hợp khác.)! Đó là một sai lầm kinh khủng và nó khiến tôi tốn rất nhiều công sức. Nó hoạt dộng bây giờ! CHÚA ƠI! – user1710120
@ user1710120 Tôi rất vui khi bạn giải quyết vấn đề. Bạn được quyền đánh dấu câu trả lời này là chính xác nếu bạn muốn. – Wolf