如何创建oracle PL/SQL函数来存储/检索表中的数据



我是初学者,所以我对应该在返回类型中写什么感到困惑。

以及如何编写从特定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

相关内容

  • 没有找到相关文章

最新更新