异构Oracle到SQL Server:使用" IS NULL"在Update语句的Where子句中

时间:2015-03-20 16:45:02

标签: sql-server oracle plsql oracle11g heterogeneous-services

我在使用ODBC异构连接通过Oracle数据库(11.2.0.4)在SQL Server 2000数据库上执行的Update语句中使用IS NULL条件时遇到问题。

无效的更新语句示例。

UPDATE TABLENAME@RemoteSQLServer2000
  SET "ColumnName" = 'SomeValue'
WHERE "AnotherColumnName" IS NULL;

结果:

  

ORA-02070:数据库RemoteSQLServer2000在此上下文中不支持IS NULL

但是,以下声明可以正常工作:

SELECT *
  FROM TABLENAME@RemoteSQLServer2000
 WHERE "AnotherColumnName" IS NULL;

有没有人知道我能做些什么来使这项工作?提前致谢。如果您需要更多信息,请告诉我。

2 个答案:

答案 0 :(得分:1)

感谢@MickMnemonic和另一位顾问,我们找到了解决方案。

Oracle有一个包,允许您从应用程序执行SQL到SQL Server数据库。此函数将允许您成功执行类似于您在过滤NULL值的问题中提到的语句。 Oracle Documentation for DBMS_HS_PASSTHROUGH

以下是有效的新代码示例。

DECLARE
   num_rows   INTEGER;
BEGIN
   num_rows :=
      DBMS_HS_PASSTHROUGH.EXECUTE_IMMEDIATE@RemoteSQLServer2000 (
         'UPDATE TABLENAME SET "ColumnName" = ''SomeValue'' WHERE AnotherColumnName IS NULL');
END;
/

答案 1 :(得分:0)

在where子句中尝试此操作,而不是在AnotherColumnName为null的位置

其中AnotherColumnName || 'x'='x'