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

Oracle存储过程编译报错PLS-00103:遇到符号‘IS’不符合语法预期的问题咨询

问题排查与修正方案

首先,你触发的PLS-00103错误原因非常明确:Oracle存储过程定义时AS和IS是等效关键字,不能同时使用,这是直接触发语法报错的根源。

除此之外,你的代码还有几处语法和逻辑问题,我一起帮你梳理并给出完整修正方案:

核心问题清单

  • 重复使用AS和IS:违反PL/SQL存储过程定义的语法规范
  • 变量声明位置错误:DECLARE块应该放在AS/IS之后、BEGIN之前,而非嵌套在BEGIN内部
  • 缺少核心查询逻辑:仅定义了变量但未执行查询语句,存储过程无法实现获取客户数据的功能
  • 拼写错误:adddress多了一个字母d,应该修正为address

修正后的完整代码

CREATE OR REPLACE PROCEDURE selectCustomerData(
    customerId customer.customer_number%TYPE
) AS
    -- 变量声明放在AS之后、BEGIN之前
    cusName customer.name%TYPE;
    cusAddress customer.address%TYPE;
BEGIN
    -- 执行查询,将客户信息赋值给变量
    SELECT name, address
    INTO cusName, cusAddress
    FROM customer
    WHERE customer_number = customerId;
    
    -- 可选:输出查询结果用于验证(按需保留)
    DBMS_OUTPUT.PUT_LINE('客户姓名: ' || cusName);
    DBMS_OUTPUT.PUT_LINE('客户地址: ' || cusAddress);
    
EXCEPTION
    WHEN NO_DATA_FOUND THEN
        DBMS_OUTPUT.PUT_LINE('No such customer found');
    WHEN OTHERS THEN
        -- 额外添加错误详情,便于排查问题
        DBMS_OUTPUT.PUT_LINE('Error!! 具体错误信息: ' || SQLERRM);
END selectCustomerData;
/

修正细节说明

  1. 移除重复的IS关键字,仅保留AS(你也可以换成IS,两者语法效果完全一致)
  2. 调整变量声明位置至AS之后,符合PL/SQL块的标准结构
  3. 添加SELECT ... INTO语句实现核心查询逻辑,将指定ID的客户数据赋值给变量
  4. 修正adddress的拼写错误
  5. 在WHEN OTHERS分支中补充SQLERRM输出具体错误信息,方便后续问题排查

编译上述修正后的代码,即可解决PLS-00103错误,同时存储过程具备了完整的客户数据查询功能。

内容的提问来源于stack exchange,提问作者user3800993

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 11:12:43