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

Oracle存储过程报PLS-00103错误:遇符号IN不符合预期如何解决?

解决Oracle存储过程PLS-00103错误的方案

错误原因分析

触发PLS-00103错误是因为代码混用了非Oracle的语法规则,具体问题点如下:

  • Oracle存储过程的参数模式(IN/OUT/IN OUT)需放在参数类型之后,而非参数名前;且默认参数模式就是IN,可省略。
  • Oracle不支持VARCHAR类型,需用VARCHAR2替代。
  • 变量声明块DECLARE必须放在BEGIN语句之前(Oracle中用IS或AS替代DECLARE作为声明块起始)。
  • Oracle没有INT数据类型,需用NUMBER定义整数变量。
  • Oracle字符串长度函数为LENGTH(),而非CHAR_LENGTH()。
  • 存储过程中不能直接执行SELECT返回结果,需通过输出参数或DBMS_OUTPUT输出内容。

修正后的存储过程代码

方案1:使用输出参数返回结果

CREATE OR REPLACE PROCEDURE print_string(
    input_string IN VARCHAR2(255),
    out_upper_str OUT VARCHAR2(255),
    out_char_count OUT NUMBER
)
IS
    num_chars NUMBER DEFAULT 0;
BEGIN
    IF input_string IS NULL THEN
        num_chars := 0;
        out_upper_str := NULL;
    ELSE
        num_chars := LENGTH(input_string);
        out_upper_str := UPPER(input_string);
    END IF;
    out_char_count := num_chars;
END;
/

方案2:使用DBMS_OUTPUT直接打印结果(适合调试)

CREATE OR REPLACE PROCEDURE print_string(
    input_string IN VARCHAR2(255)
)
IS
    num_chars NUMBER DEFAULT 0;
    upper_str VARCHAR2(255);
BEGIN
    IF input_string IS NULL THEN
        num_chars := 0;
        upper_str := NULL;
    ELSE
        num_chars := LENGTH(input_string);
        upper_str := UPPER(input_string);
    END IF;
    
    DBMS_OUTPUT.PUT_LINE('大写字符串: ' || NVL(upper_str, 'NULL'));
    DBMS_OUTPUT.PUT_LINE('字符长度: ' || num_chars);
END;
/

执行说明

  • 方案1的存储过程需通过绑定输出参数调用,示例PL/SQL块:
DECLARE
    v_upper VARCHAR2(255);
    v_count NUMBER;
BEGIN
    print_string('hello world', v_upper, v_count);
    DBMS_OUTPUT.PUT_LINE('结果:' || v_upper || ',长度:' || v_count);
END;
/
  • 方案2的存储过程调用前需开启DBMS_OUTPUT:
SET SERVEROUTPUT ON;
EXEC print_string('hello world');

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 04:55:42