2017-05-17 3 views
0

プロシージャの外側で正常に動作するように見えますが、プロシージャ内では何もしないようです。プロシージャはエラーなしで実行されますが、行は挿入されません。誰でも助けてくれますか?実行するとすぐに実行する

create or replace procedure sp_retail_transaction_insert 
authid current_user 
as 
begin 
    execute immediate (' 
    insert into sp_retail_transaction 
    (indiv_id, perm_id, acct_type, acct_source, tender_cd, trans_header_id, trans_datetime_full, 
    trans_type, tot_price_amt, promotion_code, store_name, store_type, store_cat, store_terminal_location, store_area_location, cmp_period, staff) 
    select 
    a.indiv_id, 
    a.perm_id, 
    a.acct_type, 
    a.acct_source, 
    a.tender_cd, 
    a.trans_header_id, 
    a.trans_datetime_full, 
    a.trans_type, 
    a.tot_price_amt, 
    a.promotion_code, 
    a.company_name as store_name, 
    a.site_type as store_type, 
    a.secondary_site_type as store_cat, 
    a.airport_terminal as store_terminal_location, 
    a.building_desc as store_area_location, 
    case when 
    trans_datetime_full between to_date(b.start_date, ''dd/mm/yyyy'') 
    and 
    to_date (b.end_date, ''dd/mm/yyyy'') then ''cmp_period'' 
    when to_date(trans_datetime_full, ''dd/mm/yyyy'')<to_date(b.start_date, ''dd/mm/yyyy'') then ''pre_cmp_period'' 
    when to_date(trans_datetime_full, ''dd/mm/yyyy'')>to_date(b.end_date, ''dd/mm/yyyy'') then ''post_cmp_period'' 
    end as cmp_period, 
    case when c.staff_flag = 1 or c.staff_flag_revised = 1 or c.pseudo_staff_flag = 1 then 1 else 0 end as staff 
    from sp_temp b, tableau.an_retail_trans_full a 
    left join tableau.an_individual_tb_full c 
    on a.indiv_id=c.indiv_id 
    where a.tot_price_amt>0 and 
    a.indiv_id is not null and 

     ( instr ('','' || upper(b.airport_terminal)|| '','', '','' ||upper(a.airport_terminal)|| '','') <> 0 or upper(b.airport_terminal) is null) and 
      ( instr ('','' || upper(b.store_name) || '','', '','' || upper(a.loc_desc_long) || '','') <> 0 or upper(b.store_name) is null) and 
      ( instr ('','' || upper(b.acct_type) || '','' , '','' || upper(a.acct_type) || '','') <> 0 or upper(b.acct_type) is null) and 
      ( instr ('','' || upper(b.trans_type) || '','', '','' || upper(a.trans_type) || '','') <> 0 or upper(b.trans_type) is null) 
    and 
    a.trans_datetime_full between (to_date(b.start_date,''dd/mm/yyyy'')-(to_date (b.end_date,''dd/mm/yyyy'') - to_date(b.start_date,''dd/mm/yyyy''))) 
    and 
    (to_date (b.end_date,''dd/mm/yyyy'')+(to_date (b.end_date, ''dd/mm/yyyy'') - to_date(b.start_date, ''dd/mm/yyyy'')))'); 
end sp_retail_transaction_insert; 
+1

なぜ動的SQLを使用するのですか? – mustaccio

+1

コミットすることを忘れないでください。 –

+0

私はコーディングにSQL Developerを使用しています。 –

答えて

0

コミットが挿入を実行するセッションで問題でない場合、コミットが発行されるまで、レコードは他のセッションで使用できなくなります。セッションがコミットの前に終了すると、レコードはロールバックされます。

+0

Executeを使用すると問題が解決するようです –

0

回答:カンマ区切りによるパーティション

create or replace PROCEDURE CA_RETAIL_TRANSACTION_INSERT AUTHID CURRENT_USER AS 
BEGIN 
INSERT INTO CA_RETAIL_TRANSACTION SELECT A.INDIV_ID, 
A.PERM_ID, 
    A.ACCT_TYPE, 
    A.ACCT_SOURCE, 
     A.TENDER_CD, 
     A.TRANS_HEADER_ID, 
      A.TRANS_DATETIME_FULL, 
      A.TRANS_TYPE, 
       A.TOT_PRICE_AMT, 
       A.PROMOTION_CODE, 
        A.COMPANY_NAME AS STORE_NAME, 
        A.SITE_TYPE AS STORE_TYPE, 
         A.SECONDARY_SITE_TYPE AS STORE_CAT, 
         A.AIRPORT_TERMINAL AS STORE_TERMINAL_LOCATION, 
          A.BUILDING_DESC AS STORE_AREA_LOCATION, 

         CASE WHEN 
         TRANS_DATETIME_FULL 

        BETWEEN B.START_DATE 
       AND B.END_DATE 
       THEN 'CMP_PERIOD' 

      WHEN TRANS_DATETIME_FULL < 
      B.START_DATE 
     THEN 'PRE_CMP_PERIOD' 

    WHEN 
    TRANS_DATETIME_FULL> 
    B.END_DATE 
THEN 'POST_CMP_PERIOD' 
END AS CMP_PERIOD, 

CASE when 
    C.Staff_Flag = 1 OR 
    C.Staff_Flag_Revised = 1 OR 
     C.Pseudo_Staff_Flag = 1 
     then 1 else 0 
END AS Staff 

FROM TABLEAU.AN_RETAIL_TRANS_FULL A 

    JOIN 
    CA_TEMP B 
     ON 
     A.TRANS_DATETIME_FULL BETWEEN 
    B.PRE_START_DATE AND 
     B.POST_END_DATE 


    left JOIN 
    TABLEAU.AN_INDIVIDUAL_TB_FULL C 
     ON 
     A.INDIV_ID = C.INDIV_ID 

WHERE 
    A.TRANS_DATETIME_FULL BETWEEN 
    B.PRE_START_DATE AND 
     B.POST_END_DATE AND 

A.TOT_PRICE_AMT > 0 AND 
     A.INDIV_ID IS NOT NULL AND 

    ( INSTR (',' || UPPER(B.AIRPORT_TERMINAL)|| ',', 
       ',' || UPPER(A.AIRPORT_TERMINAL)|| ',') <> 0 OR 
         UPPER(B.AIRPORT_TERMINAL) IS NULL) AND 

     ( INSTR (',' || UPPER(B.STORE_NAME) || ',', 
        ',' || UPPER(A.COMPANY_NAME) || ',') <> 0 OR 
          UPPER(B.STORE_NAME) IS NULL) AND 

      ( INSTR (',' || UPPER(B.ACCT_TYPE) || ',' , 
         ',' || UPPER(A.ACCT_TYPE) || ',') <> 0 OR 
           UPPER(B.ACCT_TYPE) IS NULL) AND 

       ( INSTR (',' || UPPER(B.TRANS_TYPE) || ',', 
          ',' || UPPER(A.TRANS_TYPE) || ',') <> 0 OR 
            UPPER(B.TRANS_TYPE) IS NULL) ; 

ENDのCA_RETAIL_TRANSACTION_INSERT。

関連する問題