我在Sybase中执行SP,根据特定条件执行另一个SP,此SP将有两个输出值,但每次执行时只会输出两个中的一个,我的问题是其中一个这两个值打印没有问题,另一个不打印
让我们看看代码,存储过程父亲(我只放置我打电话的操作)
if @i_operacion = "R"
select @w_ente = @i_cliente
begin
-- BUSCAR LA CANTIDAD DE NUMEROS O PREGUNTAS QUE SE OBTENDRAN DE ACUERDO AL MOTIVO
SELECT @w_tot_preg = mv_preg_totales
FROM cc_motivo_validacion
WHERE mv_codigo = @i_motivo
CREATE TABLE #TempNum(
numero int null,
descripcion varchar(200) null,
respuesta varchar(250) null,
codigo int null
)
if @i_tipo = "P"
begin
select @w_tipo_ente = 'PN'
end
if @i_tipo = "C"
begin
select @w_tipo_ente = 'PJ'
end
-- BUSCAR LA CANTIDAD DE PREGUNTAS EXISTENTES PARA CONOCER EL RANGO DEL ALEATORIO
SELECT @w_cant_preg = COUNT (*)
from cc_preguntas_validacion
WHERE pv_tipo = @w_tipo_ente or pv_tipo = "PG"
select @w_inf = 1
select @w_sup = @w_cant_preg
select @w_p_cicl = 1
WHILE (@w_p_cicl < @w_tot_preg+1)
begin
SELECT @w_num_rand = ROUND(((@w_sup - @w_inf -1) * rand() + @w_inf),0)
INSERT INTO #TempNum
(numero)
Values
(@w_num_rand)
select @w_p_cicl = @w_p_cicl + 1
end
SELECT top 1 @w_comp = numero
FROM #TempNum
Order by numero ASC
declare curpreguntas cursor
for
SELECT pv_codigo, pv_descripcion FROM
cob_cuentas..cc_preguntas_validacion
WHERE pv_tipo = @w_tipo_ente or pv_tipo = "PG"
ORDER BY pv_codigo ASC
select @w_temp = 1
open curpreguntas
fetch curpreguntas into
@w_cod_preg,
@w_pregunta
while @@sqlstatus = 0
begin
if @w_temp=@w_comp
begin
exec sp_resp_validacion_positiva
@i_codigo = @w_cod_preg,
@i_cliente = @w_ente,
@o_resp_corta = @w_respuesta out,
@o_resp_larga = @w_respuesta out
Select @w_respuesta
Update #TempNum
Set
descripcion = @w_pregunta,
codigo = @w_cod_preg,
respuesta = @w_respuesta
WHERE numero = @w_comp
set @w_respuesta = ""
SELECT top 1 @w_comp = numero
from
#TempNum
Where @w_comp < numero
ORDER BY numero ASC
end
select @w_temp = @w_temp + 1
fetch curpreguntas into
@w_cod_preg,
@w_pregunta
end
close curpreguntas
deallocate curpreguntas
SELECT 'NUMERO' = numero,
'CODIGO' = codigo,
'DESCRIPCION' = descripcion,
'RESPUESTA' = respuesta
FROM
#TempNum
DROP TABLE #TempNum
存储过程之子
if @i_operacion = "R"
select @w_ente = @i_cliente
begin
-- BUSCAR LA CANTIDAD DE NUMEROS O PREGUNTAS QUE SE OBTENDRAN DE ACUERDO AL MOTIVO
SELECT @w_tot_preg = mv_preg_totales
FROM cc_motivo_validacion
WHERE mv_codigo = @i_motivo
CREATE TABLE #TempNum(
numero int null,
descripcion varchar(200) null,
respuesta varchar(250) null,
codigo int null
)
if @i_tipo = "P"
begin
select @w_tipo_ente = 'PN'
end
if @i_tipo = "C"
begin
select @w_tipo_ente = 'PJ'
end
-- BUSCAR LA CANTIDAD DE PREGUNTAS EXISTENTES PARA CONOCER EL RANGO DEL ALEATORIO
SELECT @w_cant_preg = COUNT (*)
from cc_preguntas_validacion
WHERE pv_tipo = @w_tipo_ente or pv_tipo = "PG"
select @w_inf = 1
select @w_sup = @w_cant_preg
select @w_p_cicl = 1
WHILE (@w_p_cicl < @w_tot_preg+1)
begin
SELECT @w_num_rand = ROUND(((@w_sup - @w_inf -1) * rand() + @w_inf),0)
INSERT INTO #TempNum
(numero)
Values
(@w_num_rand)
select @w_p_cicl = @w_p_cicl + 1
end
SELECT top 1 @w_comp = numero
FROM #TempNum
Order by numero ASC
declare curpreguntas cursor
for
SELECT pv_codigo, pv_descripcion FROM
cob_cuentas..cc_preguntas_validacion
WHERE pv_tipo = @w_tipo_ente or pv_tipo = "PG"
ORDER BY pv_codigo ASC
select @w_temp = 1
open curpreguntas
fetch curpreguntas into
@w_cod_preg,
@w_pregunta
while @@sqlstatus = 0
begin
if @w_temp=@w_comp
begin
exec sp_resp_validacion_positiva
@i_codigo = @w_cod_preg,
@i_cliente = @w_ente,
@o_resp_corta = @w_respuesta out,
@o_resp_larga = @w_respuesta out
Select @w_respuesta
Update #TempNum
Set
descripcion = @w_pregunta,
codigo = @w_cod_preg,
respuesta = @w_respuesta
WHERE numero = @w_comp
set @w_respuesta = ""
SELECT top 1 @w_comp = numero
from
#TempNum
Where @w_comp < numero
ORDER BY numero ASC
end
select @w_temp = @w_temp + 1
fetch curpreguntas into
@w_cod_preg,
@w_pregunta
end
close curpreguntas
deallocate curpreguntas
SELECT 'NUMERO' = numero,
'CODIGO' = codigo,
'DESCRIPCION' = descripcion,
'RESPUESTA' = respuesta
FROM
#TempNum
DROP TABLE #TempNum
Stored procedure hijo
create proc sp_resp_validacion_positiva (
@s_ssn int = null,
@s_user login = null,
@s_term varchar(30) = null,
@s_date datetime = null,
@s_srv varchar(30) = null,
@s_lsrv varchar(30) = null,
@t_debug char(1) = 'N',
@t_file varchar(14) = null,
@t_from varchar(32) = null,
@t_trn smallint = null,
@i_codigo int,
@i_cliente int = null,
@o_resp_corta char(1) = null out,
@o_resp_larga varchar(150) = null out
) as
declare @w_sp_name varchar(30),
@w_ente int,
@w_diaN varchar(2),
@w_mesN varchar(3),
@w_anoN varchar(4),
@w_ced_ruc varchar(30),
@w_tlf varchar(4),
@w_email varchar(50),
@w_cta varchar(30),
@w_detalle_dir varchar(100),
@w_direccion varchar(105),
@w_pais varchar(100),
@w_estado varchar(100),
@w_ciudad varchar(100),
@w_zip varchar(10),
@w_correo varchar(100),
@w_return int
/* Inicializa Variables */
select @w_sp_name = 'sp_resp_validacion_positiva',
@o_resp_corta = 'N'
select @w_ente = @i_cliente
select @w_ced_ruc = en_ced_ruc
from cobis..cl_ente
where en_ente = @w_ente
SELECT TOP 1 @w_cta = cc_cta_banco
FROM cob_cuentas..cc_ctacte
WHERE cc_cliente = @w_ente
if @i_codigo = 1
begin
select @w_anoN = substring(p_fecha_nac,8,4)
from cobis..cl_ente
where en_ced_ruc = @w_ced_ruc
select @o_resp_larga = CONVERT(VARCHAR(4), @w_anoN, 365)
select @o_resp_larga
end
if @i_codigo = 2
begin
select @w_mesN = substring(convert(varchar(10), p_fecha_nac, 103),4,2)
from cobis..cl_ente
where en_ced_ruc = @w_ced_ruc
select @o_resp_larga = CONVERT(VARCHAR(4), @w_mesN, 365)
select @o_resp_larga
end
if @i_codigo = 3
begin
select @w_diaN = substring(p_fecha_nac,5,2)
from cobis..cl_ente
where en_ced_ruc = @w_ced_ruc
select @o_resp_larga = CONVERT(VARCHAR(4), @w_diaN, 365)
select @o_resp_larga
end
if @i_codigo = 4
begin
IF EXISTS (select 1 from cob_atm..tm_tarj_cred
where tc_ente = @w_ente
and tc_virtual = 'N'
and tc_estado = 'A'
and tc_tipo_tarj = 'T')
begin
select @o_resp_corta = 'S'
end
SELECT @o_resp_corta
end
if @i_codigo = 5
begin
IF EXISTS (select 1 from cob_atm..tm_tarj_cred t, cob_atm..tm_tarj_cred a
where t.tc_ente = @w_ente
and t.tc_virtual = 'N'
and t.tc_estado = 'A'
and t.tc_tipo_tarj = 'T'
and t.tc_num_tarj = a.tc_tarj_principal
and a.tc_virtual = 'N'
and a.tc_estado = 'A'
and a.tc_tipo_tarj = 'A')
begin
select @o_resp_corta = 'S'
end
SELECT @o_resp_corta
end
if @i_codigo = 6
begin
IF EXISTS (select 1 from cob_cuentas..cc_ctacte
where cc_cliente = @w_ente)
begin
select @o_resp_corta = 'S'
end
SELECT @o_resp_corta
end
if @i_codigo = 7
begin
IF EXISTS (select 1 from cob_atm..tm_tarj_cred
where
tc_estado = 'A'
and tc_tarj_principal = STR(@w_ente))
begin
select @o_resp_corta = 'S'
end
SELECT @o_resp_corta
end
if @i_codigo = 8
begin
select top 1
@w_detalle_dir = di_descripcion,
@w_pais = (select pa_descripcion from cobis..cl_pais where pa_pais = cobis..cl_direccion.di_pais),
@w_estado = (select pv_descripcion from cobis..cl_provincia where pv_provincia = cobis..cl_direccion.di_estado),
@w_ciudad = (select distinct ci_descripcion from cobis..cl_ciudad where ci_provincia = cobis..cl_direccion.di_estado and ci_pais = cobis..cl_direccion.di_pais and ci_ciudad = cobis..cl_direccion.di_ciudad),
@w_zip = isnull(di_codpos, "0")
from cobis..cl_direccion
where di_ente = @w_ente
and di_tipo= 'D'
select @w_direccion = @w_pais
if @w_zip <> "0"
select @w_direccion = @w_zip + ', ' + @w_direccion
if @w_estado <> null and @w_estado <> "NO APLICA"
select @w_direccion = @w_estado + ', ' + @w_direccion
if @w_ciudad <> null
select @w_direccion = @w_ciudad + ', ' + @w_direccion
select @w_direccion = + ', ' + @w_direccion
select @w_direccion = substring(@w_detalle_dir, 1, (105 - datalength(@w_direccion))) + @w_direccion
select @o_resp_larga = @w_direccion
SELECT @o_resp_larga
end
if @i_codigo = 9
begin
select top 1
@w_email = di_descripcion
from cobis..cl_direccion
where di_ente = @w_ente
and di_tipo= 'M'
select @o_resp_larga = @w_email
SELECT @o_resp_larga
end
if @i_codigo = 10
begin
select @w_tlf = substring(te_valor, LEN(te_valor)-3, 4)
from cobis..cl_telefono, cobis..cl_catalogo
where codigo = te_tipo_telefono
and tabla = 26
and estado <> 'B'
and valor = 'DOMICILIO'
and te_ente = @w_ente
select @o_resp_larga = @w_tlf
SELECT @o_resp_larga
end
if @i_codigo = 11
begin
SELECT @w_ced_ruc = en_ced_ruc
from cobis..cl_ente
WHERE en_ente = @w_ente
select @o_resp_larga = @w_ced_ruc
SELECT @o_resp_larga
end
if @i_codigo = 12
begin
IF EXISTS(select 1 from cob_cartera..ca_operacion
where op_estado in (1,2)
and op_cliente = @w_ente)
begin
select @o_resp_corta = 'S'
end
SELECT @o_resp_corta
end
if @i_codigo = 13
begin
IF EXISTS(SELECT op_num_banco FROM cob_pfijo..pf_operacion
WHERE op_ente = @w_ente)
begin
select @o_resp_corta = 'S'
end
SELECT @o_resp_corta
end
if @i_codigo = 14
begin
IF EXISTS(select * from cob_cuentas_his..cc_his_movimiento
where hm_cta_banco = @w_cta
and hm_tipo_tran = 50)
begin
select @o_resp_corta = 'S'
end
SELECT @o_resp_corta
end
if @i_codigo = 15
begin
IF EXISTS(select * from cob_cuentas_his..cc_his_movimiento
where hm_cta_banco = @w_cta
and hm_tipo_tran = 48)
begin
select @o_resp_corta = 'S'
end
SELECT @o_resp_corta
end
return 0