怎样才能将在表A取得的数据插入另一个表B中?
(1)对于表A和表B两个表结构完全相同的话〔字段个数,相应字段的类型等等〕,可以使用
insert INTO B select * FROM A;
insert INTO B(field1,field2,field3) select A.field1,A.field2,A.field3 from A;
(2) 对于两个表如果字段数不一样,但是有几个字段的结构一样时〔类似于父子关系〕,必须使用 insert INTO B(field1,field2) select A.field1,A.field2 from A;
1.用带参数的游标实现insert功能:
create OR REPLACE PROCEDURE GET_DATA(
— 参数列表:
n_task_id IN number, –任务编号
v_task_name IN varchar2, –任务名称
v_name IN varchar2 — 名称
)
———————————————–
— PROCEDURE名 :GET_DATA —
— 処理内容 :从数据源表取得符合条件的的数据插入到目标数据表: —
— 引数 :n_tas_id 任务ID, —
— v_task_namek 任务名称, —
— v_bdw_name 对数据源表限制条件:本地网名称 —
———————————————–
IS
–插入行数控制
i_count number(5);
–取数据游标:DATA_CUR(IN_NAME)
–参数:本地网名称:IN_NAME
CURSOR DATA_CUR(IN_NAME VARchar2) IS /**注意:参数的定义中不带精度**/
select *
FROM GET_DATA_SRC A
where A.NAME = IN_NAME;
BEGIN
–计数器,控制插入行数
i_count := 0;
–循环插入数据
FOR MYCUR IN DATA_CUR(v_name) LOOP
insert INTO ABC(
ROW_ID,
TASK_ID,
TASK_NAME,
GET_DATA_DT,
CUST_ID,
ASSIGN_FLAG,
DEAL_DATE
)VALUES(
SEQ_KD.NEXTVAL,
N_TASK_ID,
V_TASK_NAME,
SYSDATE,
MYCUR.CUST_ID,
’N’,
NULL
);
–程序试用阶段,以后会删除satrt
i_count := i_count + 1;
IF i_count >100 THEN
COMMIT;
RETURN;
END IF;
–程序试用阶段,以后会删除end
END LOOP;
–数据commit,程序调试阶段避免大量数据,暂时关闭
–commit;
——–例外处理部分—————————-
EXCEPTION
WHEN OTHERS THEN
rollback;
END SRBZ_GET_SRBZ_KD_SPEED;
/
2.使用语句拼接法实现insert功能:
注:2.1字符串常量的引号 2.2 变量的引号
create OR REPLACE PROCEDURE ABC(
— 参数列表:
task_id IN number, –任务编号
task_name IN varchar2, –任务名称
in_NAME IN varchar2 –名称
)
————————— PROCEDURE名 :ABC
— 処理内容 :从数据源表取得符合条件的的数据插入到目标数据表
— 引数 :table_src 数据源表
— table_to 数据插入目标表
— in_bdw_name 对数据源表限制条件:本地网名称
———————————————
IS
–insert_STRING 动态生成的insert语句存放处
insert_STRING VARchar2(1000);
–数据源表存放处
tableSrc varchar2(500);
–数据插入目标表存放处
tableTarget varchar2(1000);
–数据目标表需要插入值的字段存放处
StrFields varchar2(1000);
BEGIN
–数据源表为:AAA
tableTarget := ’ BBB ’;
–数据来源
tableSrc := ’ select seq_kd.nextval,sysdate,’||task_id||’,’’’||task_name||’’’, ’
||’A.* from AAA A’
||’ where A.value=’||’’’IP-VPDN’’’
||’AND A.remark IS NULL’;
–需要插入的字段
StrFields := ’(ROW_ID,GET_DATA_DT,TASK_ID,TASK_NAME,COST_CTR,SERVICE_ID,’
||’SI_ADDR,SI_SERVER_ID)’;
–生成insert语句
insert_STRING := ’insert INTO ’ || tableTarget || StrFields || tableSrc ;
–执行insert语句
execute immediate insert_STRING;
–提交事务
commit;
——–例外处理部分——————————————————-
EXCEPTION
–异常的抛出
WHEN OTHERS THEN
–DBMS_OUTPUT.PUT_LINE(’处理过程中出错,程序退出,未执行相关内务’);
rollback;
END SRBZ_GET_SRBZ_KD_GSVPDN_FREE;
/
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
作者
相关推荐
-
OpenWorld18大会:Ellison宣布数据库的搜寻和破坏任务
在旧金山举行的甲骨文OpenWorld 2018大会中,甲骨文首席技术官(CTO)兼创始人Larry Elli […]
-
甲骨文自治数据库亮相 带来云计算新希望
早前甲骨文还不在云计算公司之列,而现在该公司正在迅速弥补其失去的时间。甲骨文的云计算核心是甲骨文自治数据库(O […]
-
ObjectRocket着力发展Azure MongoDB服务
MongoDB吸引了微软公司的注意力,微软公司计划针对运行于该公司2017年发布的Azure Cosmos D […]
-
2017年12月数据库流行度排行榜 定格岁末排名瞬间
数据库知识网站DB-engines最近更新的2017年12月份数据库流行度排名情况是否能提供更多的看点呢?TechTarget数据库网站将与您分享12月份的榜单排名情况,让我们拭目以待。