【问题标题】:SELECT command not being recognized for some reason.由于某种原因无法识别 SELECT 命令。
【发布时间】:2017-03-27 18:40:28
【问题描述】:

由于某种原因,每次我尝试运行此程序时,都会出现任何错误,指出第 4 行第 3 列 (SELECT) 的 SQL 语句已被忽略。还说,“YEAR”:无效的标识符。年份是存在于同一表单上的另一列。我正在尝试创建一个使用连字符显示年份的列,例如:“17-”。

 DECLARE
  TERRA_NUMBER VARCHAR2(40);
BEGIN
 SELECT CONCAT(YEAR , '-' )
 INTO TERRA_NUMBER FROM DUAL;
  RETURN TERRA_NUMBER;
END;

【问题讨论】:

  • 你能解释一下你解决问题的步骤吗
  • 您似乎忘记了 SELECT 中的 FROM 子句(基于 YEAR 是一列的注释)
  • 您正在从dual 表中进行选择。那里没有年份栏。为什么要从匿名块返回?

标签: sql oracle plsql oracle-apex oracle-apex-5


【解决方案1】:

评论太长了。

首先,Oracle 中没有YEAR 变量。也许你打算TO_CHAR(sysdate, 'YYYY')

其次,匿名编程块不返回值。所以,RETURN 是不合适的。

如果这是函数或存储过程的一部分,您应该显示整个定义。

【讨论】:

  • 我实际上并没有意识到我已经写了 FROM DUAL。我实际上是在尝试从我已经调用 APPLICATION 的表中获取 YEAR。
  • 感谢您指出这一点,我的代码已通过验证。现在我只需要担心一次只能获得一行。
【解决方案2】:

也许你可以创建 FindYear 函数。

CREATE OR REPLACE FUNCTION FindYear RETURN VARCHAR2
IS
TERRA_NUMBER VARCHAR2(40);
BEGIN 

SELECT CONCAT(TO_CHAR(sysdate, 'YYYY') , '-' )
 INTO TERRA_NUMBER FROM DUAL;
 RETURN(TERRA_NUMBER);
END;
/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-05
    • 2023-03-15
    • 2015-09-30
    相关资源
    最近更新 更多