DECLARE sp_send_dbmail PROCEDURE FOR sp_send_dbmail
@profile_name = :ls_Null,
@recipients = :ls_To,
@copy_recipients = :ls_Null,
@blind_copy_recipients = :ls_Null,
@subject = :ls_Null,
@body = :ls_Body,
@importance = :ls_Importance,
@rtn = :li_Rtn OUTPUT;
EXECUTE sp_send_dbmail;
答案 0 :(得分:0)
我不知道为什么不这样,调用存储过程传统上并不是PowerBuilder的问题 从我能看到的那个代码看起来很好。
执行检查SQLCA.SQLCode和SQLCA.SQLErrText以确定是否存在错误。你可以使用类似的东西:
if SQLCA.SQLCode <> 0 then
MessageBox("Error", "Error Code: " + String(SQLCA.SQLDBCode) + "~r~n" + &
"Error Message: " + SQLCA.SQLErrText)
end if
答案 1 :(得分:0)
在事务对象上声明本地外部函数。打开自定义事务对象,然后转到“本地外部函数”选项卡。
定义您的过程或package.procedure调用,例如以下几个示例:
// stored proc no package
SUBROUTINE SubRtnName(args) RPCFUNC
// function
long ll_rtn = FUNCTION FuncRtnVal(int li_arg) RPCFUNC
// standard proc with some in/out parameters
SUBROUTINE CalcAmount(string LS_In1, ref string LS_Out2) RPCFUNC
// package.procedure
SUBROUTINE SubRtnName(args) RPCFUNC ALIAS FOR "PackageName.ProcName"
// more complex package.procedure definition
SUBROUTINE CalcPenaltyAmt(string LS_In1, ref string LS_Out2[]) RPCFUNC ALIAS FOR "Penalty.P_Calc_Amount"
使用在子例程OR函数名称后定义的名称来调用代码中的过程:
// call standard proc
SQLCA.SubRtnName(parms);
// call package.procedure
SQLCA.CalcPenaltyAmt('stingarg', ref ls_ref_string_array);
这假设您定义了一个非可视事务对象,并将其设置为应用程序对象中的SQLCA。如果没有自定义事务对象,则无法定义此类外部函数。你完成的方法是创建一个标准的非可视类型事务,然后在自定义变量的应用程序对象中用你的n_tr_transaction替换SQLCA。