创建存储过程遇PLS-00103错误:意外遇到符号AS
排查Oracle存储过程PLS-00103错误:遇到符号"AS"的原因及修复方案
嘿,这个问题其实很典型,我帮你拆解一下:
错误根源
Oracle PL/SQL存储过程的参数定义语法里,根本不需要用AS来分隔参数名和数据类型!你看你代码里的参数列表,每一行都写了参数名 AS 类型,比如INSERTMOV_COD_BANCO AS NUMBER(4),这就是触发PLS-00103错误的直接原因。
正确的参数语法应该是:
参数名 [IN/OUT/IN OUT] 数据类型
其中IN/OUT/IN OUT是参数模式,默认是IN,可以省略不写。而AS是用来声明变量、游标或者子程序(比如函数)时使用的,不能用在存储过程的参数定义里。
修正后的完整代码
把参数里的AS全部删掉就可以了,另外我顺便给你优化了日期参数的写法(用TO_DATE显式转换更稳妥,避免依赖会话的日期格式):
CREATE OR REPLACE PROCEDURE INSERT_MOVIMIENTOS ( INSERTMOV_COD_BANCO NUMBER(4), INSERTMOV_COD_SUCUR NUMBER(4), INSERTMOV_NUM_CTA NUMBER(10), INSERTMOV_FECHA_MOV DATE, INSERTMOV_TIPO_MOV CHAR(1), INSERTMOV_IMPORTE NUMBER(10) ) DECLARE sql_str VARCHAR2(500):=''; BEGIN sql_str:=sql_str||'INSERT INTO MOVIMIENTOS ('; dbms_output.put_line(sql_str); END; / -- 用TO_DATE显式转换日期字符串,避免格式问题 EXEC INSERT_MOVIMIENTOS (0, 0, 0, TO_DATE('2008-11-11', 'YYYY-MM-DD'), 'o', 0);
额外提示
如果你的参数需要输出值,记得加上OUT或者IN OUT模式,比如:
CREATE OR REPLACE PROCEDURE TEST_PROC (p_input IN NUMBER, p_output OUT VARCHAR2) IS -- 这里用IS或者AS都可以,声明块的开头 BEGIN p_output := '输入值是' || p_input; END; /
内容的提问来源于stack exchange,提问作者Victor
相关产品推荐
相关产品推荐

