站点信息 访问统计:442671     在线人数:2    本次启动时间:2010-9-11 6:29:47
当前位置:  Csdtn 首页->数据库->Oracle->文章
※ 友情连接 ※
Oracle数据库中获取数据的存储过程示例
作者:--- 时间:2009-3-1  点击:153  本文Tag:数据库 | Oracle | 存储过程

从一个表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功能:

 

SQL代码
  1. CREATE OR REPLACE PROCEDURE GET_DATA(    
  2.   
  3. -- 参数列表:    
  4.   
  5. n_task_id IN number, --任务编号    
  6.   
  7. v_task_name IN varchar2, --任务名称    
  8.   
  9. v_name IN varchar2 -- 名称    
  10.   
  11. )    
  12.   
  13. -----------------------------------------------    
  14.   
  15. -- PROCEDURE名 :GET_DATA --    
  16.   
  17. -- 処理内容 :从数据源表取得符合条件的的数据插入到目标数据表: --    
  18.   
  19. -- 引数 :n_tas_id 任务ID, --    
  20.   
  21. -- v_task_namek 任务名称, --    
  22.   
  23. -- v_bdw_name 对数据源表限制条件:本地网名称 --    
  24.   
  25. -----------------------------------------------    
  26.   
  27. IS    
  28.   
  29. --插入行数控制    
  30.   
  31. i_count number(5);    
  32.   
  33. --取数据游标:DATA_CUR(IN_NAME)    
  34.   
  35. --参数:本地网名称:IN_NAME    
  36.   
  37. CURSOR DATA_CUR(IN_NAME VARCHAR2) IS /**注意:参数的定义中不带精度**/    
  38.   
  39. SELECT *    
  40.   
  41. FROM GET_DATA_SRC A    
  42.   
  43. WHERE A.NAME = IN_NAME;    
  44.   
  45. BEGIN    
  46.   
  47. --计数器,控制插入行数    
  48.   
  49. i_count := 0;    
  50.   
  51. --循环插入数据    
  52.   
  53. FOR MYCUR IN DATA_CUR(v_name) LOOP    
  54.   
  55. INSERT INTO ABC(    
  56.   
  57. ROW_ID,    
  58.   
  59. TASK_ID,    
  60.   
  61. TASK_NAME,    
  62.   
  63. GET_DATA_DT,    
  64.   
  65. CUST_ID,    
  66.   
  67. ASSIGN_FLAG,    
  68.   
  69. DEAL_DATE    
  70.   
  71. )VALUES(    
  72.   
  73. SEQ_KD.NEXTVAL,    
  74.   
  75. N_TASK_ID,    
  76.   
  77. V_TASK_NAME,    
  78.   
  79. SYSDATE,    
  80.   
  81. MYCUR.CUST_ID,    
  82.   
  83. 'N',    
  84.   
  85. NULL    
  86.   
  87. );    
  88.   
  89. --程序试用阶段,以后会删除satrt    
  90.   
  91. i_count := i_count + 1;    
  92.   
  93. IF i_count >100 THEN    
  94.   
  95. COMMIT;    
  96.   
  97. RETURN;    
  98.   
  99. END IF;    
  100.   
  101. --程序试用阶段,以后会删除end    
  102.   
  103. END LOOP;    
  104.   
  105. --数据commit,程序调试阶段避免大量数据,暂时关闭    
  106.   
  107. --commit;    
  108.   
  109. --------例外处理部分----------------------------    
  110.   
  111. EXCEPTION    
  112.   
  113. WHEN OTHERS THEN    
  114.   
  115. rollback;    
  116.   
  117. END SRBZ_GET_SRBZ_KD_SPEED;    
  118.   
  119. /   
Google