2011-04-26 163 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)從雙;