我是初学者,所以我对应该在返回类型中写什么感到困惑。
以及如何编写从特定ID 中选择所有记录的功能
2 shadik 27 25-05-14 4000 pakistan
1 AKSHAY 28 30-04-20 2000 INDIA
3 GAURANG 25 06-05-20 4000 USA
4 NIRAV 23 16-11-14 1000 CANADA
5 VEER 29 26-12-19 5000 DUBAI
一个简单的选项是返回refcursor;您不必为此声明任何类型。
下面是一个基于Scott的示例模式的示例。函数返回EMP
表中DEPTNO
列与作为函数的IN
参数传递的值匹配的所有行。
SQL> create or replace function f_test (par_deptno in number)
2 return sys_refcursor
3 is
4 rc sys_refcursor;
5 begin
6 open rc for select * from emp
7 where deptno = par_deptno;
8 return rc;
9 end;
10 /
Function created.
SQL> select f_test(10) from dual;
F_TEST(10)
--------------------
CURSOR STATEMENT : 1
CURSOR STATEMENT : 1
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------- ---------- ---------- ----------
7782 CLARK MANAGER 7839 09.06.81 2450 10
7839 KING PRESIDENT 17.11.81 5000 10
7934 MILLER CLERK 7782 23.01.82 1300 10
SQL>
尽管这是一个更自定义的功能,但您可以使用类型从函数返回行。
create or replace type myRecordType
as object
( x int,
y date,
z varchar2(25)
)
create or replace type myTableType
as table of myRecordType;
/
create or replace function my_function return myTableType
as
some_data myTableType := myTabletype();
begin
for i in 1 .. 10 loop
some_data.extend;
some_data(i) :=
myRecordType( i, sysdate+i, 'record ' || i );
end loop;
return some_data;
end;
/
select * from TABLE ( cast( my_function() as mytableType ) )
/
X Y Z
1 09-FEB-22 record 1
2 10-FEB-22 record 2
3 11-FEB-22 record 3
4 12-FEB-22 record 4
5 13-FEB-22 record 5
6 14-FEB-22 record 6
7 15-FEB-22 record 7
8 16-FEB-22 record 8
9 17-FEB-22 record 9
10 18-FEB-22 record 10