我无法在oracle sql developer中找到表格格式结果

7ivaypg9  于 2022-12-03  发布在  Oracle
关注(0)|答案(1)|浏览(206)

我无法获得表格格式的输出。

DECLARE
    prev    VARCHAR2(10) := 'sysdate+1';
    tdy     VARCHAR2(10) := 'sysdate';
    v_dt    VARCHAR2(10);
    result  resultset;
BEGIN
    v_dat :=
        CASE
            WHEN trunc(sysdate) = trunc(currnet_date) THEN
                tdy
            ELSE prev
        END;

    WITH 
     yesterday AS (
        SELECT
            src_dim_id,
            rec_count
        FROM
            tab_total_last_updated
        WHERE
                to_char(dw_insert_datetime, 'mm-dd-yy') = CASE
                                                              WHEN TRIM(to_char(v_dt, 'DAY', 'NLS_DATE_LANGUAGE=ENGLISH')) =
                                                              'MONDAY' THEN
                                                                  to_char(v_dt - 3, 'mm-dd-yy')
                                                              ELSE
                                                                  to_char(v_dt - 1, 'mm-dd-yy')
                                                          END
            AND table_type = 'EXT'
    )
    SELECT
        *
    INTO result
    FROM
        yesterday;
    RETURN result;
END;

我试图根据条件将值sysdate传递到v_dt,但我无法继续我的代码,请帮助解决这个问题。

mwg9r5ms

mwg9r5ms1#

您的代码中有许多错别字,v_dat应该是v_dtcurrent_date拼写错误。
不能对结果进行RETURN,因为您使用的是匿名PL/SQL块而不是函数。
此外,您可能不希望使用PL/SQL,而只希望使用SQL查询(并且不需要子查询因子分解子句):

SELECT src_dim_id,
       rec_count
FROM   tab_total_last_updated
WHERE  dw_insert_datetime >= CASE TRUNC(SYSDATE) - TRUNC(SYSDATE, 'IW')
                             WHEN 0 THEN TRUNC(SYSDATE) - 3 -- Monday
                             WHEN 6 THEN TRUNC(SYSDATE) - 2 -- Sunday
                             ELSE        TRUNC(SYSDATE) - 1
                             END
AND    dw_insert_datetime <  CASE TRUNC(SYSDATE) - TRUNC(SYSDATE, 'IW')
                             WHEN 0 THEN TRUNC(SYSDATE) - 2 -- Monday
                             WHEN 6 THEN TRUNC(SYSDATE) - 1 -- Sunday
                             ELSE        TRUNC(SYSDATE)
                             END
AND    table_type = 'EXT';

目前尚不清楚您使用以下工具的目的:

v_dt := CASE
        WHEN trunc(sysdate) = trunc(current_date)
        THEN SYSDATE
        ELSE SYSDATE + 1
        END;

但您似乎正在尝试更正服务器和客户端上的日期差异。在这种情况下,可能是:

  • 在以上代码中使用CURRENT_DATE代替SYSDATE;或
  • 使用特定时区,并将SYSDATE替换为例如SYSTIMESTAMP AT TIME ZONE 'UTC'

相关问题