Oracle

PL/SQL 返回過程值並將其放入插入子句中

  • March 18, 2020

我正在做一個作業,最後一個問題指出我從問題 2 中呼叫過程並從問題 3 中呼叫函式,然後將它們放在插入子句中(問題 4)。

  1. 為匿名塊編寫 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 

引用自:https://dba.stackexchange.com/questions/262145