最近要用到通过一个带数组参数的存储过程向一张表里添加多条数据,网上看了下,大部分只有代码,没注释!
自己研究了下,写了个简单的带注释的sql语句!便于以后自己以后的查看!同时也给大家参考下,目前我运行的没错!是在plsql中!如果有什么问题希望大家指出!
下面附上sql语句:
--创建表
create table testArrayTable
(
tid number(10) primary key,
tname varchar2(50) not null,
tpwd varchar2(50) not null
);
--创建该表ID的序列
create sequence seq_testArrayTable_id;
--创建该表的触发器(使用序列,每次向表里添加数据时,可以不用添加tid,触发器会自动添加)
create or replace trigger testArrayTable_tid_tigger
before insert on testArrayTable
for each row
begin
select seq_testArrayTable_id.Nextval into :new.tid from dual;
end;
--定义一种类型,可以看做一张表(针对testArrayTable表,id 使用触发器自动添加,不用再此处出现)
create or replace type testArrayType as object
(
tname varchar2(50),
tpwd varchar2(50)
);
--创建 testArrayType 类型用于在存储过程里使用
create or replace type testArrayTypeProc as table of testArrayType;
--创建存储过程,使用数组参数(testArrayTypeProc)
create or replace procedure testArrayTypeProducd
(
testArrayTypeProcParam in testArrayTypeProc
)
is
begin
--循环插入数据
for i in 1..testArrayTypeProcParam.count
loop
--此处循环插入数据
insert into testArrayTable(tname,tpwd) values(testArrayTypeProcParam(i).tname,testArrayTypeProcParam(i).tpwd);
--此处在playsql中查看传入到存储过程的数据(可以在plsql的输出中看到以下输出的内容)
dbms_output.put_line('输入的tname:'||testArrayTypeProcParam(i).tname||'输入的tpwd:'||testArrayTypeProcParam(i).tpwd);
end loop;
commit;
end;
--调用该存储过程 testArrayTypeProc为存储过程传入参数 testArrayType为类型testArrayTypeProc的参数 testArrayType里面的值为向数据库里插入的值
begin
testArrayTypeProducd(testArrayTypeProc(testArrayType('qq','123'),testArrayType('ww','456')));
end;
--最后查询 testArrayTable 看触发器是否使用,存储过程是否已经将数据添加到表中
select * from testArrayTable;