Функция SQL - Возвращает значение для количества записей в таблице - PullRequest
0 голосов
/ 26 апреля 2011

Я добавляю немного 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 записей, я получу запись с идентификатором 1, возвращенным 20 раз, Я не уверен, где все идет не так, но я уверен, что все просто!

Ответы [ 4 ]

3 голосов
/ 26 апреля 2011

Вы, вероятно, вызываете функцию следующим образом:

select EXAMPLE_FUNCTION (1)
from my_table

Позвоните без:

select EXAMPLE_FUNCTION (1)

EDIT:

Как указал Шеннон, Oracle требует предложения from, поэтому я искал и находил примеры, используя таблицу dual:

select EXAMPLE_FUNCTION (1)
from dual
2 голосов
/ 26 апреля 2011

Просто сделайте что-то вроде: SELECT EXAMPLE_FUNCTION (1) FROM dual;

1 голос
/ 26 апреля 2011

Какое значение вы используете для 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>
1 голос
/ 26 апреля 2011

Будет ли что-то подобное ниже работать в вашей функции?

Select COUNT(*) into returnValue 
from TABLE1 
where Table1.ID = passedID;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...