Oracle Bind Variable дает ошибку - PullRequest
1 голос
/ 08 апреля 2011
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

Я получаю эту ошибку при попытке выполнить переменную bind в уставе Oracle. Но если вместо переменной bind я поместил какое-то значение, я правильно понял этот оператор вставки. Что я тут не так делаю?

Ответы [ 2 ]

1 голос
/ 08 апреля 2011

Я думаю, что значение переменной 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);
0 голосов
/ 06 января 2012

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

...