【发布时间】:2020-11-23 05:46:37
【问题描述】:
我正在尝试打印信用额度最高的前 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 之后工作;在 INSERT... 上按照建议:
【问题讨论】:
-
这不是 %rowcount 的使用方式。 %rowcount 返回使用 DML 修改的行数。
-
@OldProgrammer,%rowcount 确实适用于 select 语句,在这里它将返回最后获取的行数。您将得到 1 或 0。如果是批量收集,那么您可以返回更高的值。请参阅文档docs.oracle.com/en/database/oracle/oracle-database/18/lnpls/…
-
COMMIT 后生效;在插入;