1
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 -“无法将 NULL 插入 (%s)” *原因:
*操作: 最大部门号 : 190

尝试在 oracle 语句中执行绑定变量时出现此错误。但是如果我输入一些值而不是绑定变量,我会正确地得到这个插入语句。我在这里做错了什么?

4

2 回答 2

1

我认为绑定变量的值仅在 pl/sql 块完成时设置。它可能必须正常终止。

一种解决方案是max_deptno+10:dept_if. 更好的解决方案是创建另一个 pl/sql 变量并在插入语句中使用它。

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);
于 2011-04-08T16:08:11.803 回答
0

我认为这个错误是因为你使用绑定变量而不set autoprint on在启动程序中使用。

于 2012-01-06T13:05:15.830 回答