Wie verwenden Sie bind-Variablen in plsql?

Einfache Aufgabe

variable dept_id NUMBER

DECLARE
    max_deptno NUMBER;
    dept_name departments.department_name%TYPE := 'Education';
BEGIN
    select max(department_id)
      into max_deptno
      from departments;
    :dept_id := max_deptno + 10;
    insert into departments (department_id, department_name, location_id)
      values (:dept_id, dept_name, null);
    DBMS_OUTPUT.PUT_LINE('The maximum department id is ' || max_deptno);
    DBMS_OUTPUT.PUT_LINE('Rows made by insert: ' || SQL%ROWCOUNT);
END;

max_deptno ist nicht NULL. Warum dept_id ist NULL nach der Zuweisung? Was mache ich falsch?

Skript-Ausgabe:

MAX(DEPARTMENT_ID)
------------------
               520 

Error starting at line 10 in command:
DECLARE
max_deptno NUMBER;
dept_name departments.department_name%TYPE := 'Education1';
BEGIN
select max(department_id)
into max_deptno
from departments;
:dept_id := max_deptno + 10;
insert into departments (department_id, department_name, location_id)
values (:dept_id, dept_name, null);
DBMS_OUTPUT.PUT_LINE('The maximum department id is ' || max_deptno);
DBMS_OUTPUT.PUT_LINE('Rows made by insert: ' || SQL%ROWCOUNT);
END;

Fehlermeldung:

ORA-01400: невозможно вставить NULL в ("ANDKOM"."DEPARTMENTS"."DEPARTMENT_ID")
ORA-06512: на  line 9
01400. 00000 -  "cannot insert NULL into (%s)"
*Cause:    
*Action:
  • Woher wissen Sie, dass MAX_DEPTNO ist NICHT NULL? Können Sie uns zeigen die Ergebnisse der SELECT MAX(department_id) FROM andkom.departments?
  • MAX(DEPARTMENT_ID) 520
  • OK. Können Sie Ausschneiden und einfügen aus einer einzigen SQL*Plus-Sitzung, wo Sie 1) definieren Sie die host-variable DEPT_ID, 2) set serveroutput on, 3) SELECT MAX(department_id) from andkom.departments, und dann 4) führen Sie den PL/SQL-block, den Sie gepostet? Etwas macht keinen Sinn.
  • Ich benutze SQL Developer
  • OK. Dann führen Sie diese Anweisungen als Skript aus (F5), und kopieren und fügen Sie den Skript-Ausgabe.
  • Ich habe aktualisiert, Frage mit dieser info (am Ende)

InformationsquelleAutor bluebyte | 2011-11-18
Schreibe einen Kommentar