table类型的一个小例子

--table类型的一个小例子

--表结构
create table STUDESC
(
ID VARCHAR2(10),
NAME VARCHAR2(20),
DESCR VARCHAR2(20)
)
create table STUDENT
(
ID VARCHAR2(10) not null,
NAME VARCHAR2(30),
LEADER VARCHAR2(10)
)

--创建记录类型

create or replace type t_test as object(
id VARCHAR(10),
DESCR varchar2(60)
)

--创建table类型

create or replace type t_test_table as table of t_test

--创建返回table类型的函数

create or replace function ZHSQ(IDS IN VARCHAR2, DESCRS VARCHAR2)
return t_test_table is
v_test t_test_table := t_test_table();
STR1 VARCHAR2(100);
STR2 VARCHAR2(100);
IDX1 INTEGER;
IDX2 INTEGER;
begin
STR1 := REPLACE(REPLACE(IDS, ')', ''), '(', '') || ',';
STR2 := REPLACE(REPLACE(DESCRS, ')', ''), '(', '') || ',';
LOOP
IDX1 := INSTR(STR1, ',', 1);
IDX2 := INSTR(STR2, ',', 1);
EXIT WHEN((IDX1 = 0) OR (IDX2 = 0) OR (IDX1 IS NULL) OR (IDX2 IS NULL));
v_test.extend();
V_TEST(v_test.COUNT) := t_test(SUBSTR(STR1, 1, IDX1 - 1),
SUBSTR(STR2, 1, IDX2 - 1));
STR1 := SUBSTR(STR1, IDX1 + 1, LENGTH(STR1) - IDX1);
STR2 := SUBSTR(STR2, IDX2 + 1, LENGTH(STR2) - IDX2);
END LOOP;
return v_test;
end ZHSQ;



--调用实例

insert into studesc
(id, name, descr)
SELECT T.ID,S.NAME,T.DESCR FROM TABLE(ZHSQ('(1,3,4)','(QQQ,WWW,EEE)')) T,STUDENT S WHERE T.ID=S.ID
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值