IBM ACE - 调用 Oracle 过程返回一个行类型(通过 ESQL 计算节点)

Posted

技术标签:

【中文标题】IBM ACE - 调用 Oracle 过程返回一个行类型(通过 ESQL 计算节点)【英文标题】:IBM ACE - Calling Oracle Procedure returning a rowtype (via ESQL compute node) 【发布时间】:2021-03-12 00:40:02 【问题描述】:

我正在尝试调用存储在 plsql 中的过程。这是我迄今为止尝试过的。

在甲骨文中:

create or replace PROCEDURE dbSwapParms  
( in_param IN VARCHAR2, 
  out_param OUT varchar2, 
  inout_param IN OUT customer%ROWTYPE) 
AS 
BEGIN
  select * 
  into inout_param 
  from SYS_ENDPOINTS  where customer_name=in_param; -- assuming this query returns single row
END;

在计算节点中:

-- Definition of procedure  
CREATE PROCEDURE swapParms ( 
      IN parm1 CHARACTER, 
      OUT parm2 CHARACTER 
    )
    LANGUAGE DATABASE  
    DYNAMIC RESULT SETS 1 
    EXTERNAL NAME dbSwapParms;

-- 调用过程

CALL swapParms( inputParm, outputParm, OutputRoot.JSON.Data.test[]); -- found this in ibm documentation returning result set

这是错误:

BIP2230E: Error detected whilst processing a message in node 'gen.CB_testBar.postHelloWorld (Implementation).Compute4'. 
BIP2488E: ('.postHelloWorld_Compute4.Main', '19.4') Error detected whilst executing the SQL statement ''CALL swapParms(inputParm, outputParm, OutputRoot.JSON.Data.test[]);''. 
BIP2934E: Error detected whilst executing the function or procedure ''swapParms''. 
BIP2321E: Database error: ODBC return code '-1' using ODBC driver manager ''odbc32.dll''. 
BIP2322E: Database error: SQL State ''HY000''; Native Error Code '0'; Error Text ''[IBM][ODBC Oracle Wire Protocol driver]SQL type not supported: 0''.

我不确定我是否正确地表示了 oracle 过程。

【问题讨论】:

1) 是否可以通过IBM ACE 使用计算节点或数据库节点正常连接到数据库。 (2)另外,你有没有在你的esql中定义的语句。例如。创建过程 myProc3(IN p1 CHAR) 语言数据库外部名称 "mySchema.myPackage.myProc"; (3)您能否使用IBM ACE以外的其他客户端独立调用存储过程,以确保您的存储过程正常工作。 您的格式不正确。我已经编辑了这个问题。请点击“编辑”按钮查看我做了什么(显然是在编辑被批准后) 嗨 Rohan,是的,我已连接到数据库(使用简单查询进行了测试)。另外,我已经测试了plsql。我唯一不确定的是oracle中的过程到esql的表示。 【参考方案1】:

我通过使用 plsql 函数而不是过程使其工作。该函数将 ref cursor 作为结果集返回。然后,应用了调用过程返回结果集的ibm文档。

【讨论】:

以上是关于IBM ACE - 调用 Oracle 过程返回一个行类型(通过 ESQL 计算节点)的主要内容,如果未能解决你的问题,请参考以下文章

IBM Worklight - 如何使用“OUT”参数调用存储过程?

Oracle如何创建存储过程和如何调用存储过程

如何使用自定义 IN 参数在 IBM Worklight SQL 适配器中调用存储过程

c#调用oracle存储过程,返回2个值

如何调用返回引用游标的Oracle存储过程

做一个,记一篇 — Java调用Oracle存储过程