Oracle绑定变量给定错误

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的插入

错误报告: ORA-01400:无法将NULL插入(“系统”、“部门”、“部门ID”) ORA-06512:在第10行 140000000-“无法将NULL插入(%s)” *原因:
*行动: 最高部门编号为: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语句。