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(字段,“不适用”)