如何在pl/sql中使用游标将多列数据插入到包含单列的表中



我正试图使用游标将数据从表1插入到另一个表中,目的是理解Oracle中的对象。

然而,在使用游标循环插入数据时,我遇到了类似"参数数量无效"的错误。

create type airport_t as object
(
Rank number,
Airport varchar2(80),
Location varchar2(60),
Country varchar2(50),
Code_iata varchar2(3),
Code_icao varchar2(4),
Total_Passenger number,
Rank_change number,
Percent_change number
);

create table AIRPORTS2017OO
(
AIRPORT airport_t   // Look above code..
);

declare
cursor insert_cr is select * from AIRPORTS2017;
begin
open insert_cr;
for i in insert_cr  
loop
insert into Airports2017oo values( airport_t(i.Rank || '    
'||i.airport ||'    '||
i.Location ||'    '|| i.Country ||'    '|| i.code_iata ||'  '|| 
i.code_icao ||'   '||
i.Total_Passenger ||'   '|| i.Rank_change ||'    '|| 
i.Percent_change));
end loop;
end;
/

表1包含50行和9列。然而,表2只有1列,我希望表1中的所有数据都只在单列中放入表2中。

错误图像:[1]

AIRPORTS2017OO表中的列的类型为AIRPORT_T。同时,AIRPORT_T类型有许多不同类型的不同参数。但是,当插入行时,您将把所有字段连接到一个字符串中,作为一个参数传递。您需要将它们作为单独的参数传递,或者将对象类型重新定义为具有单个VARCHAR2属性。如果前者是正确的,则以下内容应该有效。
DECLARE
CURSOR insert_cr IS
SELECT * FROM airports2017;
BEGIN
FOR i IN insert_cr LOOP
INSERT INTO airports2017oo
VALUES
(airport_t(i.rank
,i.airport
,i.location
,i.country
,i.code_iata
,i.code_icao
,i.total_passenger
,i.rank_change
,i.percent_change));
END LOOP;
END;
/

另外,有关系统定义构造函数的详细信息,请参阅Oracle对象关系开发人员指南。

最新更新