0

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

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

表_A

SELECT * FROM TABLE_A WHERE A_ID = 1001;

表_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_A一行TABLE_B


更新

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

4

3 回答 3

2

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

我创建一个表EXP_ROW_ID如下

CREATE TABLE EXP_ROW_ID (ROW_ID VARCHAR(20));

然后我把我想从 2 个表中导出的行的 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)\"
于 2017-08-05T22:10:15.103 回答
1

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

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

来源:oracle中的多表导出

于 2017-08-05T15:30:28.253 回答
0

尝试这个

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

于 2020-07-07T09:42:45.530 回答