powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Проблема с типами в FUNCTION.
17 сообщений из 17, страница 1 из 1
Проблема с типами в FUNCTION.
    #39405558
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'. (на выделенной строке)
...
Рейтинг: 0 / 0
Проблема с типами в FUNCTION.
    #39405590
Aleksey31,

у плскл массива нет конструктора. а занафиг вообще массив, да и функция тоже.
...
Рейтинг: 0 / 0
Проблема с типами в FUNCTION.
    #39405596
Aleksey31
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
школьное задание,
Я вас не понял. Вот описан массив:
TYPE emp_rec IS RECORD (last_name employees.last_name%type, salary employees.salary%type);
TYPE emp_tab IS TABLE OF emp_rec;

А зачем нужно и т.д. это отдельная тема.
...
Рейтинг: 0 / 0
Проблема с типами в FUNCTION.
    #39405602
терапед
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Aleksey31А зачем нужно и т.д. это отдельная тема.вот прийдешь ты к врачу - втираю мазь в пятку, а ухо все равно болит. Полагаешь он тебе пакажет как правильно втирать?
...
Рейтинг: 0 / 0
Проблема с типами в FUNCTION.
    #39405620
Aleksey31
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
терапедAleksey31А зачем нужно и т.д. это отдельная тема.вот прийдешь ты к врачу - втираю мазь в пятку, а ухо все равно болит. Полагаешь он тебе пакажет как правильно втирать?
Прошу не флудить. Лучше бы дельное что нибудь сказал.
...
Рейтинг: 0 / 0
Проблема с типами в FUNCTION.
    #39405787
efendi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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 лишний
...
Рейтинг: 0 / 0
Проблема с типами в FUNCTION.
    #39405794
efendi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
efendi,

поспешил немногою надо так:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
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;
  k number := 0;
begin
  v_emp_tab.delete;
  open cur_emp;
  loop
    fetch cur_emp into v_emp;
    exit when cur_emp%notfound;
    k := k + 1;  
    v_emp_tab(k).last_name :=  v_emp.last_name;
    v_emp_tab(k).salary := v_emp.salary;
  end loop;
  close cur_emp;
  return v_emp_tab;
end ;
end emp_pkg;
...
Рейтинг: 0 / 0
Проблема с типами в FUNCTION.
    #39405810
Aleksey31
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
efendiefendi,

поспешил немногою надо так:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
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;
  k number := 0;
begin
  v_emp_tab.delete;
  open cur_emp;
  loop
    fetch cur_emp into v_emp;
    exit when cur_emp%notfound;
    k := k + 1;  
    v_emp_tab(k).last_name :=  v_emp.last_name;
    v_emp_tab(k).salary := v_emp.salary;
  end loop;
  close cur_emp;
  return v_emp_tab;
end ;
end emp_pkg;


Благодарю тебя!!! pipelined остался с прошлого раза (через него также пробовал) :)
...
Рейтинг: 0 / 0
Проблема с типами в FUNCTION.
    #39405818
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
efendi
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
  cursor cur_emp is select t.last_name, t.salary from employees t where t.salary > p_sal;
  v_emp cur_emp%rowtype;
  k number := 0;
…
  v_emp_tab.delete;
  open cur_emp;
  loop
    fetch cur_emp into v_emp;
    exit when cur_emp%notfound;
    k := k + 1;  
    v_emp_tab(k).last_name :=  v_emp.last_name;
    v_emp_tab(k).salary := v_emp.salary;
  end loop;
  close cur_emp;

Весь этот говнокод заменяется одной командой.
...
Рейтинг: 0 / 0
Проблема с типами в FUNCTION.
    #39405831
Aleksey31
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
efendi,
опять ступор. Видимо совсем дурной..)
Пытаюсь вызвать(проверить) :

select * from table(emp_pkg.var_emp_sal(12000))
Ошибка: ORA-00902 Неверный тип данных
...
Рейтинг: 0 / 0
Проблема с типами в FUNCTION.
    #39405837
Aleksey31
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Elic, спасибо. ПРосто не мог понять в чем проблема, дело принципа. А так еще лучше если без курсора:
select t.last_name, t.salary BULK COLLECT INTO v_emp_tab from employees t where t.salary > p_sal;
...
Рейтинг: 0 / 0
Проблема с типами в FUNCTION.
    #39405891
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksey31select * from table(emp_pkg.var_emp_sal(12000))
Ошибка: ORA-00902 Неверный тип данныхНе знает SQL никаких ни PL/SQL-записей, ни PL/SQL-коллекций.
...
Рейтинг: 0 / 0
Проблема с типами в FUNCTION.
    #39405895
Aleksey31
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Elic,
а как же тогда работает например тут: https://habrahabr.ru/post/119996/
Делал по пример можно сказать.
...
Рейтинг: 0 / 0
Проблема с типами в FUNCTION.
    #39405901
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksey31,

а там pipelined не лишний.
даже списать не получается ?
...
Рейтинг: 0 / 0
Проблема с типами в FUNCTION.
    #39405902
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksey31а как же тогда работает например тут: https://habrahabr.ru/post/119996/
Делал по пример можно сказать.
Aleksey31pipelined остался с прошлого разаЗа pipelined скрыто много магии.
...
Рейтинг: 0 / 0
Проблема с типами в FUNCTION.
    #39405903
Aleksey31
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
123йй,

уже решили проблему составления. Пепилинд лишний(нечаянно остался). Теперь проблема с вызовом.
...
Рейтинг: 0 / 0
Проблема с типами в FUNCTION.
    #39405907
Aleksey31
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Elic,

спасибо, понял куда копать! Буду пробовать.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Проблема с типами в FUNCTION.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]