oracle - DBMS_WM 导出 Oracle DB 中的条件
问题描述
我的 Oracle 数据库中有一些版本化的表。
我需要根据某些条件将这些表从一个数据库导出到另一个数据库。
我使用了来自oracle-docs 的以下代码,
我需要基于 sql 在 Workspace 下导出。
/* LT table with join condition */
SELECT
H1.workspace , count(*)
FROM WMSYS.ALL_VERSION_HVIEW H1,
EMPLOYEE_LT M1,
DEPT_LT t1
WHERE H1.version=M1.wm_version
and t1.empid=M1.empid
and t1.deptid in (select d_id
from DEPT_LOC
where Location = 'NORWAY'
);
这是我的导出代码
execute dbms_wm.Export('EMPLOYEE','EMPLOYEE_STG','WS-27917', export_scope=>DBMS_WM.EXPORT_MODIFIED_DATA_ONLY,AUTO_COMMIT=>TRUE);
execute dbms_wm.Export('EMPLOYEE','EMPLOYEE_STG','WS-38904', export_scope=>DBMS_WM.EXPORT_MODIFIED_DATA_ONLY,AUTO_COMMIT=>TRUE);
execute dbms_wm.Export('EMPLOYEE','EMPLOYEE_STG','WS-39376', export_scope=>DBMS_WM.EXPORT_MODIFIED_DATA_ONLY,AUTO_COMMIT=>TRUE);
像上面一样,我对所有不同的工作区运行了相同的查询。这个查询的输出就像我将EMPLOYEE_STG
使用我在查询中传递的工作空间创建的一样。
但实时整个员工表已创建为EMPLOYEE_STG
包含所有记录的表
/* ONLY LT table */
SELECT
H1.workspace , count(*)
FROM WMSYS.ALL_VERSION_HVIEW H1 ,
EMPLOYEE_LT M1
WHERE H1.version=M1.wm_version
group by H1.workspace
;
/* STG table after dbms_wm.export() */
SELECT WM$WORKSPACE, count(*)
FROM EMPLOYEE_STG
group by WM$WORKSPACE;
现在我只需要那些由于上述 sql 而不是完整的 Employee 表的工作空间。但我dbms_wm.export
正在创建整张桌子。
在Oracle 文档中,我看到了类似where
条件的以下部分,但我不确定如何使用它。如何在.
_dbms_wm.export()
解决方案
最后我成功地创建了一个有条件的导出表。步骤不是直接的方法。实现这一点需要引用游标和记录类型变量。
set serveroutput on
DECLARE
TYPE r_cursor IS REF CURSOR;
c_object r_cursor;
TYPE rec_emp IS RECORD
(
v_ws WMSYS.ALL_VERSION_HVIEW.WORKSPACE%type,
v_empid EMPLOYEE_LT.empid%type
);
v_rec rec_emp;
v_exporttable VARCHAR2(100):='EMPLOYEE';
v_location VARCHAR2(100):='NORWAY';
v_cursor_SQL VARCHAR2(4000);
BEGIN
v_cursor_SQL := '
SELECT
DISTINCT H1.WORKSPACE, M1.empid
FROM WMSYS.ALL_VERSION_HVIEW H1,
'||v_exporttable||'_LT M1,
DEPT_LT t1
WHERE H1.version=M1.wm_version
and t1.empid=M1.empid
and t1.deptid in (select d_id from DEPT_LOC where Location = '||v_location||')';
-- dbms_output.put_line(v_cursor_SQL);
OPEN c_object FOR v_cursor_SQL;
LOOP
FETCH c_object INTO v_rec;
exit when c_object%NOTFOUND;
dbms_wm.Export(v_exporttable,v_exporttable||'_STG',v_rec.v_ws,where_clause=>'empid='||v_rec.v_empid,export_scope=>DBMS_WM.EXPORT_MODIFIED_DATA_ONLY,AUTO_COMMIT=>TRUE);
END LOOP;
CLOSE c_object;
END;
/
推荐阅读
- sql - 如何在不使用 group by 的情况下按日期聚合数据组?
- quarkus - 在 quarkus 中发送带有标头的 amqp 消息
- javascript - 当用户按下回车并且元素失去焦点时触发事件
- python - 我尝试使用函数 ynumpy.siftgeo_read 读取一些图像的 siftgeo,但出现错误 'yael' has no attribute 'BytePtrArray'
- mysql - 在 node.js 中选择具有相同名称的 2 列的查询
- java - Eclipse 可以为我生成的每个线程提供一个输出控制台吗?
- azure - 查找所有已停止或没有部署的云服务(经典)
- excel - Excel - 每 N 行的绝对公式
- c# - 为什么我们在这里没有死锁?
- python - 我怎样才能从数据框中只读取奇数列