Oracle存储过程之数据库中获取数据实例
程序员文章站
2023-12-04 18:58:28
怎样才能将在表a取得的数据插入另一个表b中? (1)对于表a和表b两个表结构完全相同的话〔字段个数,相应字段的类型等等〕,可以使用 insert into b se...
怎样才能将在表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
);
(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
);