Курсор, который выбирает значения одного столбца в таблице, отображается неправильно - PullRequest
0 голосов
/ 06 мая 2020

У меня есть следующая функция с курсором:

CREATE OR REPLACE FUNCTION LONGTRIP 
RETURN SYS_REFCURSOR 
AS t_driver SYS_REFCURSOR;

BEGIN
    OPEN t_driver FOR
    SELECT TOTALTRIPMADE
    FROM DRIVER;

    RETURN t_driver;
END;
/

Курсор в функции должен извлекать все значения из столбца TOTALTRIPMADE в таблице DRIVER.

Тогда у меня есть следующий оператор выбора:

SELECT E#, LONGTRIP AS TOTALTRIPMADE
FROM DRIVER;

Предполагается, что столбец E # и TOTALTRIPMADE будут отображаться вместе, но вместо этого я получаю следующее:

        E# TOTALTRIPMADE                                                                            
---------- --------------------                                                                     
         1 CURSOR STATEMENT : 2                                                                     

CURSOR STATEMENT : 2

TOTALTRIPMADE                                                                                       
-------------                                                                                       
            1                                                                                       




            2                                                                                       
            1                                                                                       

7 rows selected.

Вместо этого я хочу:

 E#               TOTALTRIPMADE                                                                            
---------- --------------------                                                                     
         1                    2    
         3                    1
         5                    0

Поскольку TOTALTRIPMADE может быть нулевым, как мне запрограммировать его так, чтобы вместо пустого отображался 0?

1 Ответ

0 голосов
/ 06 мая 2020

Попробуйте функцию ниже, ваша функция не имеет входного параметра для E #. Чтобы вернуть значение из столбца, вам не нужен refcursor infact.

    CREATE OR REPLACE FUNCTION LONGTRIP(ehash IN varchar2)
RETURN DRIVER.TOTALTRIPMADE%TYPE 
AS t_driver DRIVER.TOTALTRIPMADE%TYPE;

BEGIN

    SELECT NVL(TOTALTRIPMADE,0) INTO t_driver
    FROM DRIVER where E#= ehash;

    RETURN t_driver;

    EXCEPTION 
      WHEN OTHERS THEN 
        RETURN 0;
END;
/

Ваш оператор select должен быть изменен, как показано ниже, чтобы передать E # в качестве входного параметра функции,

SELECT E#, LONGTRIP(E#) AS TOTALTRIPMADE
FROM DRIVER;
...