Вывод команды ROUND(SYSDATE - V_FECHA,1)
не отображается, потому что V_FECHA
по-прежнему NULL
в вашем коде.Вы можете проверить это с помощью
SELECT ROUND(SYSDATE - NULL) FROM DUAL;
, который тоже ничего не показывает.Почти каждая операция в SQL будет выводить NULL
, если входные данные содержат NULL
значений, а DBMS_OUTPUT
показывает пустую строку.
Как предложил @Kaushik, если вы добавите SELECT
в свой коди, может быть, что-то, что ловит NULL
значения, все должно быть хорошо:
DECLARE
v_fecha v$database.created%TYPE;
delta NUMBER;
BEGIN
SELECT created INTO v_fecha FROM v$database;
delta := v_fecha - SYSDATE;
CASE WHEN delta <= 50 THEN
dbms_output.put_line('LA FECHA DE CREACION DE LA BASE DE DATOS ES <= 50 DÍAS');
WHEN delta > 50 AND delta <= 100 THEN
dbms_output.put_line('LA FECHA DE CREACIÓN ES MAYOR QUE 50 DÍAS O <= 100 DÍAS');
WHEN delta IS NULL THEN
dbms_output.put_line('LA FECHA DE CREACIÓN ES DESCONOCIDA');
ELSE
dbms_output.put_line('LA FECHA DE CREACIÓN ES IGUAL A '
|| NVL(round(SYSDATE - v_fecha,1), 0)
|| ' DÍAS');
END CASE;
END;
/
Я поставил два варианта, WHEN delta IS NULL
и NVL
, чтобы показать вам различные возможности.
Кроме того, я пытаюсь позвонить на SYSDATE
только один раз, так как каждый вызов SYSDATE
может быть немного позже, чем предыдущий.(Разница, конечно, очень мала, но я пытаюсь предотвратить ошибки, которые происходят очень редко, но потом их очень трудно найти.)