如何从 table 创建 oracle PL/SQL 函数到 store/retrieve 数据
How to Create oracle PL/SQL function to store/retrieve data from table
我是初学者,所以我很困惑我应该用 return 类型写什么。
以及如何将函数写入 select 来自特定 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
一个简单的选择是return refcursor;您不必为此声明任何类型。
这是一个基于 Scott 示例架构的示例。函数 returns 来自 EMP
table 的所有行,其 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>
虽然这有点自定义,但您可以使用类型从函数中 return 行。
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
我是初学者,所以我很困惑我应该用 return 类型写什么。
以及如何将函数写入 select 来自特定 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
一个简单的选择是return refcursor;您不必为此声明任何类型。
这是一个基于 Scott 示例架构的示例。函数 returns 来自 EMP
table 的所有行,其 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>
虽然这有点自定义,但您可以使用类型从函数中 return 行。
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