You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

创建存储过程遇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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:19:19