Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PL/SQL删除SQL行_Sql_Oracle_Plsql_Procedure_Database Cursor - Fatal编程技术网

使用PL/SQL删除SQL行

使用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

我想通过输入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;
-

我得到这个错误

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;