Sql 我可以在INSERT语句中将记录作为参数吗?
我正在尝试填充一个新表TSql 我可以在INSERT语句中将记录作为参数吗?,sql,database,oracle,plsql,data-warehouse,Sql,Database,Oracle,Plsql,Data Warehouse,我正在尝试填充一个新表T create or replace procedure extractData is cursor c1 is SELECT a.id,a.data,b.id,b.data,c.id,c.data FROM a LEFT JOIN b ON a.id=b.id LEFT JOIN c on b.id=c.id; begin for currRec in c1 loop insert into table T values currRec,(select a_seq
create or replace procedure extractData
is
cursor c1 is
SELECT a.id,a.data,b.id,b.data,c.id,c.data
FROM a LEFT JOIN b ON a.id=b.id
LEFT JOIN c on b.id=c.id;
begin
for currRec in c1
loop
insert into table T
values currRec,(select a_seq.nextval from dual),(select b_seq.nextval from dual),(select b_seq.nextval from dual),SYSDATE
end loop
这会给我一个包含currRec列的表,然后是序列和SYSDATE吗?还有没有更好的方法来做到这一点而不让它变得比现在更混乱?在真实的表中,我在a、b和c中各有10个“数据”列,所以我担心会出现问题或出现故障。我正在为数据仓库编写一个过程,该数据仓库接收来自三个不同来源的数据,并将它们组合到一个表中。我可能需要进行一些处理,这就是我使用游标的原因。但如果我没有,我想知道我是否可以像上面提到的那样添加它。我没有oracle 11g,所以我也不认为我可以调用nextval而不必从双精度中选择。@user3786548-你可以使用
seq.nextval
而不必从双精度中选择,从10g开始。但我认为它们不适用于这种情况。分享和享受。我们一直能够在SQL语句中使用a_seq.nextval
。在11g之前,如果不选择DUAL,我们无法在PL/SQL中进行变量赋值。
INSERT
INTO table
SELECT a.id, a.data, b.id, b.data, c.id, c.data,
a_seq.nextval, b_seq.nextval, c_seq.nextval,
SYSDATE
FROM a
LEFT JOIN
b
ON b.id = a.id
LEFT JOIN
c
ON c.id = b.id