我想通过输入ID医院删除行,但出于某种原因,我在执行程序时遇到错误。
CREATE OR REPLACE PROCEDURE BorrarHospital (codihospital IN OUT NUMBER)
IS
idhospital NUMBER;
CURSOR C1 (codihospital NUMBER) IS SELECT HOSPITAL_CODI FROM HOSPITAL WHERE HOSPITAL_CODI = codihospital;
BEGIN
idhospital := codihospital;
OPEN C1 (codihospital);
FETCH C1 INTO codihospital;
IF (C1%FOUND) THEN
DELETE FROM HOSPITAL WHERE HOSPITAL_CODI = idhospital;
ELSE
DBMS_OUTPUT.PUT_LINE('No hi ha cap hospital amb aquest codi');
END IF;
COMMIT;
CLOSE C1;
END;
-
DECLARE
codihospital NUMBER;
BEGIN
BorrarHospital(99);
END;
我收到此错误
ORA-06550: line 6, column 16:
PLS-00363: expression '99' cannot be used as an assignment target
ORA-06550: line 6, column 1:
PL/SQL: Statement ignored
有人可以告诉我我做错了什么吗?我刚刚开始学习PL / SQL,但我还没有找到解决这个问题的方法。
答案 0 :(得分:1)
您将参数声明为codihospital IN OUT NUMBER
。这意味着它需要输入和输出。所以你需要传递一个变量,这可以取值。 99
是常量,因此无法分配。这是错误信息所说的内容。
幸运的是,只需要对代码进行一些小的修改就可以纠正它:只需传递你声明但目前没有使用的变量。 (我怀疑你认为你正在使用它,但这不是PL / SQL中的工作方式)。
DECLARE
codihospital NUMBER;
BEGIN
codihospital := 99;
BorrarHospital(codihospital);
END;
答案 1 :(得分:1)
无需打开游标并获取它以确定医院是否存在 - 只需继续并删除它,然后检查SQL%ROWCOUNT以确定是否实际删除了任何行:
CREATE OR REPLACE PROCEDURE BorrarHospital (codihospital IN NUMBER)
IS
BEGIN
DELETE FROM HOSPITAL WHERE HOSPITAL_CODI = codihospital ;
IF SQL%ROWCOUNT = 0 THEN
DBMS_OUTPUT.PUT_LINE('No hi ha cap hospital amb aquest codi');
END IF;
COMMIT;
END BorrarHospital;
分享并享受。