希望一切顺利。我有一个SQL表服务器数据库中有大约491,000个唯一记录的表。我需要针对Oracle数据库中的另一个表运行这些记录。我在Oracle中遇到的问题是它可以一次过滤1000条记录。这是查询及其错误:
SELECT *
FROM TABLE1
WHERE ID IN(A LIST OF 1001 RECORDS)
[错误]脚本行:1-4 -------------------------- ORA-01795:列表中的最大表达式数为1000 脚本第3行,第3行,第11017行
我可以使用以下查询来运行几千条记录,但不知道如何使用491000条记录。
SELECT ID
FROM TABLE2
WHERE ( ID IN(LIST OF 1000 RECORDS)
OR ID IN(LIST OF ANOTHER 1000 RECORDS)
OR ID IN(LIST OF ANOTHER 1000 RECORDS)
OR ID IN(LIST OF ANOTHER 1000 RECORDS))
有人能帮我解决这个问题吗?
非常感谢
忘了提一下,我没有在Oracle数据库中创建表的权限。
答案 0 :(得分:1)
修改强>
由于您无法在Oracle数据库中创建表,您是否考虑过使用链接服务器直接从SQL Server表加入Oracle表?
How to set up and troubleshoot a linked server to an Oracle database in SQL Server
您可以使用类似于:
的代码创建链接服务器-- Adding linked server (from SQL Server Books Online):
/* sp_addlinkedserver [@server =] 'server'
[, [@srvproduct =] 'product_name']
[, [@provider =] 'provider_name']
[, [@datasrc =] 'data_source']
[, [@location =] 'location'] [, [@provstr =] 'provider_string']
[, [@catalog =] 'catalog']
*/
EXEC sp_addlinkedserver 'Ora817Link', 'Oracle', 'MSDAORA', 'oracle817'
-- Adding linked server login:
/* sp_addlinkedsrvlogin [@rmtsrvname =] 'rmtsrvname'
[,[@useself =] 'useself']
[,[@locallogin =] 'locallogin']
[,[@rmtuser =] 'rmtuser']
[,[@rmtpassword =] 'rmtpassword']
*/
EXEC sp_addlinkedsrvlogin 'Ora817Link', 'FALSE',NULL, 'scott', 'tiger'
然后,这将允许您在驻留在两个不同服务器上的两个表之间执行简单的join
:
SELECT ot.ID
FROM
YourOracleServer...OracleTable ot
JOIN SQLServerTable st ON ot.ID = st.ID
答案 1 :(得分:0)
正如@Aprillion提到的那样,通常会有一种模式与ID相关。
假设您有名称为'Bob'的ID,请执行以下操作:
SELECT *
FROM TABLE1
WHERE name = 'Bob'
如果name在另一个表中,请使用子查询:
SELECT *
FROM TABLE1
WHERE ID IN (SELECT ID FROM TABLE2 WHERE name = 'Bob');
或加入:
SELECT TABLE1.*
FROM TABLE1 INNER JOIN TABLE2 ON TABLE1.ID=TABLE2.ID
WHERE name = 'Bob';