Форматирование выполняется немедленно с помощью to_date ORACLE

Я застрял в процедуре форматирования в пакете..... сценарий работает нормально, однако его интеграция с пакетом оказывается сложной!!

Я не привык к оракулу ... У меня есть скрипт, но не в пакете ... ну, не все из него ... Drop Table работал

CREATE OR REPLACE PACKAGE BODY Testing is
    PROCEDURE DropTable1 IS         
        BEGIN
                execute immediate ('DROP TABLE mytable1');                           
        END;

    PROCEDURE PopulateTable1 IS
        BEGIN
            execute immediate ('CREATE TABLE mytable1
            AS (   
                select
                substr(t1.genarea,3,3) as M_Class,
                substr(t1.genarea,6,30) as M_Description,
                substr(t1.genarea,36,3) as M_Class,
                substr(t1.genarea,39,30) as M_Description,
                substr(t1.itemitem,1,3) as product_code,
                t3.CHANNEL_NUM as SALES_CHANNEL,
                to_date(''t2.time_id'',''dd-mon-yyyy'') as mis_date,
                sum(t2.ap_cw_cfi_irp+t2.ap_cw_issues_irp) as ap_gross,
                sum(t2.Ap_Cw_Cfi_Irp+t2.Ap_Revivals_Irp) as ap_net,
                sum(t2.sp_inc_irp+t2.sp_issues_irp) as sp_gross,
                sum(t2.sp_dec_irp+t2.sp_fs_irp) as sp_net
              from
                d_pr t1, act t2, age_map t3
              where
                t1.pfx=''IT'' and t1.coy=''1'' and t1.tabl=''T81'' and substr(t1.itemitem,1,3) = t2.product_id and t3.AGE_NUM = t2.age_id
              group by
                substr(t1.genarea,3,3),
                substr(t1.genarea,6,30),
                substr(t1.genarea,36,3),
                substr(t1.genarea,39,30),
                substr(t1.itemitem,1,3),
                t3.CHANNEL_NUM,
                to_date(''t2.time_id'',''dd-mon-yyyy'')
            )');
            COMMIT;
        END PopulateTable1;
END Testing;
/

Благодарность


person Ggalla1779    schedule 29.06.2015    source источник
comment
Если у вас есть такая проблема, назначьте строку переменной и выведите ее на экран с помощью DBMS_Output. Это покажет вам точный SQL, который отправляется.   -  person David Aldridge    schedule 30.06.2015


Ответы (3)


У вас не должно быть кавычек вокруг t2.time_id. Одинарные кавычки используются для обозначения строкового литерала; это явно ссылка на столбец.

person Allan    schedule 29.06.2015

В вашем коде есть две вещи, которые кажутся странными:

  • to_date(''t2.time_id'',''dd-mon-yyyy'')

Вам не нужны одинарные кавычки вокруг столбца, вам нужны только одинарные кавычки вокруг строкового литерала. Измените его на:

to_date(t2.time_id,''dd-mon-yyyy'')

Если вы боретесь с одиночными кавычками в нескольких местах, я бы посоветовал Техника заключения строковых литералов в кавычки, чтобы избежать ошибок из-за одинарных кавычек в Струна. Например, см. https://stackoverflow.com/a/27373394/3989608.

  • COMMIT;

Вам не нужно COMMIT для операторов DDL, вам нужно фиксировать только для операторов DML. Убери это.

person Lalit Kumar B    schedule 29.06.2015

BEGIN
execute immediate ('CREATE TABLE mytable1 AS 
(select to_date(/*remove single quotes here*/t2.time_id/*and here*/,''dd-mon-yyyy'') as mis_date 
from (select current_date time_id from dual) t2)');
end;

И в последней строке запроса выбора. Потому что он обрабатывается как строка

person Jeet    schedule 29.06.2015