Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Stored procedures 未通过存储过程获取输出_Stored Procedures_Informix - Fatal编程技术网

Stored procedures 未通过存储过程获取输出

Stored procedures 未通过存储过程获取输出,stored-procedures,informix,Stored Procedures,Informix,我编写了一个存储过程来从表中检索数据集 表中的数据对于给定给存储过程的输入是可用的,但它不返回任何内容 下面是我的存储过程 CREATE PROCEDURE admin_lookup_qry (p_apn char(10), p_cbsa_code integer) RETURNING varchar(50); --Client Number 526586 --Client Name Direct Connect Inc. --Client Abbrev dir

我编写了一个存储过程来从表中检索数据集

表中的数据对于给定给存储过程的输入是可用的,但它不返回任何内容

下面是我的存储过程

CREATE PROCEDURE  admin_lookup_qry (p_apn char(10), p_cbsa_code integer)
    RETURNING varchar(50);
    --Client Number 526586
    --Client Name Direct Connect Inc.
    --Client Abbrev dircon
    --Tables admin_lookup

        DEFINE ringto_num char(10);         
        DEFINE overflow_flag char(3);
        DEFINE overflow_ring_to_num char(10);
        DEFINE num_rings_overflow integer;
        DEFINE cnt_ringto_num integer;
        DEFINE return_string char(50);
        DEFINE sql_err integer;
        DEFINE isam_err integer;        

        -- Begin Error Handling
        ON EXCEPTION SET sql_err, isam_err
             LET return_string = 'ERROR'||','||sql_err||','||isam_err;
             RETURN  return_string;
        END EXCEPTION

        SET DEBUG FILE TO '/tmp/trace/admin_lookup_qry.trace';
        TRACE ON;   
        -- Initialize Variables
        LET return_string = "NONE";
        LET cnt_ringto_num = 0;
        LET ringto_num = " ";
        LET overflow_flag = " ";
        LET num_rings_overflow = 0;
        LET overflow_ring_to_num = " ";

           SELECT count(ringto_number)
           INTO cnt_ringto_num
           FROM admin_lookup
           WHERE apn = p_apn
           AND cbsa_code = p_cbsa_code;            

           IF cnt_ringto_num > 0 THEN
            SELECT ringto_number, overflow_busy_flag, no_of_rings_to_overflow,overflow_ringto_number
            INTO ringto_num, overflow_flag,num_rings_overflow,overflow_ring_to_num
            FROM admin_lookup
            WHERE apn = p_apn
            AND cbsa_code = p_cbsa_code;        

            LET return_string = 'OK'||','||ringto_num||','||TRIM(overflow_flag)||','||num_rings_overflow||','||overflow_ring_to_num;
            RETURN return_string;
           ELSE
              RETURN return_string;
           END IF;          

    END PROCEDURE;
下表是模式

create table admin_lookup
     (
       toll_free_number char(10),
       apn char(10),
       client_number integer,
       cbsa_code char(6),
       ringto_number char(10),
       overflow_busy_flag char(3),
       no_of_rings_to_overflow smallint,
       overflow_ringto_number char(10),
       primary key (apn,cbsa_code)
      );
这是样本数据

toll_free_number    8885337800
apn                 8117472815
client_number       10015
cbsa_code           36540
ringto_number       4022096303
overflow_busy_flag  No
no_of_rings_to_ov+
overflow_ringto_n+

当我传递有效的apn和cbsa_代码作为输入时,它返回为检索到的1行,但屏幕上没有显示任何数据。但是,如果我传递无效参数,它将返回NONE。

如果串联结果中的任何字段为
NULL
,则整个字符串将为
NULL
。从示例数据来看,
num\u rings\u overflow
字段似乎是罪魁祸首

尝试在
NVL()
调用中包装每个可以为
NULL
的字段,例如:

SELECT ringto_number, overflow_busy_flag,
       NVL(no_of_rings_to_overflow, ""), NVL(overflow_ringto_number, "")
NULL
值转换为空字符串或特定字符串(如果愿意),即

NVL(字段,“不适用”)