Sybase - 在另一个中执行存储过程,并将两个输出分配给变量

时间:2018-06-15 15:10:33

标签: tsql stored-procedures sybase

我在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

0 个答案:

没有答案