这里是想你想实现的例子。
让我们创建一个包含name
和phone
属性的对象类型。
CREATE OR REPLACE TYPE my_object as object(
name varchar2(20),
phone varchar2(10)
);
现在,让我们创建一个集合,哪些元素是my_object
类型:
CREATE OR REPLACE TYPE my_table is table of my_object;
现在我们的过程,将插入一个特定的表传过来的收集数据:
CREATE OR REPLACE PROCEDURE insert_mydata(v_my_data my_table)
AS
BEGIN
forall i in 1..v_my_data.count
insert into Some_Table(name, phone) --
values(v_my_data(i).name, v_my_data(i).phone);
END;
示范:
SQL> create table Some_table(
2 name varchar2(20),
3 phone varchar2(10)
4 );
Table created
SQL> select * from some_table;
NAME PHONE
-------------------- ----------
SQL>
SQL> declare
2 l_col_data my_table;
3 begin
4 select my_object('Name'
5 , '(123)23') bulk collect into l_col_data
6 from dual
7 connect by level <=11;
8
9 insert_mydata(l_col_data);
10 end;
11/
PL/SQL procedure successfully completed
SQL> commit;
Commit complete
SQL> select * from some_table;
NAME PHONE
-------------------- ----------
Name (123)23
Name (123)23
Name (123)23
Name (123)23
Name (123)23
Name (123)23
Name (123)23
Name (123)23
Name (123)23
Name (123)23
Name (123)23
11 rows selected
答到注释
我想你的Oracle版本11g之前。因此,为了解决这个错误(PLS-00436 "implementation restriction".
),您可以使用在线视图中插入数据:
forall i in 1..v_my_data.count
insert into (select name, phone from some_table) <--
values(v_my_data(i).name, v_my_data(i).phone);
还是尽量不要在INSERT语句中指定表的列名,如果您是表的列数插入和插入的值是相同的:
forall i in 1..v_my_data.count
insert into some_table <--
values(v_my_data(i).name, v_my_data(i).phone);
,或者使用FOR .. LOOP.. END LOOP
构建体:
for i in 1..v_my_data.count
loop
insert into Some_Table(name, phone) --
values(v_my_data(i).name, v_my_data(i).phone);
end loop;
¿使用脚本时是否发现错误?基本上,方法是类似的:创建一个显式的对象类型,然后将另一个类型作为object_type的表格,然后使用table_of类型定义in参数。如果您告诉我们关于错误或失败的信息,我会尽力帮忙。 – Alfabravo
谢谢,我会收到错误信息并发布。再次感谢。 – user1707389