SQL函数 - 表中记录数的返回值

时间:2011-04-26 17:17:37

标签: sql database oracle function

我将一些SQL放入Oracle脚本中,如果我运行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次, 我不确定它出了什么问题,但我确信它很简单!

4 个答案:

答案 0 :(得分:3)

你可能正在调用这样的函数:

select EXAMPLE_FUNCTION (1)
from my_table

在没有from:

的情况下调用它
select EXAMPLE_FUNCTION (1)

编辑:

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

select EXAMPLE_FUNCTION (1)
from dual

答案 1 :(得分:2)

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

答案 2 :(得分:1)

以下内容会在您的函数中起作用吗?

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

答案 3 :(得分:1)

你对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>

然后使用table列提供参数:

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>