【问题标题】:Missing Keyword when trying to Select into尝试选择时缺少关键字
【发布时间】:2016-11-24 18:02:58
【问题描述】:

所以我有一个函数来返回一个列的平均值,例如

CREATE OR REPLACE FUNCTION avgCol
RETURN DEC IS avgNum DEC;
BEGIN
  SELECT AVG(myCol)
  INTO avgNum
  FROM MyTable;
  RETURN avgNum;
END;
/

在尝试测试结果时,我有以下内容

SELECT avgCol
INTO RESULT
FROM DUAL;

但它给了我错误

ORA-00905: missing keyword
00905. 00000 -  "missing keyword"
*Cause:    
*Action:
Error at Line: 175 Column: 6

第 175 行是INTO RESULT。据我所知,这是一个标量函数,我正在尝试返回一个信号变量,所以它应该可以正常工作吗?我在这里缺少什么关键字? 我也知道我可以只使用 AVG(),但我正在学习如何创建一个标量函数。这仅用于学习目的。

【问题讨论】:

  • 什么是avgCol?它似乎没有在任何地方定义。
  • 函数定义中的aveNum是什么?这就是您要求函数返回的内容。
  • @GordonLinoff,它是一个标量函数,返回列中数字的平均值
  • @mathguy,抱歉打错了。我将代码更改为在这里发布。它的意思是avgNum
  • @a_horse_with_no_name,根据文档,它是一个子类型docs.oracle.com/database/121/LNPLS/predefined.htm#LNPLS2163

标签: sql oracle function keyword scalar


【解决方案1】:

在测试您的代码时(应该没问题),您需要

SELECT avgCol AS result FROM DUAL;

【讨论】:

  • 谢谢!我查了一下,到处都说要使用“INTO”。你知道为什么我应该使用 As 而不是 Into 吗?
【解决方案2】:

'INTO' 将结果值赋给一个 PL/SQL 变量; 'AS' 为 SQL SELECT(不是 PL/SQL)结果列/字段创建别名/名称。

【讨论】:

    猜你喜欢
    • 2020-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多