2016-01-26 98 views
2

我有以下过程中,我动态使用SQL查询数据库的链接,我有我在哪里试图使用case statement情况加盟条件,因为所依赖的数据库链接,我必须使用表在加盟的条件,但我得到的错误为ORA-06512 "missing right parenthesis"Case语句中加入条件在Oracle

PROCEDURE "EXT_I_IN"(IN_I_ID IN NUMBER DEFAULT 0) AS 

    err_code VARCHAR(100); 
    err_msg VARCHAR(100);   
    l_sql VARCHAR2(5000); 
    l_sql1 VARCHAR2(5000); 

    BEGIN  

    FOR I_ROW IN I_CUR 
    LOOP 

    l_sql:='INSERT INTO I_IN(ID,DB_LINK) 
    Select DISTINCT(INC.ID),:IN_DB_LINK FROM 
    [email protected]'||IN_DB_LINK||' IC JOIN 
    (CASE WHEN :DB_NAME = ''IDB'' THEN [email protected]'||IN_DB_LINK||' ELSE [email protected]'||IN_DB_LINK||' END) IDL 
    '; 

    DBMS_OUTPUT.PUT_LINE('lsql' || l_sql); 
    execute immediate l_sql using IN_DB_LINK; 

    END EXT_I_IN;' 
+0

这将是很好,如果你可以复制'DBMS_OUTPUT.PUT_LINE(“lsql” || l_sql)的输出;' – StephaneM

+0

请检查questioni显示的结果现在dbms_output_line – Andrew

回答

2

这看起来奇怪,你不能在使用CASE JOIN:

(CASE WHEN :DB_CONNECTION_NAME = ''FONIC_RETAIL'' THEN [email protected]'||IN_DB_LINK||' ELSE [email protected]'||IN_DB_LINK||' END) IDL 

但是同时建立查询,你可以检查此条件:

l_sql:='INSERT INTO TEMP_TOPUP_DRC_IN(ID,INVOICE_DETAIL_LINE_ID,STATUS,BILLING_GROUP_ID,DB_LINK) 
    Select DISTINCT(INC.ID),INC.INVOICE_DETAIL_LINE_ID,INC.STATUS,IDL.BILLING_GROUP_ID,:IN_DB_LINK FROM 
    [email protected]'||IN_DB_LINK||' INC JOIN '; 
CASE WHEN IN_DB_LINK = 'FONIC_RETAIL' THEN l_sql := l_sql || ' [email protected]'||IN_DB_LINK; 
    ELSE l_sql := l_sql || ' [email protected]'||IN_DB_LINK; 
END CASE; 
l_sql := ' IDL ON INC.INVOICE_DETAIL_LINE_ID = IDL.ID 
    JOIN [email protected]'||IN_DB_LINK||' AP ON IDL.BILLING_RECORD_ID = AP.ID 
     WHERE AP.PAYMENT_TYPE_ID = 24 
     AND INC.STATUS IN (1,3,6,2,4,14,20,21,100,101,102)'; 
+0

什么样子古怪的?我在我的问题中提到了一切。是的,如果可能的话,我想使用条件连接但动态链接数据库链接。 – Andrew

+0

我已经试过你的解决方案,但遇到符号的情况下遇到符号的情况下,当期待...因为我把查询变得很难它很难找到我必须关闭单个反向的逗号 – Andrew

+0

分号在'其他'和'最终案例“。现在检查。此外,我不能看到KPI_DEF_CUR –