| 订阅 | 在线投稿
分享
 
 
当前位置: 王朝网络 >> oracle >> Oracle数据库中获取数据的存储过程示例
 

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

2008-08-06 07:16:30 编辑來源:互联网 繁體版 评论
 
 
  >>从一个表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;

  /
 
 
 
 
上一篇《从DBA到Oracle Applications DBA的转变过程》
下一篇《Oracle DBMS_JOB:每隔特定时间执行特定任务》
 
 
 
 
 
 
 
 
 
日版宠物情人插曲《Winding Road》歌词

日版宠物情人2017的插曲,很带节奏感,日语的,女生唱的。 最后听见是在第8集的时候女主手割伤了,然后男主用嘴帮她吸了一下,插曲就出来了。 歌手:Def...

兄弟共妻,我成了他们夜里的美食

老钟家的两个儿子很特别,就是跟其他的人不太一样,魔一般的执着。兄弟俩都到了要结婚的年龄了,不管自家老爹怎么磨破嘴皮子,兄弟俩说不娶就不娶,老父母为兄弟两操碎了心...

如何磨出破洞牛仔裤?牛仔裤怎么剪破洞?

把牛仔裤磨出有线的破洞 1、具体工具就是磨脚石,下面垫一个硬物,然后用磨脚石一直磨一直磨,到把那块磨薄了,用手撕开就好了。出来的洞啊很自然的。需要猫须的话调几...

我就是扫描下图得到了敬业福和爱国福

先来看下敬业福和爱国福 今年春节,支付宝再次推出了“五福红包”活动,表示要“把欠大家的敬业福都还给大家”。 今天该活动正式启动,和去年一样,需要收集“五福”...

冰箱异味产生的原因和臭味去除的方法

有时候我们打开冰箱就会闻到一股异味,冰箱里的这种异味是因为一些物质发出的气味的混合体,闻起来让人恶心。 产生这些异味的主要原因有以下几点。 1、很多人有这种习...

 
 
 
>>从一个表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; /
󰈣󰈤
 
 
 
  免责声明:本文仅代表作者个人观点,与王朝网络无关。王朝网络登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
越来越漂亮的楚楚(7)
越来越漂亮的楚楚(6)
越来越漂亮的楚楚(5)
越来越漂亮的楚楚(4)
共长一色
水中莲
峰林晚照
远离喧嚣——山村小景
 
>>返回首页<<
 为你推荐
 
 
 转载本文
 UBB代码 HTML代码
复制到剪贴板...
 
 热帖排行
 
 
 
 
©2005- 王朝网络 版权所有