【问题标题】:add_months Oracle stored procedureadd_months Oracle 存储过程
【发布时间】:2017-10-09 11:46:08
【问题描述】:

我想将 x 年添加到时间戳变量并将其重新分配给同一个变量,就像这样(但不工作)

d_TIMESTAMP := add_months(d_TIMESTAMP,-360);

我得到错误

错误(48,13):PLS-00103:在预期以下情况之一时遇到符号“=”:常量异常表 long double ref char 时间时间戳间隔日期二进制国家字符 nchar 符号“”被替换为“ ="继续。

【问题讨论】:

  • 错误不在您发布的内容中。你能把剩下的代码贴出来吗?
  • 我正在尝试 +/- 几年来作为存储过程中的参数的时间戳变量。我已将其稍微更改为:SELECT add_months(p_TIMESTAMP,-360) INTO p_TIMESTAMP,我得到的错误是 "Error(50,42): PLS-00403: expression 'P_TIMESTAMP' cannot be used as an INTO-target of a SELECT/FETCH FROM DUAL 的语句 " 和 "Error(50,54): PL/SQL: ORA-00904: : invalid identifier"
  • 我可能已经修复了这个,等待测试。我试图修改一个 IN 变量。将其更改为 IN/OUT 消除了错误。完全测试后我会发布答案。

标签: sql oracle timestamp


【解决方案1】:

d_TIMESTAMP 是一个输入变量,因此无法在代码中修改它。将变量设为IN OUT 变量解决了这个问题。像这样: p_TIMESTAMP IN OUT 然后: SELECT ADD_MONTHS(p_TIMESTAMP,-360) INTO p_TIMESTAMP FROM DUAL;

【讨论】:

    【解决方案2】:

    您需要添加与要添加的年数相对应的月数。例如,如果要添加一年,则需要添加 12 个月。试试这个。

    d_TIMESTAMP := ADD_MONTHS(d_TIMESTAMP, 12);
    

    更多关于ADD_MONTHS的信息:https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions004.htm

    【讨论】:

    • 感谢@alejandrogiron,但这正是我正在做的。只是月数也可以是负数,就我而言,我减去了 30 年。
    • 我明白了,它应该可以正常工作。也许发布整个过程,看看是否有其他问题?
    猜你喜欢
    • 2011-01-03
    • 2011-12-29
    • 2014-05-26
    • 1970-01-01
    • 1970-01-01
    • 2011-11-07
    • 1970-01-01
    相关资源
    最近更新 更多