Вы не можете иметь оператор CREATE OR REPLACE PROCEDURE
внутри анонимного блока PL / SQL.Если вы хотите создать процедуру как хранимую процедуру, вы можете сначала создать процедуру:
CREATE OR REPLACE PROCEDURE POVECANJE_CIJENE(NOVA_SIFRA PO_PLOCICE.SIFRA_DOB%TYPE) IS
previse EXCEPTION;
nema EXCEPTION;
BEGIN
IF NOVA_SIFRA NOT IN (SELECT SIFRA_DOB FROM PO_DOBAVLJAC) THEN
RAISE nema;
ELSIF (CIJENA+30)>600 THEN
RAISE previse;
ELSE
UPDATE PO_PLOCICE SET CIJENA=CIJENA+30 WHERE SIFRA_DOB=NOVA_SIFRA;
EXCEPTION
WHEN nema THEN
DBMS_OUTPUT.PUT_LINE('Nema te sifre');
WHEN previse THEN
DBMS_OUTPUT.PUT_LINE('Cijena je prešla 600 kn');
END POVECANJE_CIJENE;
, а затем вызвать ее из анонимного блока
BEGIN
POVECANJE_CIJENE(2245);
END;
Или вы можете сделатьПроцедура, локальная для блока PL / SQL:
DECLARE
previse EXCEPTION;
nema EXCEPTION;
PROCEDURE POVECANJE_CIJENE(NOVA_SIFRA PO_PLOCICE.SIFRA_DOB%TYPE) IS
BEGIN
IF NOVA_SIFRA NOT IN (SELECT SIFRA_DOB FROM PO_DOBAVLJAC) THEN
RAISE nema;
ELSIF (CIJENA+30)>600 THEN
RAISE previse;
ELSE
UPDATE PO_PLOCICE SET CIJENA=CIJENA+30 WHERE SIFRA_DOB=NOVA_SIFRA;
EXCEPTION
WHEN nema THEN
DBMS_OUTPUT.PUT_LINE('Nema te sifre');
WHEN previse THEN
DBMS_OUTPUT.PUT_LINE('Cijena je prešla 600 kn');
END POVECANJE_CIJENE;
BEGIN
POVECANJE_CIJENE(2245);
END;
Также обратите внимание, что в блоке PL / SQL (DECLARE...BEGIN...END
) вы не используете оператор EXECUTE
, который является командой SQL * Plus.
Удачи.