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
в стартовой программе.