首页 > 解决方案 > 甚至为空值存储过程显示数据

问题描述

我做了这个查询来显示一些汇总数据。我也有兴趣显示不受影响的表格元素。经过几次无用的测试后,我尝试向您寻求帮助。

create or replace PROCEDURE PROVA 
(
    NOME            IN VARCHAR2,
    COGNOME          IN VARCHAR2,
    CARTA            IN VARCHAR2,
    output OUT SYS_REFCURSOR
)
AS 
BEGIN
OPEN output FOR

SELECT
    dati.nome "NOME",
    dati.cognome "COGNOME",
    dati.carta "CARTA",
    dati.profilo "PROFILO",
    dati.s_denominazione "DENOMINAZIONE",    
    CASE
        WHEN SUM(numacc) > 0 THEN
            'TRUE'
        ELSE
            'FALSE'
    END     "ABILITATO",
    SUM(numacc) "NUMERO ACCESSI"  
FROM
    (
        SELECT
            d.codicepunto,
            d.s_denominazione,
            a.carta carta,
            c.nome nome,
            c.cog cognome,
            c.profilo profilo,
            coalesce(a.numacc, 0) numacc
        FROM
            tabellaA a
            JOIN tabellaB b
                ON a.id = b.id
            RIGHT OUTER JOIN TABELLAC c
                ON a.carta = c.carta
            RIGHT OUTER JOIN TABELLAD d
                ON b.punto = d.punto            
        WHERE
        (NOME IS NULL or c.nome = NOME)
        AND
        (COGNOME IS NULL or c.cog = COGNOME)
        AND
        (CARTA IS NULL or a.carta = CARTA)
        AND 
        sysdate BETWEEN a.datinivalacc AND a.datfinvalacc
    ) dati
GROUP BY
    
    dati.s_denominazione,
    dati.carta,
    dati.nome,
    dati.cognome,
    dati.profilo
ORDER BY
    dati.s_denominazione;

    
END ;

这是结果:

名称 认知 宪章 简介 命名空间 阿比利塔托 数字访问
阿尔伯特 威阿 010101 1 都灵 真的 10
阿尔伯特 威阿 010101 1 米兰 真的 20
(无效的) (无效的) (无效的) (无效的) 那不勒斯 错误的 0
(无效的) (无效的) (无效的) (无效的) 罗马 错误的 0

这就是我想要实现的目标:

名称 认知 宪章 简介 命名空间 阿比利塔托 数字访问
阿尔伯特 威阿 010101 1 都灵 真的 10
阿尔伯特 威阿 010101 1 米兰 真的 20
阿尔伯特 威阿 010101 1 那不勒斯 错误的 0
阿尔伯特 威阿 010101 1 罗马 错误的 0

我错过了什么?输入参数都是可选的。

提前致谢

标签: oraclestored-procedures

解决方案


推荐阅读