[英]PL/SQL block with %ROWCOUNT compiles but doesn't output result
我正在嘗試打印信用額度最高的前 3 條記錄。 我的代碼可以編譯,但盡管SET SERVEROUTPUT ON SIZE 100000
沒有打印任何內容,我對此感到有些困惑。 該表顯示沒有問題。 另外,當我只有
EXIT WHEN high_credit%ROWCOUNT > 4;
腳本進入無限循環。
編碼:
SET SERVEROUTPUT ON SIZE 1000000
DECLARE
CURSOR high_credit IS
SELECT first_name, last_name, employee_id, credit_limit FROM employees
ORDER BY credit_limit DESC;
emp_fname employees.first_name%TYPE;
emp_lname employees.last_name%TYPE;
emp_empno employees.employee_id%TYPE;
emp_crd_lmt employees.credit_limit%TYPE;
BEGIN
DBMS_OUTPUT.PUT_LINE('First_Name ' || 'Last_Name ' || 'Employee_Id '
|| 'Credit_Limit');
OPEN high_credit;
LOOP
FETCH high_credit INTO emp_fname, emp_lname, emp_empno, emp_crd_lmt;
EXIT WHEN (high_credit%ROWCOUNT > 4) OR (high_credit%NOTFOUND);
DBMS_OUTPUT.PUT_LINE(emp_fname || ' ' || emp_lname || ' ' || emp_empno
|| ' ' || emp_crd_lmt);
END LOOP;
CLOSE high_credit;
END;
CREATE TABLE employees (
employee_id NUMBER(3) NOT NULL,
first_name VARCHAR2(8) NOT NULL,
last_name VARCHAR2(15) NOT NULL,
credit_limit NUMBER(4,2) NOT NULL,
CONSTRAINT employee_id_pk PRIMARY KEY (employee_id)
);
INSERT INTO employees VALUES (201, 'Susan', 'Brown', 30);
INSERT INTO employees VALUES (202, 'Jim', 'Kern', 25);
INSERT INTO employees VALUES (203, 'Martha', 'Woods', 25);
INSERT INTO employees VALUES (204, 'Ellen', 'Owens', 15);
INSERT INTO employees VALUES (205, 'Henry', 'Perkins', 25);
代碼在 COMMIT 之后工作; 在插入...如建議:
除了SQL%ROWCOUNT
無效使用(如 OldProgrammer 所說)(雖然,它不會影響您的問題),看起來您
CREATE TABLE
是 DDL)所以
COMMIT
關於您在評論中提到的任務:看看這是否有幫助(我沒有您的表格,所以我使用的是 Scott 的EMP
):
SQL> set serveroutput on;
SQL> declare
2 cursor c1 is
3 select * from emp
4 order by sal desc;
5 c1r c1%rowtype;
6 begin
7 open c1;
8 loop
9 fetch c1 into c1r;
10 exit when c1%notfound or c1%rowcount > 3;
11
12 dbms_output.put_line(c1%rowcount ||': '|| c1r.ename ||': '|| c1r.sal);
13 end loop;
14 close c1;
15 end;
16 /
1: KING: 5001
2: FORD: 3000
3: SCOTT: 3000
PL/SQL procedure successfully completed.
SQL>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.