>假设我在生产数据库中有 2 个表,TABLE_A
和TABLE_B
,它们的主键分别是A_ID
和B_ID
。
我想使用exp
命令将一行从TABLE_A
和TABLE_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_A
和TABLE_B
行。
更新
(根据建议将更新移至答案@Alex(
多亏@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)"
如果您使用的是旧的导出(exp(,则不,您需要为每个表执行单独的导出。
如果您使用的是数据泵 (expdp(,那么是的,您可以指定多个 QUERY 子句并指定每个子句也适用的表。
来源:预言机中的多表导出
试试这个
expdp system/xxxxxx tables=TABLE_A query=\"WHERE A_ID = 1001\">