永发信息网

oracle 中有一张表A(A1,A2,A3,A4,A5),一张表B(B1,B2,B3),要把B表的值插到A表中,

答案:2  悬赏:80  手机版
解决时间 2021-03-31 14:58
  • 提问者网友:却不属于对方
  • 2021-03-31 10:51
oracle 中有一张表A(A1,A2,A3,A4,A5),一张表B(B1,B2,B3),要把B表的值插到A表中,
最佳答案
  • 五星知识达人网友:上分大魔王
  • 2021-03-31 11:08
A1是用sequence值么?
另外,A3使用变量保持时间不变是什么意思?如果是系统时间,带有时分秒,那么就算使用变量也是不可能是一样的。如果没有其他的,一个插入语句还是蛮简单的,比如:
INSERT INTO A
(A2,A3,A4,A5
)
SELECt B1, SYSDATE,B2,SUM(B3) FROM B GROUP BY B1,B2;追问通过在存储过程中用变量,A3可以保持时间一致吧,就是不知道怎么把这个变量/常量和查询结果连起来。A1就是和sequence追答DECLARE

v_date date :=to_date(to_char(sysdate,'yyyy-mm-dd'),'yyyy-mm-dd');
BEGIN
INSERT INTO A
(A2,A3,A4,A5
)
SELECt sqe_xxx.nextval,B1, v_date,B2,SUM(B3) FROM B GROUP BY B1,B2;
END ;
没写存储,写了个过程,执行下就OK,不知道能不能满足你的要求,sequence的话自己在过程中修改下名称。追问非常感谢,是不是可以这么写
BEGIN
EXECUTE IMMEDIATE(
INSERT INTO A
(A1,A3,A2,A4,A5 )
VALUES((select sqe_sequence.nextval from dual),v_date,(SELECt B1,B2,SUM(B3) FROM B GROUP BY B1,B2))
)追答DECLARE
v_date date :=to_date(to_char(sysdate,'yyyy-mm-dd'),'yyyy-mm-dd');
BEGIN
INSERT INTO A
(A1,A2,A3,A4,A5
)
SELECt sqe_xxx.nextval,B1, v_date,B2,SUM(B3) FROM B GROUP BY B1,B2;
END ;

整个执行就OK了,没看明白为啥要将插入语句放入到EXECUTE IMMEDIATE里面,这个不是动态执行语句,主要放在存储过程中,防止所跟语句中的操作对象还不存在,存储编译报错用的么?
全部回答
  • 1楼网友:夜风逐马
  • 2021-03-31 12:03
你好,可以这么写:
insert into a(a1,a2,a3,a4,a5) select xxx.nextval,sysdate, b1 ,b2,sum(b3) from b group by b1,b2
把xxx换成你sequence即可。
希望可以解决你的问题追问这样SYSDATE每条记录都不一样,如何在存储过程中用变量实现追答那你可以定义一个变量表示,如:
current_date := sysdate
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯