网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>数据库技术>>Oracle技术>>Oracle开发>查看文档  
  oracle数据库中获取数据的存储过程示例     
  文章作者:未知  文章来源:赛迪网技术社区  
  查看:35次  录入:管理员--2008-08-05  
 

【赛迪网-it技术报道】>>从一个表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;

 
 
上一篇: oracle数据库10gr2中stream多源复制方法    下一篇: oracle dbms_job:每隔特定时间执行特定任务
  相关文档
个人经验总结:在oracle中恢复被drop掉的表 08-07
解析:用dbv和rman检查数据文件中的坏块 11-15
快速解决oracle数据库10g导出错误6550 04-18
数据库迁移过程中使用热备份进行分时恢复 (1) 05-14
windows平台下"one-of-patch"的安装方法 03-05
oracle 10g schedule job的常用操作 05-13
如何使用new_value将查询结果传递给变量 04-10
解析Oracle数据库内在索引和参数的调整 09-01
Oracle webserver中文介绍 08-05
相关的技术培训(oracle) 01-15
windows环境下oracle监听服务启动的问题 07-15
讲解linux环境下oracle的自动启动与停止 03-31
教你轻松掌握Oracle数据库中的物理结构 09-29
用三个方法设置oracle数据库穿越防火墙 04-17
解析:oracle热备期间过量redo生成控制 11-15
实例讲解分区表的可用性及相关错误案例 (1) 03-31
解析:教你快速的掌握em乱码的解决方法 11-15
Oracle数据库的空间管理技巧 01-15
单机创建物理Oracle9istandby数据库 05-13
数据变更日志记录表及触发器的自动生成脚本 03-04
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
厦门(总部):13616026886 福州:0591-87655121
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息