Oracle数据库中获取数据的存储过程示例

日期: 2008-08-06 作者:晨曦 来源:TechTarget中国 英文

怎样才能将在表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语句


&#101xecute immediate insert_STRING;


–提交事务


commit;


——–例外处理部分——————————————————-


EXCEPTION


–异常的抛出


WHEN OTHERS THEN


–DBMS_OUTPUT.PUT_LINE(’处理过程中出错,程序退出,未执行相关内务’);


rollback;


END SRBZ_GET_SRBZ_KD_GSVPDN_FREE;


/

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

作者

晨曦
晨曦

相关推荐