结果不显示ROUND(SYSDATE - V_FECHA,1)
命令dbms_output.put_line
,我有这个脚本:
SET SERVEROUTPUT ON
DECLARE
v_fecha v$database.created%TYPE;
BEGIN
CASE
WHEN ( SYSDATE - v_fecha <= 50 ) THEN
dbms_output.put_line('LA FECHA DE CREACION DE LA BASE DE DATOS ES <= 50 DÍAS');
WHEN ( SYSDATE - v_fecha > 50 AND SYSDATE - v_fecha <= 100 ) THEN
dbms_output.put_line('LA FECHA DE CREACIÓN ES MAYOR QUE 50 DÍAS O <= 100 DÍAS');
ELSE
dbms_output.put_line('LA FECHA DE CREACIÓN ES IGUAL A '
|| round(SYSDATE - v_fecha,1)
|| ' DÍAS');
END CASE;
END;
/
OUTPUT:
LA FECHA DE CREACIÓN ES IGUAL A DÍAS.
Oracle版:Oracle Database 11g快捷版11.2.0.2.0版 - 64位生产版 IDE:SQL开发人员 - Versión4.1.1.19
感谢。
答案 0 :(得分:0)
您可能想要从v$database
获取。在BEGIN
SELECT
created
INTO v_fecha
FROM
v$database;
答案 1 :(得分:0)
未显示命令V_FECHA
的输出,因为代码中NULL
仍为SELECT ROUND(SYSDATE - NULL) FROM DUAL;
。您可以使用
NULL
也没有显示任何内容。如果输入包含NULL
值,则几乎SQL中的每个操作都将输出DBMS_OUTPUT
,而SELECT
则显示空字符串。
正如@Kaushik建议的那样,如果您将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
一次,因为{{1}}的每次调用可能稍晚于前一次调用。 (差别当然很小,但我试图防止很少发生但很难找到的错误。)