Oracle Bind Variable дает ошибку

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. Но если я вместо некоторой переменной связываю значение, я получаю правильную инструкцию вставки. Что я здесь не так делаю?

2 ответа

Я думаю, что значение переменной bind устанавливается только после завершения блока 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);

Я думаю, что эта ошибка получается, потому что вы используете переменную связывания без использования set autoprint on в стартовой программе.

Другие вопросы по тегам