PLSQL错误 PLS-00103:遇到符号"CREATE",预期以下之一
PLSQL错误 PLS-00103:遇到符号"CREATE",预期以下之一
嗨,我正在尝试解决一些任务,并编写了以下代码:
DECLARE previse EXCEPTION; nema EXCEPTION; CREATE OR REPLACE 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 EXECUTE POVECANJE_CIJENE(2245); END;
但是它一直显示以下错误:
ORA-06550: 第4行,第1列:
PLS-00103: 遇到符号“CREATE”,但期望以下之一:
begin function pragma procedure subtype type
current cursor delete
exists prior
有谁知道问题出在哪里吗?
PL/SQL错误PLS-00103:在期望以下内容之一时遇到符号“CREATE”出现的原因是,匿名PL/SQL块中不能有CREATE OR REPLACE PROCEDURE
语句。如果要将过程创建为存储过程,可以先创建过程,然后从匿名块中调用它。解决方法如下:
首先,创建过程:
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命令。
祝您好运!
PL/SQL错误PLS-00103: 遇到符号"CREATE",但期望以下之一。出现这个错误的原因是在创建存储过程时缺少分号。解决方法是在第4行代码末尾添加分号。然后,又出现了另一个错误,错误信息为PLS-00103: 遇到符号"EXECUTE",但期望以下之一。这个错误是因为在执行存储过程时使用了错误的语法。解决方法是在开始和结束之间添加新的代码段,然后在新的代码段中调用存储过程。最后,还出现了ORA-06550: 行2,列11: PLS-00103: 遇到符号"POVECANJE_CIJENE",但期望以下之一的错误。这个错误是因为在执行存储过程时使用了错误的语法。解决方法是在存储过程名称前添加冒号和等号,然后再次尝试执行存储过程。
下面是修复后的代码:
CREATE OR REPLACE PROCEDURE POVECANJE_CIJENE(NOVA_SIFRA PO_PLOCICE.SIFRA_DOB%TYPE) IS previse EXCEPTION; nema EXCEPTION; l_broj_cijena number; l_cijena number; BEGIN select count(1) into l_broj_cijena from PO_DOBAVLJAC where SIFRA_DOB = NOVA_SIFRA; select max(cijena) into l_cijena from PO_PLOCICE where SIFRA_DOB=NOVA_SIFRA; IF l_broj_cijena = 0 THEN RAISE nema; ELSIF (l_cijena+30)>600 THEN RAISE previse; ELSE UPDATE PO_PLOCICE SET CIJENA=CIJENA+30 WHERE SIFRA_DOB=NOVA_SIFRA; END IF; 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;
这个存储过程用于增加PO_PLOCICE表中瓷砖的价格。通过输入参数作为供应商的代码,将所有选定供应商的瓷砖价格增加30kn。请注意,您必须确保要更新价格的供应商(SIFRA_DOB)在PO_DOBAVLJAC表中存在,并且最大价格不超过600kn。否则,将处理相应的错误(使用预定义的错误或使用RAISE语句)。
希望这篇文章对您有所帮助!如果您有任何其他问题,请随时提问。