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

PL/SQL输入日期存入变量报PLS-00201错误如何解决

报错原因排查

一共存在4处错误,按触发优先级排列如下:

  • 替换变量未加引号导致解析错误
    你使用的&today是Oracle SQL*Plus类工具的替换变量,若输入18-Sep-09时未主动包裹单引号,Oracle会将输入内容解析为表达式,把-识别为减号,尝试计算18 - SEP - 09,但SEP没有被定义为变量,直接触发当前报错。
  • 日期格式掩码错误
    Oracle的TO_DATE函数中,3字符英文月份缩写对应的掩码是MON,你写的MMM不属于合法的Oracle日期格式掩码,即使解决了引号问题也会抛出格式不匹配报错。
  • 变量名引用错误
    定义v_tomorrow时,你直接使用了未声明的today变量,正确应该引用已经声明的v_today变量。
  • 内置包名拼写错误
    输出用的内置包正确名称是DBMS_OUTPUT,你写的DMBS_OUTPUT拼写顺序错误,后续运行也会触发标识符不存在报错。
修复后的完整代码
SET SERVEROUTPUT ON

DECLARE
v_today DATE := TO_DATE('&today', 'YY-MON-DD', 'NLS_DATE_LANGUAGE = AMERICAN');
v_tomorrow v_today%TYPE := v_today + 1;

BEGIN
DBMS_OUTPUT.PUT_LINE('Today is: ' || TO_CHAR(v_today, 'YYYY-MM-DD'));
DBMS_OUTPUT.PUT_LINE('Tomorrow will be: ' || TO_CHAR(v_tomorrow, 'YYYY-MM-DD'));
END;
/
使用说明

运行代码后,在弹出的替换变量输入框中直接输入18-Sep-09即可,无需额外加单引号。代码中额外指定了NLS_DATE_LANGUAGE参数,避免数据库默认语言不是英文时,无法识别Sep这类英文月份缩写的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 21:36:01