Oracle SQL 开发人员中的有效查询在 SSIS 中无效

Posted

技术标签:

【中文标题】Oracle SQL 开发人员中的有效查询在 SSIS 中无效【英文标题】:Valid Query in Oracle SQL developer is invalid in SSIS 【发布时间】:2020-11-10 21:46:21 【问题描述】:

我的查询如下所示:

编辑(我几乎没有使用 PLSQL 的经验,如果您在脚本中使用 Begin/End,我刚刚读过一些帖子,您不再可以使用普通选择,您应该将该结果插入到某个地方!)可以这就是查询在 SSIS 中不起作用的原因吗? )

   Variable x1 Number
   Variable x2 Number
   Variable x3 Number




   Variable x20 Number


   Begin  select user_defined_function(parameters) into x1 from dual; 
    select user_defined_function(parameters) into x2 from dual; 
    select user_defined_function(parameters) into x3 from dual; 


    select user_defined_function(parameters) into x20 from dual; 

   End;
    / 

    with Q1 as (....) 
    , Q2 as (....)
    , Q3 as (...)

    Select * from Q1,Q2,Q3 joining together 

该查询在 SQL 开发人员中有效,但我必须使用执行脚本而不是 f5。否则会提示输入变量值。

正如我所怀疑的,当前格式的查询在 SSIS 中不起作用。我收到错误 INVALID SQL STATEMENT 900

【问题讨论】:

您打算在运行时提供变量值吗?通常使用 Oracle,我不得不求助于动态生成的 SQL 字符串。 @Nick.McDermaid 变量值应该通过选择语句用户定义的函数来检索。我不会输入任何内容 @Nick.McDermaid 这是否意味着我认为的意思?在各种 Oracle 连接管理器中缺乏对参数化查询的支持是 SSIS 中的一个不幸限制。 这四个Begin和唯一一个End之间的不平衡不是问题吗? @MarmiteBomber 感谢您接收它,我在这里修复了它。我的实际脚本没有这个问题 【参考方案1】:

您可以使用额外的 CTO 将 user_defined_function 的结果传递给主查询,例如

with  
x1 as (
   select user_defined_function(parameters) as x1 from dual), 
x2 as (
   select user_defined_function(parameters) as x2 from dual),  
...

在您的主查询中而不是使用

column1 = x1

你会写

column1 = (select x1 from x1)

这种方法消除了对变量和PL/SQL 的需要,并使用纯SQL

【讨论】:

是的,显然你不能在 SSIS 的 ODBC 连接中使用纯选择的 PLSQL 块 实际上,您使用的是VARIABLE 的SQL*Plus 语法,这不太确定。您可以尝试使用DECLARE 定义变量,该变量将是 PL/SQL

以上是关于Oracle SQL 开发人员中的有效查询在 SSIS 中无效的主要内容,如果未能解决你的问题,请参考以下文章

oracle 的问题 执行SQL查询语句 出现:部分多字节字符

用于 Oracle 开发人员/dba 的 SQL 服务器

在 Oracle SQL 开发人员中看不到过程/函数主体

查询在 JDBC 中使用时返回的行数少于 SQL 开发人员

oracle嵌套where查询

Oracle Dual 表详解