使用PL/SQL删除SQL行
我想通过输入ID来删除行,但由于某些原因,我在执行该过程时出错使用PL/SQL删除SQL行,sql,oracle,plsql,procedure,database-cursor,Sql,Oracle,Plsql,Procedure,Database Cursor,我想通过输入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
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;
-
我得到这个错误
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,没有找到解决这个问题的方法。您将参数声明为
codihospital IN OUT NUMBER
。这意味着它需要输入和输出。所以你需要传递一个变量,它可以接受一个值99
是一个常量,因此不能指定给。这就是错误消息所说的
幸运的是,只需对代码做一点小的修改就可以纠正它:只需传递您声明但目前未使用的变量。(我怀疑您认为您正在使用它,但在PL/SQL中情况并非如此)
无需打开游标并获取它以确定医院是否存在-只需继续并删除它,然后检查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;
分享和享受
DECLARE
codihospital NUMBER;
BEGIN
codihospital := 99;
BorrarHospital(codihospital);
END;
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;