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+101 つの解決策は、挿入の insead で 使用することです: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 に答える