Comment utiliser lier des variables dans plsql?
Tâche Simple
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 n'est pas NULLE. Pourquoi dept_id est NULLE après la cession? Ce que je fais mal?
script de sortie:
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;
Rapport d'erreur:
ORA-01400: невозможно вставить NULL в ("ANDKOM"."DEPARTMENTS"."DEPARTMENT_ID")
ORA-06512: на line 9
01400. 00000 - "cannot insert NULL into (%s)"
*Cause:
*Action:
- Comment savez-vous que
MAX_DEPTNO
n'est PAS NULLE? Pouvez-vous nous montrer les résultats deSELECT MAX(department_id) FROM andkom.departments
? - MAX(DEPARTMENT_ID) 520
- OK. Vous pouvez couper et coller à partir d'un seul SQL*Plus de la session où vous 1) définir la variable hôte
DEPT_ID
, 2)set serveroutput on
, 3)SELECT MAX(department_id) from andkom.departments
, et puis 4) exécuter le code PL/SQL bloc que vous avez posté? Quelque chose n'a pas de sens. - J'utilise SQL Developer
- OK. Ensuite, exécutez ces déclarations comme un script (F5) et de copier et coller le script de sortie.
- J'ai mis à jour la question avec cette info (à la fin)
Vous devez vous connecter pour publier un commentaire.
La variable hôte
DEPT_ID
n'est pas NULL, après la cession. Le problème, c'est que votreINSERT
déclaration est à l'aide de la variable localeNEW_DPT
dans leINSERT
et que variable locale n'a pas été affecté une valeur. Si vous voulez vraiment utiliser une variable hôte en PL/SQL (vous serait essentiellement jamais le faire dans la vraie vie), vous devrez utiliser dans votre PL/SQL blocPlus réaliste, cependant, serait d'abandonner la variable de substitution entièrement
INSERT
déclaration de lier les variables ainsi dans le contexte de ce que les gens généralement dire quand ils parlent de lier les variables.HR
avec la pleineHR
exemple de schéma en place. Je suppose que c'est ce que vous êtes en train de faire ainsi?J'ai posé la même question dans oracle forum et j'ai la réponse: