String变量返回一个空值

时间:2014-01-10 02:10:33

标签: powerbuilder

下面是一个基本上创建参考号的PB函数脚本。此脚本在生产环境中工作,但有时字符串变量(ls_ivno)返回一个空值,我怀疑在此过程中会发生死锁。

寻求帮助以追踪此脚本中可能存在的问题。

String ls_branch, ls_gcode1, ls_ivprint, ls_ivno, ls_keyname
long ll_kcount

Select remarks11, remarks12, remarks13
Into :ls_branch, :ls_gcode1, :ls_ivprint
From ordersext
Where orderkey = :arg_orderkey;

ls_branch = trim(ls_branch)
ls_gcode1 = trim(ls_gcode1)
ls_ivprint = trim(ls_ivprint)

choose case ls_ivprint
    case 'SIV' //format1
        ls_ivno =  ls_branch + right(string(today(),"YY"),1) + "U" + ls_gcode1
    case 'IIV' //format2
        ls_ivno =  ls_branch + "Q" + string(today(),"YY") 
   case else  //blank
        ls_ivno = ' '
end choose

if ls_ivno <> ' ' then
        if ls_ivprint = 'SIV' THEN
            declare ncounter_invprn cursor for
            select keyname, keycount
            from ncounter
            where filler01 = 'invprn'
            order by keyname;

            open ncounter_invprn;
                fetch ncounter_invprn into :ls_keyname, :ll_kcount;
                do while sqlca.sqlcode = 0
                    setpointer(hourglass!)  
                    if ll_kcount <> 9999 then
                        ls_ivno += right(trim(ls_keyname),1) + f_get_ncounter(ls_keyname, 4)
                        close ncounter_invprn;
                    end if  
                fetch ncounter_invprn into :ls_keyname, :ll_kcount;
                loop
            close ncounter_invprn ;

        ELSE //IIV
            declare ncounter_invprn_iiv cursor for
            select keyname, keycount
            from ncounter
            where filler01 = 'invprn_iiv'
            order by keyname;

            open ncounter_invprn_iiv;
                fetch ncounter_invprn_iiv into :ls_keyname, :ll_kcount;
                do while sqlca.sqlcode = 0
                    setpointer(hourglass!)  
                    if ll_kcount <> 9999 then
                        ls_ivno += right(trim(ls_keyname),1) + f_get_ncounter(ls_keyname, 4)
                        close ncounter_invprn_iiv;
                    end if  
                fetch ncounter_invprn_iiv into :ls_keyname, :ll_kcount;
                loop
            close ncounter_invprn_iiv;

        END IF
end if      

return ls_ivno

2 个答案:

答案 0 :(得分:0)

他返回的字符串实际上是空的,或者是你在“你选择你的盒子ls_ivprint”期间放入ls_ivno的单个空格的字符串。

数据库中remarks13对于空回行的行是什么值?

您可以在查询结尾处添加“with ur”。这可以防止您进行表锁定。 但问题似乎不在这里,如果表被锁定,你不能超越查询。在这种情况下,您的申请只是冻结。

答案 1 :(得分:0)

您应该尝试使用isnull(ls_ivno)检查值是否为空而不是空。

空值表示您从数据库中选择的值获得空值。

请注意,如果任何术语为null,则null将始终覆盖赋值或连接。如果任何参数为空且未使用if正确处理,则isnull()测试将始终失败。在某种程度上,null值具有传染性。