1

パッケージ内のフォーマット手順で立ち往生しています.....スクリプトは問題なく動作しますが、パッケージとの統合は困難です!!

オラクルに慣れていません...スクリプトを実行していますが、パッケージには含まれていません...すべてではありません...ドロップテーブルが機能しました

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;
/

ありがとう

4

3 に答える 3

2

あなたのコードには、奇妙に思えるものが 2 つあります。

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

列を一重引用符で囲む必要はありません。文字列リテラルを一重引用符で囲むだけで済みます。次のように変更します。

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

複数の場所で一重引用符に苦労している場合は、文字列内の一重引用符によるエラーを回避するために、Quoting stringliteral 手法をお勧めします。たとえば、https://stackoverflow.com/a/27373394/3989608を参照してください。

  • COMMIT;

DDLステートメントにCOMMITは必要ありません。DMLステートメントにのみ commit が必要です。それを除く。

于 2015-06-29T16:47:38.710 に答える
2

を引用符で囲んではいけませんt2.time_id。一重引用符は、文字列リテラルを示すために使用されます。これは明らかに列参照です。

于 2015-06-29T15:48:08.787 に答える