当前位置: 首页 > 图文教程 > 数据库 > Oracle > 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功能:
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; / |
评论 (0) All