SET SERVEROUTPUT ON
VARIABLE dept_id NUMBER
DECLARE
max_deptno NUMBER(3);
dept_name departments.department_name%TYPE :='Education';
BEGIN
SELECT MAX(department_id)
INTO max_deptno
FROM departments;
DBMS_OUTPUT.PUT_LINE ('The maximum department no is : ' || max_deptno);
:dept_id:=(max_deptno+10);
INSERT INTO departments (department_name, department_id,location_id)
VALUES(dept_name, :dept_id, NULL);
DBMS_OUTPUT.PUT_LINE ('The number of rows affected : ' || SQL%ROWCOUNT);
END;
/
错误报告:ORA-01400:不能插入NULL到("SYSTEM"."DEPARTMENTS"."DEPARTMENT_ID")ORA-06512:在第10行01400. 00000 - "不能在(%s)中插入NULL "*原因:
*行动:最大部门号:190
我得到这个错误,而试图执行绑定变量在oracle语句。但是如果我放了一些值而不是绑定变量,我就得到了这个插入语句。我哪里做错了?
我认为bind变量的值只有在pl/sql块完成时才会设置。它可能必须正常终止。
一种解决方案是在插入中使用max_deptno+10
而不是:dept_if
。更好的解决方案是创建另一个pl/sql变量,并在insert语句中使用它。
new_dept_id := max_deptno+10;
:dept_id := new_dept_id;
您还必须更改INSERT语句:
INSERT INTO departments (department_name,department_id,location_id)
VALUES(dept_name, new_dept_id, NULL);
我认为这个错误是由于您在启动程序中使用绑定变量而没有使用set autoprint on
而获得的。