2017-09-14 69 views
1

尝试通过过程执行下面的查询。通过过程执行SQL语句不起作用

查询运行良好,当我用蟾蜍中的单引号手动运行它,但在运行过程时遇到错误。

 v_sql := 
     'INSERT /*+ APPEND parallel(p,8)*/ 
     INTO NDWMTR_REF_PHARM_RX_MTH 
       (week_id, 
       PHARMACY_SEQ_NBR, 
       SUPPLIER_ID, 
       FINAL_STATUS_CD, 
       NDW_DATA_USE_QLFR_CD, 
       CMF_OTLT_NBR, 
       CMF_OTLT_HIST_NBR, 
       CLAIM_CNT) 
     Select /*+ PARALLEL (8)*/ 
     case 
     when TRIM(TO_CHAR(rx.SVC_DT, ''DAY'')) = ''FRIDAY'' 
     THEN CAST(TO_CHAR(rx.SVC_DT, ''YYYYMMDD'') as NUMBER(8)) 
     ELSE CAST(TO_CHAR(NEXT_DAY(rx.SVC_DT,''FRIDAY''),''YYYYMMDD'') as NUMBER(8)) 
     END WEEK_ID, 
     rx.pharmacy_seq_nbr, 
     rx.supplier_id, 
     rx.final_status, 
     rx.ndw_data_use_qlfr_cd,              
     NVL(ph.CMF_OTLT_NBR,00000000) as CMF_OTLT_NBR, 
     NVL(rx.cmf_otlt_nbr,00000000) as cmf_otlt_hist_nbr, 
     count(rx.claim_id) as CLAIM_CNT 
     FROM 
     rx_fact_hdr rx 
     left outer JOIN V_PHARM_STORE_SEQNO_XREF ph 
     ON rx.pharmacy_seq_nbr = ph.PHARMACY_SEQ_NBR 
     where 
     case 
     when TRIM(TO_CHAR(rx.SVC_DT, ''DAY'')) = ''FRIDAY'' 
     THEN CAST(TO_CHAR(rx.SVC_DT, ''YYYYMMDD'') as NUMBER(8)) 
     ELSE CAST(TO_CHAR(NEXT_DAY(rx.SVC_DT,''FRIDAY''),''YYYYMMDD'') as NUMBER(8)) 
     END = ''g_week_id'' 
     group by 
     case 
     when TRIM(TO_CHAR(rx.SVC_DT, ''DAY'')) = ''FRIDAY'' 
     THEN CAST(TO_CHAR(rx.SVC_DT, ''YYYYMMDD'') as NUMBER(8)) 
     ELSE CAST(TO_CHAR(NEXT_DAY(rx.SVC_DT,''FRIDAY''),''YYYYMMDD'') as NUMBER(8)) 
     END, 
     rx.pharmacy_seq_nbr, 
     rx.supplier_id, 
     rx.final_status, 
     rx.ndw_data_use_qlfr_cd, 
     ph.cmf_otlt_nbr, 
     rx.cmf_otlt_nbr'; 

EXECUTE IMMEDIATE v_sql; 

ORA-00907:缺少右括号

回答

3

你可以通过避免使用重复'

v_sql := q'{ 

    your-query-that-works-directly-in-TOAD-editor 

}'; 

Rextester demo

更多信息:Text Literals

+0

感谢您的回复。但这是行不通的 –

+0

@KiranDas如果你的问题已经被解决,你可以接受我的回答(http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235)解决:) – lad2025

+0

感谢您的回应。但那不起作用。 –