Oracle绑定变量给定错误
错误报告: ORA-01400:无法将NULL插入(“系统”、“部门”、“部门ID”) ORA-06512:在第10行 140000000-“无法将NULL插入(%s)” *原因:Oracle绑定变量给定错误,oracle,oracle10g,ora-01400,Oracle,Oracle10g,Ora 01400,错误报告: ORA-01400:无法将NULL插入(“系统”、“部门”、“部门ID”) ORA-06512:在第10行 140000000-“无法将NULL插入(%s)” *原因: *行动: 最高部门编号为:190 我在尝试在oracle statment中执行bind变量时遇到此错误。但如果我输入一些值而不是bind变量,我就得到了正确的insert语句。我在这里做错了什么?我认为绑定变量的值只有在pl/sql块完成时才设置。而且它可能必须正常终止。 一种解决方案是在:dept\u if的插入
*行动: 最高部门编号为:190
我在尝试在oracle statment中执行bind变量时遇到此错误。但如果我输入一些值而不是bind变量,我就得到了正确的insert语句。我在这里做错了什么?我认为绑定变量的值只有在pl/sql块完成时才设置。而且它可能必须正常终止。 一种解决方案是在
:dept\u if
的插入部分使用max\u deptno+10
。更好的解决方案是创建另一个pl/sql变量,并在insert语句中使用它。
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;
/
您还必须更改INSERT语句:
new_dept_id := max_deptno+10;
:dept_id := new_dept_id;
我认为bind变量的值仅在pl/sql块完成时设置。而且它可能必须正常终止。 一种解决方案是在
:dept\u if
的插入部分使用max\u deptno+10
。更好的解决方案是创建另一个pl/sql变量,并在insert语句中使用它。
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;
/
您还必须更改INSERT语句:
new_dept_id := max_deptno+10;
:dept_id := new_dept_id;
我认为这个错误是因为您在启动程序中使用绑定变量而没有使用
设置自动打印。我认为这个错误是因为您在启动程序中使用绑定变量而没有使用设置自动打印。您没有在数字字段中插入null吗?没有绑定变量(:dept\u id)这给我带来了麻烦。在部门(部门名称、部门id、位置id)中插入值('jim',200,NULL);工作正常…添加以下内容以进行故障排除:DBMS_OUTPUT.PUT_LINE('部门id为:'| |部门id);我的错部门id:=(最大部门编号+10)应仅为部门id=(最大部门编号+10)。变量声明时不需要冒号前缀。使用SQL*Plus变量有什么特殊原因吗?是否在数字字段中插入null?否绑定变量(:dept_id)给我带来了问题。在部门(部门名称、部门id、位置id)中插入值('jim',200,NULL);工作正常…添加以下内容以进行故障排除:DBMS_OUTPUT.PUT_LINE('部门id为:'| |部门id);我的错部门id:=(最大部门编号+10)应仅为部门id=(最大部门编号+10)。变量声明时不需要冒号前缀。使用SQL*Plus变量有什么特殊原因吗?正如您所说,我更改了如下查询SET SERVEROUTPUT ON variable dept\u id NUMBER DECLARE max\u deptno NUMBER(3);部门名称部门。部门名称%TYPE:=“教育”;sql_stmt varchar2(100);新部门id号(3);开始从部门中选择MAX(部门id)到MAX deptno;新部门id:=最大部门号+10;DBMS_OUTPUT.PUT_LINE('added:'| | new_dept_id);:部门id:=新的部门id;插入部门(部门名称、部门id、位置id)值(部门名称、部门id、空);结束代码>/..但仍然错误您还可以在INSERT语句中更改值列表。这就是我提出一个新变量的原因。绑定变量仅在块终止时设置。我修改了我的答案,添加了INSERT语句。正如你所说,我修改了如下查询设置变量dept\u id NUMBER上的SERVEROUTPUT DECLARE max\u deptno NUMBER(3);部门名称部门。部门名称%TYPE:=“教育”;sql_stmt varchar2(100);新部门id号(3);开始从部门中选择MAX(部门id)到MAX deptno;新部门id:=最大部门号+10;DBMS_OUTPUT.PUT_LINE('added:'| | new_dept_id);:部门id:=新的部门id;插入部门(部门名称、部门id、位置id)值(部门名称、部门id、空);结束代码>/..但仍然错误您还可以在INSERT语句中更改值列表。这就是我提出一个新变量的原因。绑定变量仅在块终止时设置。我修改了答案,添加了INSERT语句。