2011-04-26 154 views
0

我将一些SQL放到Oracle脚本中,如果我运行的是Vanilla SQL,我会得到一个返回值/记录的正确输出。然而,在我的自定义函数中,我得到的值是有记录返回的次数。这是我所拥有的一个例子。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倍, 我不知道在哪里它去错了,但我敢肯定它的简单!

+0

你能进一步澄清你想要做什么吗?你期待什么结果?你怎么调用这个函数? – Craig 2011-04-26 17:23:31

+0

如果您获得20个返回值,则必须调用该函数20次。告诉我们你是怎么称呼它的。 – 2011-04-26 17:49:14

回答

3

你可能会调用这样的功能:

select EXAMPLE_FUNCTION (1) 
from my_table 

调用它没有从:

select EXAMPLE_FUNCTION (1) 

编辑:

正如指出的香农甲骨文需要from子句,所以我搜查,发现使用dual表的例子:

select EXAMPLE_FUNCTION (1) 
from dual 
+0

这很有意义,但是如果没有从我得到“ORA-00923:FROM关键字找不到预期的地方” – 2011-04-26 18:21:56

+0

-1 Oracle总是需要一个select子句来执行select语句。 – 2011-04-26 18:26:38

+0

用搜索提示进行编辑 – 2011-04-26 18:39:00

1

会像下面的工作在你的功能?

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

它运行,但我得到相同的'问题',我相当肯定Kakao是正确的。 – 2011-04-26 18:27:06

+0

哦,你调用它的方式你有20个条目,而不是函数的内部有20个返回值。我不明白这个问题。这段代码会让这个函数更容易理解,而Kakao调用它的方式会给你一次答案。 – thursdaysgeek 2011-04-26 20:22:12

1

如果你想获得soemthing不同对每个需要传递的东西不同。

比较这两个函数调用行使用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> 
2

就做这样的事情:SELECT EXAMPLE_FUNCTION(1)从双;