创建PL/SQL存储过程报错:DECLARE与END相关语法问题求助
解决PL/SQL存储过程编译错误的问题
嘿,刚学存储过程就踩坑太正常了,咱们来一步步捋清楚你的代码为啥会报这两个错:
错误原因拆解
先看你收到的两个核心错误:
PLS-00103: Encountered the symbol "DECLARE":这是因为你搞错了PL/SQL存储过程的语法结构。存储过程里的变量声明不需要用DECLARE关键字,而是要放在CREATE OR REPLACE PROCEDURE (...)之后的IS/AS后面直接写;DECLARE是给匿名块或者嵌套块用的,不能直接放在存储过程参数列表后面。PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following...:这个错是因为你的存储过程结构不完整——参数列表后面不该加分号,而且整个过程的结尾缺少正确的闭合逻辑。
修正后的代码
我把你的代码调整成符合PL/SQL存储过程标准语法的版本了:
CREATE OR REPLACE PROCEDURE INSERT_MOVIMIENTOS ( INSERTMOV_COD_BANCO IN NUMBER, INSERTMOV_COD_SUCUR IN NUMBER, INSERTMOV_NUM_CTA IN NUMBER, INSERTMOV_FECHA_MOV IN DATE, INSERTMOV_TIPO_MOV IN CHAR, INSERTMOV_IMPORTE IN NUMBER ) AS -- 用AS代替原来的分号,作为参数部分和主体的分隔(IS也可以,二者等价) sql_str VARCHAR2(500):=''; -- 直接声明变量,无需DECLARE关键字 BEGIN sql_str:=sql_str||'INSERT INTO MOVIMIENTOS ('; dbms_output.put_line(sql_str); END INSERT_MOVIMIENTOS; -- 加上过程名让结构更清晰,非强制但可读性更好 /
关键修改点说明
- 把参数列表末尾的分号
;改成AS:这是PL/SQL存储过程定义的标准语法,用来分隔过程的参数声明和内部逻辑部分。 - 移除多余的
DECLARE:存储过程里的变量/常量声明直接放在AS/IS之后即可,不需要额外的DECLARE块。 - 给结尾的
END加上过程名:虽然不是必须的,但能让代码结构更清晰,尤其是在复杂的PL/SQL代码中。
这样调整后,你的存储过程应该就能正常编译了,要是还有其他问题随时提!
内容的提问来源于stack exchange,提问作者Victor
相关产品推荐
相关产品推荐

