Sql 如何遍历id列表并在表中为oracle中的每个id插入一条记录
嗨,我有一个ID列表,比如1,6,8,9,12,45,67,。。。。 我希望遍历这些id,并在表中为每个id示例插入一条记录-Sql 如何遍历id列表并在表中为oracle中的每个id插入一条记录,sql,oracle,stored-procedures,plsql,Sql,Oracle,Stored Procedures,Plsql,嗨,我有一个ID列表,比如1,6,8,9,12,45,67,。。。。 我希望遍历这些id,并在表中为每个id示例插入一条记录- for each id { insert into table_name(user_id, sys_id, crt_tsp) values (nextval,{this value is from above list}, current_timestamp) } 如何在sql中实现这一点我的数据库是oracle?您可以使用集合。SYS.ODCINUMBERLIS
for each id {
insert into table_name(user_id, sys_id, crt_tsp) values (nextval,{this value is from above list}, current_timestamp)
}
如何在sql中实现这一点我的数据库是oracle?您可以使用集合。SYS.ODCINUMBERLIST是一个内置的VARRAY,您可以使用:
Oracle 11g R2架构设置:
问题1:
:
或者您可以创建自己的类型:
CREATE TYPE NumberList IS TABLE OF NUMBER;
INSERT INTO table_name( user_id, sys_id, crt_tsp)
SELECT sequence_name.NEXTVAL,
COLUMN_VALUE,
current_timestamp
FROM TABLE( NumberList( 1,6,8,9,12,45,67 ) );
更新:
根据OP对另一个答案的评论:
我想从另一个表中获取数字列表
select id from table_name
您可以直接从该表中选择:
INSERT INTO table_name( user_id, sys_id, crt_tsp)
SELECT sequence_name.NEXTVAL,
id,
current_timestamp
FROM table_name;
下面是匿名块的一些伪代码,它将按照您的要求执行。您需要创建一个具有所需ID的临时表
declare
cursor c0 is
select
a.id_value,
b.user_id,
b.crt_tsp
from temporary_table a
join data_table b on b.id_value = a.id_value;
begin
for rec in c0 loop
insert into table_name (...) values(rec.id_value, rec.user_id, rec.crt_tsp ...);
end loop;
end;
除了@MT0的答案之外,在Oracle 12.2及更高版本中,您甚至不需要TABLEfunction,您可以直接从SYS.ODCINUMBERLIST或NumberList1、6、8、9、12、45、67中进行选择 如果您可以传递包含在字符串中的逗号分隔的数字列表,XMLTABLE也可以用于11g中
INSERT INTO table_name (
user_id
,sys_id
,crt_tsp
)
SELECT sequence_name.NEXTVAL
,to_number(COLUMN_VALUE)
,current_timestamp
FROM XMLTABLE('1, 6, 8, 9, 12, 45, 67');
将该列表放在临时表中。JOIN.您是否从表中创建ID列表?如果是,您可以通过查询来执行此操作,如果不是,您可以创建一个存储过程,其中该列表是一个文件,在某种语言的数组中,在一个表中?。你打算用哪种语言写这篇文章?为什么不直接用INSERT-INTO。。。选择从临时表中,您可以去掉整个PL/SQL块、游标和循环?但是,你也可以问OP是如何将列表放入临时表的,你有一个鸡和蛋的问题,这并不能解决。我非常喜欢你的回答。如果没有额外的逻辑,效率会更高。但是你的答案不允许他按照OP的要求迭代ID。我的答案是。这将是有用的信息,可以添加到你的答案中,说明这个版本的好处,而不是简单的东西——你可以在代码段中添加注释,指出你将在循环中的何处执行预处理,或者是一些简单的示例附加逻辑。谢谢,我想从另一个表中获取数字列表。示例..从SYS.ODCINUMBERLISTselect id FROM table_name;但我一直在下面得到错误SQL错误:ORA-00936:缺少表达式00936。00000-失踪expression@question_tech:数字列表,它是以id形式存储在多行中还是以字符串形式存储在一行中?谢谢。我想从另一个表中获取数字列表。实例从表编号列表中,从表名称中选择id;但我一直在下面得到错误SQL错误:ORA-00936:缺少表达式00936。00000-缺少表达式
INSERT INTO table_name( user_id, sys_id, crt_tsp)
SELECT sequence_name.NEXTVAL,
id,
current_timestamp
FROM table_name;
declare
cursor c0 is
select
a.id_value,
b.user_id,
b.crt_tsp
from temporary_table a
join data_table b on b.id_value = a.id_value;
begin
for rec in c0 loop
insert into table_name (...) values(rec.id_value, rec.user_id, rec.crt_tsp ...);
end loop;
end;
INSERT INTO table_name (
user_id
,sys_id
,crt_tsp
)
SELECT sequence_name.NEXTVAL
,COLUMN_VALUE
,current_timestamp
FROM SYS.ODCINUMBERLIST(1, 6, 8, 9, 12, 45, 67);
INSERT INTO table_name (
user_id
,sys_id
,crt_tsp
)
SELECT sequence_name.NEXTVAL
,to_number(COLUMN_VALUE)
,current_timestamp
FROM XMLTABLE('1, 6, 8, 9, 12, 45, 67');