必须在Powerbuilder中声明标量变量错误

时间:2015-09-15 20:25:41

标签: sql-server powerbuilder

我在SQL Server 14上运行的PowerBuilder 9中遇到此错误“必须声明标量变量@return”。当我使用SQL管理工作室执行存储过程时,它会按预期返回10000。但是在从PowerBuilder调用此SP时,我遇到了错误。任何建议表示赞赏。感谢

Function in PowerBuilder code: 
 Declare sp_v procedure for
 @return = proc_v_sp
 @eid = :p_eid,
 @year = :p_year,
 @bid = :p_bid,
 @hid = :p_hid
 using sqlca;
 Execute sp_v;
 IF SQLCA.SQLCode <> 0 THEN
 lReturn = SQLCA.SQLCode
 ELSE
 FETCH sp_v INTO :lReturn;
 END IF
 CLOSE sp_v;

 In SQL SERVER SP:
 Alter procedure proc_v_sp
 @eid int,
 @year int,
 @bid varchar(8),
 @hid char(3)
  As 
    Begin
    Declare @count int,
    Declare..............
    ..........ignoring as it is long SP...........
    Select @count = count(*)
    from sy_e
    where sy_e_eid = @eid and sy_e_year= @year
    IF @count >0
    RETURN 20000
    ELSE 
      RETURN 10000
    END

3 个答案:

答案 0 :(得分:0)

查看文档,我没有看到有关如何从执行的存储过程中获取RETURN值的任何信息。该文档列出了PB中SP声明的语法为...

DECLARE logical_procedure_name PROCEDURE FOR
    SQL_Server_procedure_name
    @Param1 = value1, @Param2 = value2, 
    @Param3 = value3 OUTPUT,
    {USING transaction_object} ;

这就是为什么你得到语法错误。它只是不期待@return。如果您可以更改存储过程,那么您应该能够使用OUTPUT参数。经过一段谷歌搜索后,看起来你仍然需要在EXECUTE之后使用FETCH来获取为填充的输出参数指定的变量。

我回到这里,一旦我在我面前有PB,因为我很好奇是否有可能。经过一些实验并查看了RETURN的MSDN文档后,我能够使用下面的代码获取returnValue变量中填充的返回值。

long returnValue
DECLARE sp_test PROCEDURE FOR
    @return_status = sp_test_return
USING SQLCA;

EXECUTE sp_test;
FETCH sp_test INTO :returnValue;

这是存储过程。

CREATE PROCEDURE [dbo].[sp_test_return]
AS
    RETURN 159
GO

答案 1 :(得分:0)

你太过刻苦了......

将RETURN更改为SELECT,并使用存储过程数据窗口。然后,您可以删除所有代码,并将其替换为一行。

dw.retrieve(args)

你的返回值是dw.getItemNumber(1,&#34; return_status&#34;)

-Paul -

答案 2 :(得分:0)

我没有示例代码 但它非常简单......您的SP需要返回结果集而不是返回值 - 即使该结果集是单行上的单个值。

将RETURN更改为SELECT。返回结果集。

现在,创建一个数据窗口并选择存储过程作为数据源。然后选择你的sp作为源。通过提供参数值并查看它是否返回您正在查找的结果来测试它。

从这里开始,它只是PB代码。

datastore myDW  
myDW = create datastore  
myDW.setTransObject( SQLCA )  
myDW.retrieve( args... )  
theResult = myDW.getItemNumber( 1, "return_status" )