使用PL / SQL删除SQL行

时间:2014-05-24 21:34:09

标签: 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 := 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,但我还没有找到解决这个问题的方法。

2 个答案:

答案 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;

分享并享受。