【问题标题】:Execute Oracle Function from SSIS OLE DB Command从 SSIS OLE DB 命令执行 Oracle 函数
【发布时间】:2014-01-24 10:35:27
【问题描述】:

我正在尝试使用 SSIS 的 OLE DB 命令从 oracle 调用函数,我已正确设置连接,但我认为调用该函数的语法不正确?

EXEC UPDATE_PERSON ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? output

我已经在一个 SQL 存储过程中使用它进行测试并且它已经工作了。口头连接是第 3 方,他们刚刚提供了函数名称和预期参数。我应该得到 1 个返回参数。

错误:

Error at Data Flow Task [OLE DB Command [3013]]: SSIS Error Code DTS_E_OLEDBERROR. AN OLE DB error has occurred. Error code 0x80040e14.
An OLE DB record is available. Source: "Microsoft OLE DB Provider for Oracle" Hresult: 0x80040E14
Description: "ORA-00900: invalid SQL statement".

【问题讨论】:

  • 你调用的是函数还是存储过程?
  • 我在 oracle 中调用一个函数

标签: sql oracle ssis sqlcommand oledbcommand


【解决方案1】:

在您的语法中,您必须将命令“EXCU”更改为“EXEC”。

EXEC UPDATE_PERSON ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?输出 我不得不提一下,不需要 { }

除此之外,您还必须通过指定 [databaseName].[dbo] 来了解您正在执行的 SP 的完整路径。如果需要

问候, 圣安杜拉

【讨论】:

  • 我在使用 EXEC 时打错字了。我没有使用 SP,我使用的是 oracle 函数?
  • 好吧,就目前 OLE DB 命令旨在执行 sql 命令或包装一组 sql 查询的存储过程而言,您是否想过改变调用方法的方式,而使用 SP ?我可以理解 SP 在从您的数据库“尝试使用 SELECT 语句调用它”中检索行集方面的性能较低。但是如果你想在你的包中使用 OLE DB 命令,你必须检查后面提出的解决方案。问候,S.ANDOURA
  • 谢谢 Ando,我无法更改为 SP,因为我正在使用他们现有的功能连接到第 3 方。但谢谢。我想我已经差不多了,只是现在有几个错误的数据类型参数问题需要解决。
  • 好消息! gdluck 理查德!
【解决方案2】:

尝试用花括号括起来:

{EXEC UPDATE_PERSON ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? output}

我不认为 Oracle 函数有输出参数 - 你绝对确定这是一个函数而不是一个过程吗?函数通常也不执行更新。

【讨论】:

  • 谢谢我的工作看起来像这样:SELECT crm_customer.UPDATE_PERSON(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) FROM dual
【解决方案3】:

语法:

SELECT crm_customer.UPDATE_PERSON( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) FROM dual

解决方案完成后,我将更新更多详细信息

感谢您的帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多