不要在游标 PL/SQL 中显示重复值

Posted

技术标签:

【中文标题】不要在游标 PL/SQL 中显示重复值【英文标题】:Do not show duplicate values ​in a cursor PL/SQL 【发布时间】:2020-11-02 01:16:28 【问题描述】:

您好,此时我正在返回这些值

--Group: Junior -- Name: Jared Ramirez -- Id Agent: 1
--Group: Junior -- Name: Jared Ramirez -- Id Agent: 1
--Group: Junior -- Name: Lilah Bailey -- Id Agent: 26
--Group: Junior -- NoNamebre: Lilah Bailey -- Id Agent: 26
--Group: Junior -- Name: Lilah Bailey -- Id Agent: 26

但我只想为每个代理编号返回 1 个,例如

--Grupo: Junior -- Nombre: Jared Ramirez -- Id Agente: 1
--Grupo: Junior -- Nombre: Lilah Bailey -- Id Agente: 26
DECLARE 
idCalls CALLS.CALL_ENTRY_ID%type;
idAgenteLlamada CALLS.ID_AGENT%type;

CURSOR c_Call (idCalls CALLS.CALL_ENTRY_ID%type) is
                                                SELECT ID_AGENT
                                                FROM CALLS                                                                                                
                                                WHERE CALL_ENTRY_ID = idCalls;

BEGIN
    OPEN c_Call (idCalls);
    FETCH c_Call INTO idAgentCall;
    WHILE c_Call %FOUND 
         LOOP
         dbms_output.put_line('--Group: '||usergroup||' -- Name: '|| userName|| ' -- Id Agent: ' || idAgentCall);
         FETCH c_Call INTO idAgentCall;
         END LOOP;
    CLOSE c_Call ;
END; 

我尝试过使用distinctGROUP BY,但它仍然不断返回重复的值。有什么想法吗?

【问题讨论】:

【参考方案1】:

如果您在 SQL plus 中执行此查询,那么您是否会获得多行,并且如果您为 ID_AGENT 获得多行,那么您是否可以尝试使用 DISTINCT 并查看每个代理是否获得一行或多个牵引。

SELECT ID_AGENT FROM CALLS WHERE CALL_ENTRY_ID = idCalls;

【讨论】:

我用过这个SELECT DISTINCT ID_AGENT FROM CALLS WHERE CALL_ENTRY_ID = idCalls; 但即便如此它仍然会返回重复的 ID_AGENT 嗨,在 SQL plus 中试试这个,你会看到,SELECT DISTINCT TRUNC(ID_AGENT) FROM CALLS WHERE CALL_ENTRY_ID = idCalls;

以上是关于不要在游标 PL/SQL 中显示重复值的主要内容,如果未能解决你的问题,请参考以下文章

在 PL/SQL 中循环使用游标

PL/SQL:语法错误

PL/SQL 在游标中引用另一个游标?

PL/SQL:如何根据列值插入

在 PL SQL 中返回游标的函数,

如何使用两个游标并显示它们 PL/SQL