таблица в строках базы данных - PullRequest
0 голосов
/ 07 февраля 2020

У меня есть таблица Люди , имеющие people_id, people_name, people_lastname . Я сталкиваюсь с трудностями при создании функции pl / sql для отображения всех строк этой таблицы. Я так много сделал до сих пор

create or replace function PeopleTable(
people_id in int,student_name in varchar (255),student_lastname in varchar (255))
  return table_People
  as cursor curs
  is  select people_id,people_name,student_lastname from People 
      var table_People:=table_res();
      begin open curs ;
     loop 
        fetch curs 
         bulk collect into var limit 100;
          exit when curs%notfound;
  end loop; 
close curs;

Ответы [ 2 ]

1 голос
/ 07 февраля 2020

Один из вариантов - вернуть refcursor:

SQL> create or replace function f_test (par_deptno in number)
  2    return sys_refcursor
  3  is
  4    l_rc sys_refcursor;
  5  begin
  6    open l_rc for
  7      select empno, ename, job, sal
  8      from emp
  9      where deptno = par_deptno;
 10    return l_rc;
 11  end;
 12  /

Function created.

SQL> select f_test(10) from dual;

F_TEST(10)
--------------------
CURSOR STATEMENT : 1

CURSOR STATEMENT : 1

     EMPNO ENAME      JOB              SAL
---------- ---------- --------- ----------
      7782 CLARK      MANAGER         2450
      7839 KING       PRESIDENT       5000
      7934 MILLER     CLERK           1300


SQL>
0 голосов
/ 10 февраля 2020

Как пример Littlefoot. Непонятно, чего хочет автор вопроса, но вот еще один пример

create or replace function PeopleTable (people_id in int := null
                                         ,student_name in varchar2 := null /*(255)*/
                                         ,student_lastname in varchar2 := null /*(255)*/
                                         )
return table_People
is
  var table_People;
begin 
    -- example table_People_Obj type object for nested table table_People
    select table_People_Obj(people_id
                             ,people_name
                             ,student_lastname)
      bulk collect
      into var
      from People p
     where (p.people_id = people_id
            or p.student_name = student_name
            or p.student_lastname = student_lastname
             );

    return var;

end PeopleTable;
/

select * 
  from table(PeopleTable(people_id => :id))
/
...