2016-12-07 8 views
0

私たちはいつも使っているパターンを持っていますが、これは通常かなり簡単です。Oracle REPLACE機能がこの文字列で機能しないのはなぜですか?

sortOrder IN VARCHAR2 := 'Title' 

query VARCHAR2(32767) := q'[ 
    SELECT 
    Columns 
    FROM tables 
    ORDER BY {sortOrder} 
]'; 

query := REPLACE(query, '{sortOrder}', sortOrder); 

しかし、この文字列のためにそれが動作していない:

WITH appl_List 
AS 
(
    SELECT DISTINCT 
    appls.admin_phs_ORG_code || TO_CHAR(appls.serial_num, 'FM000000') AS core_proj_number, 
    appls.Appl_ID 
    FROM TABLE(:portfolioTable) appls 
), 
    g1SupportingProjCount AS 
    (
    SELECT 
     gen1grants.silverchair_id, 
     COUNT(DISTINCT al.Appl_ID) AS ApplCount 
    FROM 
     appl_List al 
    JOIN cg_cited_reference_gen1_grant gen1grants 
     ON al.core_proj_number = gen1grants.ic_serial_num 
    JOIN cg_cited_reference_gen1 gen1refs 
     ON gen1grants.silverchair_id = gen1refs.silverchair_id 
    GROUP BY gen1grants.Silverchair_id 
    ), 
    g1SupportedPubCount AS 
    (
    SELECT 
     gen1grants.silverchair_id, 
     COUNT(DISTINCT gen1refs.gen1_wos_uid) AS PubCount 
    FROM 
     appl_List al 
    JOIN cg_cited_reference_gen1_grant gen1grants 
     ON al.core_proj_number = gen1grants.ic_serial_num 
    JOIN cg_cited_reference_gen1 gen1refs 
     ON gen1grants.silverchair_id = gen1refs.silverchair_id 
    GROUP BY gen1grants.Silverchair_id 
    ), 
    g2SupportingProjCount AS 
    (
    SELECT 
     gen2grants.silverchair_id, 
     COUNT(DISTINCT al.Appl_ID) AS ApplCount 
    FROM 
     appl_List al 
    JOIN cg_cited_reference_gen2_grant gen2grants 
     ON al.core_proj_number = gen2grants.ic_serial_num 
    JOIN cg_cited_reference_gen2 gen2refs 
     ON gen2grants.silverchair_id = gen2refs.silverchair_id 
    GROUP BY gen2grants.Silverchair_id 
    ), 
    g2SupportedPubCount AS 
    (
    SELECT 
     gen2grants.silverchair_id, 
     COUNT(DISTINCT gen2refs.gen2_wos_uid) AS PubCount 
    FROM 
     appl_List al 
    JOIN cg_cited_reference_gen2_grant gen2grants 
     ON al.core_proj_number = gen2grants.ic_serial_num 
    JOIN cg_cited_reference_gen2 gen2refs 
     ON gen2grants.silverchair_id = gen2refs.silverchair_id 
    GROUP BY gen2grants.Silverchair_id 
    ), 
    portfolio_cg_ids AS 
    (
     SELECT DISTINCT md.silverchair_id 
     FROM 
     (
     SELECT silverchair_id 
     FROM cg_cited_reference_gen1_grant gen1Grants 
     JOIN Appl_List appls 
     ON appls.core_proj_number = gen1Grants.ic_serial_num 
     UNION 
     SELECT silverchair_id 
     FROM cg_cited_reference_gen2_grant gen2Grants 
     JOIN Appl_List appls 
     ON appls.core_proj_number = gen2Grants.ic_serial_num 
    ) grant_sc_ids 
     JOIN cg_metadata md 
     ON grant_sc_ids.silverchair_id = md.silverchair_id 
    ) 

SELECT 
    silverchairId, 
    TITLE, 
    PMID, 
    PMCID, 
    publication_year as year, 
    referenceCount1Gen, 
    supportingProjectCount1Gen, 
    supportedPublicationCount1Gen, 
    referenceCount2Gen, 
    supportingProjectCount2Gen, 
    supportedPublicationCount2Gen, 
    COUNT(1) OVER() as TotalCount 
    FROM 
    (
     SELECT 
     md.SILVERCHAIR_ID silverchairId, 
     md.TITLE, 
     md.PMID, 
     md.PMCID , 
     md.publication_year as year, 
     g1RefCounts.referenceCount1Gen as referenceCount1Gen, 
     g1SupportingProjCount.ApplCount as supportingProjectCount1Gen, 
     g1SupportedPubCount.PubCount as supportedPublicationCount1Gen, 
     g2RefCounts.referenceCount2Gen as referenceCount2Gen, 
     g2SupportingProjCount.ApplCount as supportingProjectCount2Gen, 
     g2SupportedPubCount.PubCount as supportedPublicationCount2Gen, 
     --COUNT(1) OVER() as TotalCount 
     FROM cg_metadata md 
     -- BEGIN datascope to current portfolio 
     JOIN portfolio_cg_ids 
     ON portfolio_cg_ids.silverchair_id = md.silverchair_id 
     -- END datascope to current portfolio 
     LEFT JOIN g1SupportingProjCount 
     ON g1SupportingProjCount.Silverchair_id = md.silverchair_id 
     LEFT JOIN g2SupportingProjCount 
     ON g2SupportingProjCount.Silverchair_id = md.silverchair_id 
     LEFT JOIN g1SupportedPubCount 
     ON g1SupportedPubCount.Silverchair_id = md.silverchair_id 
     LEFT JOIN g2SupportedPubCount 
     ON g2SupportedPubCount.Silverchair_id = md.silverchair_id 
     OUTER APPLY 
     (
     Select Count(*) as referenceCount1Gen 
     FROM cg_cited_reference_gen1 g1Refs 
     WHERE g1Refs.silverchair_id = md.silverchair_id 
    ) g1RefCounts 
     OUTER APPLY 
     (
     Select Count(*) as referenceCount2Gen 
     FROM cg_cited_reference_gen2 g2Refs 
     WHERE g2Refs.silverchair_id = md.silverchair_id 
    ) g2RefCounts 
    ) results 
    ORDER BY {sortOrder} 

は、文字列内の特殊文字のいくつかの種類が働いてからこれを保つことができる例はありますか? 私は一種の難解です。私はこのパターンを3年ほど使用してきましたが、これはうまく動作しませんでした。 これを壊す原因は何ですか?

+1

「動作していない」とはどういう意味ですか?何が起こった? – mathguy

+0

@GordonLinoff、いいえ、間違いなくオラクル( 'FROM TABLE(:portfolioTable)appls') –

+0

@GordonLinoff、もしあなたが' OUTER APPLY'を指していたら-12cで追加されました –

答えて

0

クエリの文字数は4000文字以上です。
テキストはおそらく、行の下のどこかで切り捨てられています。

関連する問題