使用 PL/SQL 删除 SQL 行
Posted
技术标签:
【中文标题】使用 PL/SQL 删除 SQL 行【英文标题】:Delete an SQL row with PL/SQL 【发布时间】:2014-05-24 21:34:08 【问题描述】:我想通过进入 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,但我没有找到如何解决这个问题。
【问题讨论】:
【参考方案1】:您将参数声明为codihospital IN OUT NUMBER
。这意味着它需要输入 和 输出。所以你需要传递一个变量,一个可以取值的东西。 99
是一个常数,因此不能赋值。这是错误消息所说的内容。
幸运的是,只需对代码稍作改动即可更正它:只需传递您已声明但目前未使用的变量即可。 (我怀疑您认为您正在使用它,但 PL/SQL 中的工作方式并非如此)。
DECLARE
codihospital NUMBER;
BEGIN
codihospital := 99;
BorrarHospital(codihospital);
END;
【讨论】:
【参考方案2】:无需打开游标并获取它来确定医院是否存在 - 只需继续删除它,然后检查 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;
分享和享受。
【讨论】:
以上是关于使用 PL/SQL 删除 SQL 行的主要内容,如果未能解决你的问题,请参考以下文章
ORA-06550:第 12 行,第 9 列:PL/SQL:ORA-00936:缺少表达式 ORA-06550:第 9 行,第 5 列:PL/SQL:忽略 SQL 语句