2017-08-05 94 views
0

假设我在生产数据库中有两个表,TABLE_ATABLE_B,他们的主键分别是A_IDB_IDOracle exp,多个查询导出

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

TABLE_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/[email protected] tables=me.TABLE_A,me.TABLE_B query=\"WHERE A_ID=1001\" 

我试图

exp userid=me/[email protected] 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建议更新到答案)

+1

如果您找到了自己的解决方案,请将其作为答案发布,而不是作为问题的一部分。 (如果您有后续问题,请提出一个新问题。) –

回答

1

如果您在使用旧的出口(EXP)则没有,你需要做为每个表单独导出。

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

来源:Multiple table export in oracle

+0

非常感谢,我根据您的建议更新了我的问题。但是我有一个新问题:在整个数据库中,ROWID是否是唯一的?我很感激你能否知道答案^^。 – asinkxcoswt

2

感谢@mehmet建议,我放弃了直接的解决方案,并开始寻找一个解决方案。 (我不能用expdp,因为我没有访问数据库服务器。

我创建一个表EXP_ROW_ID如下

CREATE TABLE EXP_ROW_ID (ROW_ID VARCHAR(20)); 

然后我把ROWID我想从2导出行表

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/[email protected] tables=me.TABLE_A,me.TABLE_B query=\"WHERE ROWID IN (SELECT T.ROW_ID FROM EXP_ROW_ID T)\" 
+2

聪明的回答。不幸的是,对于大型桌子来说是不切实际的 – miracle173