【问题标题】:SQL function - Returning value for number of records in tableSQL 函数 - 返回表中记录数的值
【发布时间】:2011-04-26 17:17:36
【问题描述】:

我在 Oracle 脚本中加入了一些 SQL,如果我运行 Vanilla SQL,我会得到一个返回值/记录的正确输出。但是,在我的自定义函数中,我得到的值与记录的返回次数一样多。这是我所拥有的一个示例。

create function EXAMPLE_FUNCTION (passedID in NUMBER)
return NUMBER
IS 
returnValue NUMBER;
BEGIN
SELECT "TABLE1"."ID" INTO returnValue
FROM "TABLE1" WHERE "TABLE1"."ID" = passedID;
RETURN  returnValue;
END;

所以如果 TABLE1 有 20 条记录,我将返回 ID 为 1 的记录 20 次, 我不确定它哪里出错了,但我确信它很简单!

【问题讨论】:

  • 你能进一步澄清你想要做什么吗?你期待什么结果?你是怎么调用这个函数的?
  • 如果你得到 20 个返回值,你必须调用这个函数 20 次。告诉我们你是怎么称呼它的。

标签: sql database oracle function


【解决方案1】:

你可能是这样调用函数的:

select EXAMPLE_FUNCTION (1)
from my_table

在没有 from 的情况下调用它:

select EXAMPLE_FUNCTION (1)

编辑:

正如 Shannon Oracle 指出的那样,Oracle 需要 from 子句,因此我使用 dual 表搜索并找到了示例:

select EXAMPLE_FUNCTION (1)
from dual

【讨论】:

  • 这很有意义,但是如果没有 from 我会得到“ORA-00923: FROM keyword not found where expected”
  • -1 Oracle 总是需要一个 from 子句作为 select 语句。
  • 使用搜索提示编辑
  • 每次编辑,删除反对票。 @Beck:关于双表参见download.oracle.com/docs/cd/E11882_01/server.112/e17118/…
【解决方案2】:

只需执行以下操作:SELECT EXAMPLE_FUNCTION(1) FROM dual;

【讨论】:

    【解决方案3】:

    下面的内容会在你的函数中起作用吗?

    Select COUNT(*) into returnValue 
    from TABLE1 
    where Table1.ID = passedID;
    

    【讨论】:

    • 它运行了,但我遇到了同样的“问题”,我相当肯定 Kakao 是对的。
    • 哦,你这么称呼它有 20 个条目,并不是说函数内部有 20 个返回值。我不明白这个问题。这段代码会让函数更容易理解,而Kakao的调用方式会给你一次答案。
    【解决方案4】:

    passedID? 使用什么值如果你想为每一行得到不同的东西,你需要传入不同的东西。

    比较这两个函数调用。首先是一个固定值:

    SQL> select example_function(1) from table1
      2  /
    
    EXAMPLE_FUNCTION(1)
    -------------------
                      1
                      1
                      1
                      1
                      1
                      1
                      1
                      1
                      1
                      1
                      1
                      1
                      1
                      1
                      1
                      1
                      1
                      1
                      1
                      1
    
    20 rows selected.
    
    SQL>
    

    然后使用表格列提供参数:

    SQL> select example_function(id) from table1
      2  /
    
    EXAMPLE_FUNCTION(ID)
    --------------------
                       1
                       2
                       3
                       4
                       5
                       6
                       7
                       8
                       9
                      10
                      11
                      12
                      13
                      14
                      15
                      16
                      17
                      18
                      19
                      20
    
    20 rows selected.
    
    SQL>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-19
      • 1970-01-01
      • 1970-01-01
      • 2019-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-20
      相关资源
      最近更新 更多