Oracle exp,导出多个查询
Oracle exp, export with multiple queries
假设我在生产数据库中有 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的建议将更新移至答案)
如果您使用旧的导出 (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\"
假设我在生产数据库中有 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的建议将更新移至答案)
如果您使用旧的导出 (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
中导出的行的 ROWIDINSERT 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\"