這裏是想你想實現的例子。
讓我們創建一個包含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