Oracle
PL/SQL 返回過程值並將其放入插入子句中
我正在做一個作業,最後一個問題指出我從問題 2 中呼叫過程並從問題 3 中呼叫函式,然後將它們放在插入子句中(問題 4)。
- 為匿名塊編寫 PL/SQL 程式碼以執行以下操作:
a) 使用程序獲取給定醫生 ID 的醫生姓名(從鍵盤讀取)
$$ ProGetDoctorName $$. b) 使用函式獲取給定部門 id 的部門名稱(從鍵盤讀取)
$$ FunGetDepartmentName $$. c) 通過在訪問表中包含序列號和目前日期,插入醫生姓名和科室名稱(您從程序和功能中獲得)"
表格和記錄
CREATE TABLE DEPT( DeptNo NUMBER(4) PRIMARY KEY, DeptName VARCHAR2(30) NOT NULL); CREATE TABLE DOCTORS( DoctorID NUMBER(4) PRIMARY KEY, DoctorNAME VARCHAR2(20) NOT NULL, DeptNo NUMBER(4) REFERENCES DEPT(DEPTNO), Salary NUMBER(8) NOT NULL); CREATE TABLE VISITINGS( SlNo NUMBER(4) PRIMARY KEY, DoctorName VARCHAR2(20) NOT NULL, DepartmentName VARCHAR2(20) NOT NULL, VisitDate DATE NOT NULL); INSERT INTO DEPT VALUES(10,'ENT'); INSERT INTO DEPT VALUES(20,'Orthopedic'); INSERT INTO DEPT VALUES(30,'Cardiology'); INSERT INTO DEPT VALUES(40,'Neurology'); INSERT INTO DOCTORS VALUES(101,'Abheer',20,2550); INSERT INTO DOCTORS VALUES(102,'Zuwaina',10,2175); INSERT INTO DOCTORS VALUES(103,'Sara',30,1985); INSERT INTO DOCTORS VALUES(104,'Fatma',20,2200); INSERT INTO DOCTORS VALUES(105,'Laila',10,2600); INSERT INTO VISITINGS VALUES(1,'Sara','Cardiology','10-Nov-19'); INSERT INTO VISITINGS VALUES(2,'Abheer','Orthopedic','11-Nov-19');
我的程序
create or replace procedure ProGetDoctorName(a in number, b out varchar2) is docname doctors.doctorname%type; Begin select doctorname into docname from doctors where doctorid=a; dbms_output.put_line('Doctor Name: '||docname); End
我的功能
create or replace function FunGetDepartmentName(deptid in number) return varchar2 is dname dept.deptname%type; Begin select deptname into dname from dept where DeptNo=deptid; return dname; End
問題 4 回答我打電話和插入的地方
Declare docname varchar2(50); depname varchar2(50); serial number; Begin ProGetDoctorName(:Docid,docname); depname:=FunGetDepartmentName(:DeptNo); dbms_output.put_line('Department Name: '||depname); select count(slno) into serial from visitings; serial :=serial+1; insert into visitings(slno,doctorname,departmentname,visitdate) values(serial,docname,depname,sysdate); End
我不斷收到“無法將 null 插入 (“XX”.“VISITINGS”.“DOCTORNAME”)”
嘗試了不同的變體來插入,但即使沒有過程中的 dbms 也無法正常工作。在沒有插入過程的情況下嘗試了它。工作。我已經讀過,不可能獲取過程的返回值並將其用於某事。
我很感激幫助。
謝謝你的提示。我通過在我的過程中將 docname 分配給 out 變數來解決答案。
我的程序
create or replace procedure ProGetDoctorName(a in number, b out varchar2) is docname doctors.doctorname%type; Begin select doctorname into docname from doctors where doctorid=a; dbms_output.put_line('Doctor Name: '||docname); b:=docname; End