2014-05-24 2 views
0

Я хочу удалить строки, войдя в больницу ID, но по какой-то причине я получаю сообщение об ошибке при выполнении процедуры.Удалить строку SQL с PL/SQL

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; 
+0

Спасибо! это сработало. – Bassols

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; 

Делитесь и наслаждайтесь.

Смежные вопросы