【问题标题】:Does BizTalk support sub-queries?BizTalk 是否支持子查询?
【发布时间】:2012-06-15 12:56:22
【问题描述】:

以下查询在 Oracle 中有效,但在 BizTalk 中无效。一个快速的谷歌告诉我,

"多个语句不适用于 Oracle(和其他数据库) 也可以防止这种情况)。 Oracle 阻止了所谓的 SQL 注入,黑客用来获取数据库的一种机制 在数据库中运行代码。”

这和子查询一样吗?是否可以在没有子查询的情况下编写此查询?

update order_header oh set uploaded = 'Y'
where oh.user_def_chk_3 = 'N' 
and oh.status in('Complete','Shipped') 
and oh.client_id in (select c.client_id from client c 
    where upper(c.notes) like 'BERGEN%');

【问题讨论】:

  • 不知道 biztalk,但是子查询和多个语句是不同的东西,所以这应该可以作为单个语句。但是...当您通过适配器运行它时,您是否保留了尾随的;? JDBC 不喜欢这样,它可能被 biztalk 解释为试图将两个语句连接在一起 - 所以我猜它是不需要的。否则,实际的错误消息会很有帮助。
  • @AlexPoole 哇,我不认为子查询意味着多个语句,但我从来没有想过使用 ;这意味着 BizTalk 认为有 2 个查询。删除分号解决了这个问题。

标签: sql oracle biztalk biztalk-2010


【解决方案1】:

(基于来自猜测评论的反馈):BizTalk 显然将结尾的 ; 解释为语句分隔符,因此它违反了多语句限制,即使它实际上只有一个。删除分号可以防止这种情况发生。

请参阅this answer 了解为什么它经常在 SQL*Plus 和 SQL Developer 等中使用的背景信息,即使对于单个语句也是如此。其他客户端和适配器的情况有所不同。

【讨论】:

    【解决方案2】:

    您可以将查询放在存储过程或视图中。 你没有说你是如何执行查询的。您使用的是 WCF 自定义适配器吗?

    【讨论】:

    • 由于数据库不是我们管理的,存储过程和视图随时都有被删除的风险。这使得这些不是我们的解决方案。我们确实使用了 WCF 自定义适配器。
    猜你喜欢
    • 1970-01-01
    • 2023-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多