2016-12-07 6 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, нет, определенно Oracle ('FROM TABLE (: portfolioTable) appls') –

+0

@GordonLinoff, если вы имели в виду' OUTER APPLY' - добавлено в 12c –

ответ

0

Запрос имеет 4000 символов.
Текст, вероятно, усекается где-то по линии.

 Смежные вопросы

  • Нет связанных вопросов^_^