Oracle exp,导出多个查询

Oracle exp, export with multiple queries

假设我在生产数据库中有 2 个表,TABLE_ATABLE_B,它们的主键分别是 A_IDB_ID

我想使用 exp 命令将 TABLE_ATABLE_B 中的一行导出到转储文件。我要的数据是以下2个查询的结果。

TABLE_A

SELECT * FROM TABLE_A WHERE A_ID = 1001;

TABLE_B

SELECT * FROM TABLE_B WHERE B_ID = 9999;

我四处搜索,只发现以下语法很接近但仍然不是我想要的,因为 TABLE_B 没有列 A_ID

exp userid=me/mypass@dbname tables=me.TABLE_A,me.TABLE_B query=\"WHERE A_ID=1001\"

我试过了

exp userid=me/mypass@dbname tables=me.TABLE_A,me.TABLE_B query=me.TABLE_A:\"WHERE A_ID=1001\",me.TABLE_B:\"WHERE B_ID=9999\"

但是没有用,只是出现以下错误

LRM-00112: multiple values not allowed for parameter 'query'

请帮助建议如何在同一个转储文件中从 TABLE_ATABLE_B 导出一行。


更新

(根据@Alex的建议将更新移至答案)

如果您使用旧的导出 (exp),则不,您需要为每个 table 执行单独的导出。

如果您正在使用数据泵 (expdp),那么是的,您可以指定多个 QUERY 子句并指定每个 table 也适用。

来源:Multiple table export in oracle

感谢@mehmet 的建议,我放弃了直接的解决方案并开始寻找变通解决方案。 (我无法使用 expdp,因为我无权访问数据库服务器。

我创建一个tableEXP_ROW_ID如下

CREATE TABLE EXP_ROW_ID (ROW_ID VARCHAR(20));

然后我把我想从 2 tables

中导出的行的 ROWID
INSERT INTO EXP_ROW_ID SELECT ROWID FROM TABLE_A WHERE A_ID = 1001;
INSERT INTO EXP_ROW_ID SELECT ROWID FROM TABLE_B WHERE B_ID = 9999;

然后我使用以下命令导出转储

exp userid=me/mypass@dbname tables=me.TABLE_A,me.TABLE_B query=\"WHERE ROWID IN (SELECT T.ROW_ID FROM EXP_ROW_ID T)\"

试试这个

expdp system/xxxxxx 表=TABLE_A 查询=\"WHERE A_ID = 1001\"