【问题标题】:I have an Oracle stored procedure with one IN argument and one OUT argument . I need to call it from PowerBuilder我有一个带有一个 IN 参数和一个 OUT 参数的 Oracle 存储过程。我需要从 PowerBuilder 调用它
【发布时间】:2020-09-25 10:52:10
【问题描述】:

Oracle 存储过程:

create or replace PROCEDURE spu_edt_object3(
o_in VARCHAR,
o_id_object OUT VARCHAR
) as
begin
o_id_object := 'Hello World';
end;

Powerbuilder 代码:

string o_message, param, st,o_id_object
o_message= 'HIiiiiii'
DECLARE proc_update PROCEDURE FOR  spu_edt_object3
@a_in => :o_message,
@a_id_object = :o_id_object OUTPUT

USING SQLCA;

EXECUTE proc_update;

if SQLCA.SqlCode <> 0 then
     MessageBox("SQL error " + String(SQLCA.SQLDBCode),   SQLCA.SQLErrText )
RETURN -1
end if

FETCH proc_update INTO :o_id_object;

if SQLCA.SqlCode <> 0 then
     MessageBox("SQL error " + String(SQLCA.SQLDBCode),   SQLCA.SQLErrText )
RETURN -1
end if

我收到此错误:

ORA-06550:第 1 行,第 15 列:
PLS-00306:调用“SPU_EDT_OBJECT3”时参数的数量或类型错误

ORA-06550:第 1 行,第 15 列:
PL/SQL:语句被忽略

【问题讨论】:

  • 您是否尝试过将 PB 中的参数命名为与存储过程中的参数相同? (即“o_in”而不是“a_in”)

标签: powerbuilder


【解决方案1】:

尝试在您的事务对象上将其声明为本地外部函数,如下所示:

subroutine spu_edt_object3 (string a_in, ref long a_id_object) rpcfunc alias for "spu_edt_object3"

注意声明中的“ref”关键字表明这是一个引用类型的变量。

那你就可以这样称呼它了:

long  ll_Out // I have assumed that this is a number
string ls_In

SQLCA.spu_edt_object3(ls_In, ll_Out)

【讨论】:

    猜你喜欢
    • 2015-01-07
    • 2017-04-29
    • 2013-11-02
    • 2010-10-26
    • 2014-01-15
    • 1970-01-01
    • 2015-11-20
    • 2012-04-18
    • 2012-06-23
    相关资源
    最近更新 更多