Динамические переменные связывания не распознаются во встроенном представлении

У меня есть следующий код, написанный на SQR:

select
    business_unit        &g8_iee_business_unit
    ledger               g8_iee_ledger
    sum_posted_total_amt &yb_g8_iee_amount_selected
    ft_yb_iee_RPT_NY     &g8_iee_rpt_row_ny
    currency_cd          &g8_iee_currency_cd
 From ( 
    with a as ( 
        Select DISTINCT account
        From ps_gl_account_tbl
        Where account [$col_g8_account]
    )
    SELECT /*+LEADING(a g8row g8func g8ybdata) PX_JOIN_FILTER(g8ybdata) swap_join_inputs(g8row) use_hash(g8row) swap_join_inputs(g8func) use_hash(g8func) swap_join_inputs(angel) use_hash(angel)*/
        g8row.ft_yb_iee_rpt_ny, g8ybdata.business_unit, g8ybdata.ledger,
        sum(g8ybdata.posted_total_amt) sum_posted_total_amt,
        g8ybdata.currency_cd 
    from ps_ft_yba_rul8_row g8row
        , ps_ledger g8ybdata
        , a
    where ([$criteria2])
        and g8ybdata.ledger in ([$verledger])
        and g8ybdata.account = a.account 
        and (g8ybdata.currency_cd = 'USD' or g8ybdata.currency_cd = ' ' ) 
        and g8ybdata.fiscal_year = #year
        and [$account_period_select] 
        and g8ybdata.product = g8row.product 
        and ( g8row.ft_yb_iee_rpt_ny > '18' AND g8row.ft_yb_iee_rpt_ny < '22' ) 
    group by g8row.ft_yb_iee_rpt_ny, g8ybdata.business_unit, g8ybdata.ledger, g8ybdata.currency_cd
)
order by FT_YB_IEE_RPT_NY, business_unit, ledger, currency_cd;

Кажется, что [$col_g8_account] во встроенном представлении не может быть прочитано, потому что это выдает мне ошибку 'invalid relational operator':

(SQR 5528) ORACLE OCIStmtExecute ошибка 920 в курсоре 6:    ORA-00920: неправильный реляционный оператор SQL: SELECT business_unit, книга, sum_posted_total_amt, FT_YB_IEE_RPT_NY,       ft_yb_rpt_col_char, CHARTFIELD2, currency_cd С (с, как (выберите DISTINCT учетную запись из ps_gl_account_tbl Где группа счетов по g8row.FT_YB_IEE_RPT_NY,g8func.ft_yb_rpt_col_char, g8func.CHARTFIELD2,       g8ybdata.business_unit, g8ybdata.ledger, g8ybdata.currency_cd)

Ошибка в строке 682:    (SQR 3716) Ошибка в операторе SQL.

(SQR 5528) ORACLE OCIStmtExecute ошибка 920 в курсоре 7:    ORA-00920: недопустимый реляционный оператор SQL: SELECT business_unit, бухгалтерская книга, sum_posted_total_amt, ft_yb_iee_RPT_NY,       currency_cd From (с учетной записью as (выберите DISTINCT__обозначить_счет_бюджет_сделки_обозначить_счет_бюджетным капиталом_сайта) g8ybdata.business_unit, g8ybdata.ledger, g8ybdata.currency_cd)

Ошибка в строке 803:    (SQR 3716) Ошибка в операторе SQL.

Ошибки были найдены в файле программы.

SQR для PeopleSoft: программа прерывается.

1 ответ

Проблема заключена в кавычках в динамической переменной.

Я полагаю, что вы пытаетесь что-то вроде этого (я не знаю ваших условных критериев, поэтому я создал ShowSingle):

if #ShowSingle = 1
   Let $col_g8_account = '='100000''
else
   Let $col_g8_account = ' like '1000%''
End-If

Проблема в том, что когда вы вставляете кавычки, вы должны удваивать их. Это трудно понять, но что вам нужно сделать, это примерно так:

if #ShowSingle = 1
   Let $col_g8_account = '=''100000'''
else
   Let $col_g8_account = 'like ''1000%'''
End-If

Я проверил это, и он работает (и тоже не работает)

Другие вопросы по тегам