|
|
|
Проблема с типами в FUNCTION.
|
|||
|---|---|---|---|
|
#18+
Добрый день. Прошу помощи, т.к. второй день бьюсь с проблемой. Задача создать ф-ю возвращающую список сотрудников (т.е. массив), у которых SALARY больше заданной. (Желательно через явный курсор). Пробовал по всякому: и через пакет создвать типы, так и через явное создание (CREATE TYPE...) create or replace package emp_pkg is TYPE emp_rec IS RECORD (last_name employees.last_name%type, salary employees.salary%type); TYPE emp_tab IS TABLE OF emp_rec; function var_emp_sal (p_sal IN employees.salary%type default null) return emp_tab pipelined; end emp_pkg; create or replace package body emp_pkg is function var_emp_sal (p_sal IN employees.salary%type) return emp_tab is cursor cur_emp is select t.last_name, t.salary from employees t where t.salary > p_sal; v_emp cur_emp%rowtype; v_emp_tab emp_tab; begin open cur_emp; loop fetch cur_emp into v_emp; v_emp_tab := emp_tab(v_emp.last_name, v_emp.salary); exit when cur_emp%notfound; end loop; close cur_emp; return v_emp_tab; end ; end emp_pkg; Как бы я не делал, все сводится к одному: Ошибка: PLS-00306: ошибочное число или типы аргументов при обращении к 'EMP_TAB'. (на выделенной строке) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2017, 11:24 |
|
||
|
Проблема с типами в FUNCTION.
|
|||
|---|---|---|---|
|
#18+
Aleksey31, у плскл массива нет конструктора. а занафиг вообще массив, да и функция тоже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2017, 11:47 |
|
||
|
Проблема с типами в FUNCTION.
|
|||
|---|---|---|---|
|
#18+
школьное задание, Я вас не понял. Вот описан массив: TYPE emp_rec IS RECORD (last_name employees.last_name%type, salary employees.salary%type); TYPE emp_tab IS TABLE OF emp_rec; А зачем нужно и т.д. это отдельная тема. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2017, 11:51 |
|
||
|
Проблема с типами в FUNCTION.
|
|||
|---|---|---|---|
|
#18+
Aleksey31А зачем нужно и т.д. это отдельная тема.вот прийдешь ты к врачу - втираю мазь в пятку, а ухо все равно болит. Полагаешь он тебе пакажет как правильно втирать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2017, 11:58 |
|
||
|
Проблема с типами в FUNCTION.
|
|||
|---|---|---|---|
|
#18+
терапедAleksey31А зачем нужно и т.д. это отдельная тема.вот прийдешь ты к врачу - втираю мазь в пятку, а ухо все равно болит. Полагаешь он тебе пакажет как правильно втирать? Прошу не флудить. Лучше бы дельное что нибудь сказал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2017, 12:25 |
|
||
|
Проблема с типами в FUNCTION.
|
|||
|---|---|---|---|
|
#18+
Aleksey31Добрый день. Прошу помощи, т.к. второй день бьюсь с проблемой. Задача создать ф-ю возвращающую список сотрудников (т.е. массив), у которых SALARY больше заданной. (Желательно через явный курсор). Пробовал по всякому: и через пакет создвать типы, так и через явное создание (CREATE TYPE...) create or replace package emp_pkg is TYPE emp_rec IS RECORD (last_name employees.last_name%type, salary employees.salary%type); TYPE emp_tab IS TABLE OF emp_rec; function var_emp_sal (p_sal IN employees.salary%type default null) return emp_tab pipelined ; end emp_pkg; create or replace package body emp_pkg is function var_emp_sal (p_sal IN employees.salary%type) return emp_tab is cursor cur_emp is select t.last_name, t.salary from employees t where t.salary > p_sal; v_emp cur_emp%rowtype; v_emp_tab emp_tab; begin open cur_emp; loop fetch cur_emp into v_emp; v_emp_tab := emp_tab(v_emp.last_name, v_emp.salary); exit when cur_emp%notfound; end loop; close cur_emp; return v_emp_tab; end ; end emp_pkg; Как бы я не делал, все сводится к одному: Ошибка: PLS-00306: ошибочное число или типы аргументов при обращении к 'EMP_TAB'. (на выделенной строке) pipelined лишний ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2017, 14:42 |
|
||
|
Проблема с типами в FUNCTION.
|
|||
|---|---|---|---|
|
#18+
efendi, поспешил немногою надо так: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2017, 14:48 |
|
||
|
Проблема с типами в FUNCTION.
|
|||
|---|---|---|---|
|
#18+
efendiefendi, поспешил немногою надо так: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Благодарю тебя!!! pipelined остался с прошлого раза (через него также пробовал) :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2017, 14:59 |
|
||
|
Проблема с типами в FUNCTION.
|
|||
|---|---|---|---|
|
#18+
efendi Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Весь этот говнокод заменяется одной командой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2017, 15:06 |
|
||
|
Проблема с типами в FUNCTION.
|
|||
|---|---|---|---|
|
#18+
efendi, опять ступор. Видимо совсем дурной..) Пытаюсь вызвать(проверить) : select * from table(emp_pkg.var_emp_sal(12000)) Ошибка: ORA-00902 Неверный тип данных ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2017, 15:20 |
|
||
|
Проблема с типами в FUNCTION.
|
|||
|---|---|---|---|
|
#18+
Elic, спасибо. ПРосто не мог понять в чем проблема, дело принципа. А так еще лучше если без курсора: select t.last_name, t.salary BULK COLLECT INTO v_emp_tab from employees t where t.salary > p_sal; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2017, 15:25 |
|
||
|
Проблема с типами в FUNCTION.
|
|||
|---|---|---|---|
|
#18+
Aleksey31select * from table(emp_pkg.var_emp_sal(12000)) Ошибка: ORA-00902 Неверный тип данныхНе знает SQL никаких ни PL/SQL-записей, ни PL/SQL-коллекций. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2017, 16:08 |
|
||
|
Проблема с типами в FUNCTION.
|
|||
|---|---|---|---|
|
#18+
Elic, а как же тогда работает например тут: https://habrahabr.ru/post/119996/ Делал по пример можно сказать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2017, 16:11 |
|
||
|
Проблема с типами в FUNCTION.
|
|||
|---|---|---|---|
|
#18+
Aleksey31, а там pipelined не лишний. даже списать не получается ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2017, 16:18 |
|
||
|
Проблема с типами в FUNCTION.
|
|||
|---|---|---|---|
|
#18+
Aleksey31а как же тогда работает например тут: https://habrahabr.ru/post/119996/ Делал по пример можно сказать. Aleksey31pipelined остался с прошлого разаЗа pipelined скрыто много магии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2017, 16:19 |
|
||
|
Проблема с типами в FUNCTION.
|
|||
|---|---|---|---|
|
#18+
123йй, уже решили проблему составления. Пепилинд лишний(нечаянно остался). Теперь проблема с вызовом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2017, 16:19 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39405602&tid=1886421]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
176ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
| others: | 231ms |
| total: | 496ms |

| 0 / 0 |
