问题描述
我的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','WS-38904','WS-39376',AUTO_COMMIT=>TRUE);
像上面一样,我对所有不同的工作区运行了相同的查询。
该查询的输出就像我将使用在查询中传递的工作区创建EMPLOYEE_STG
一样。
但实际上,整个Employee表已创建为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-docs中,我看到了下面类似where
的条件,但是我不确定如何使用它。如何使用dbms_wm.export()
中的子查询。
解决方法
最后,我成功地创建了一个有条件的导出表。步骤不是直接方式。 为此,需要使用Ref游标和记录类型变量。
--scopes=SCOPE