使用项目值作为 select 代码的一部分
Using item value as part of the select code
我正在尝试使用 oracle apex 20 上的一项功能,该功能在 apex 5.1 中运行良好。
我有一个交互式报告,并且在我添加项目的价值时是这样的:
'''
SELECT /* PARALLEL(4)*/
o.id,
NULL
pregled,
o.OS_TIP,
o.SIFRA,
o.OS_TIP_PRETH,
o.PRETHODI,
o.OS_TIP_MASTER,
o.MASTER,
u.naziv || ' - ' || o.UGOVARATELJ
Ugovaratelj,
p.naziv || ' - ' || o.POSREDNIK
Posrednik,
t.naziv || ' ' || o.TRAJANJE
Trajanje,
o.POCETAK_OSIGURANJA,
o.ISTEK_OSIGURANJA,
o.POCETAK_PREMIJE,
o.KRAJ_PREMIJE,
o.DATUM_IZDANJA,
o.BROJ_RATA,
o.PREMIJA,
( SELECT CASE
WHEN MONTHS_BETWEEN (
TO_DATE (osd.kraj_premije, 'DD.MM.YYYY'),
TO_DATE (osd.pocetak_premije, 'DD.MM.YYYY')) <
12
THEN
ROUND (SUM (st.premija_neto), 2)
ELSE
ROUND (
SUM (st.premija_neto)
/ NVL (
( (FLOOR (
MONTHS_BETWEEN (
TO_DATE (osd.kraj_premije,
'DD.MM.YYYY'),
TO_DATE (osd.pocetak_premije,
'DD.MM.YYYY'))))
/ 12),
1),
2)
END godisnja
FROM os_dokument osd, stavka_dokumenta st
WHERE st.os_tip(+) = osd.os_tip
AND st.sifra(+) = osd.sifra
AND osd.os_tip(+) = o.os_tip
AND osd.sifra(+) = o.sifra
GROUP BY osd.pocetak_premije, osd.kraj_premije)
godisnja_premija,
r.naziv || ' - ' || o.REFERENT
Referent,
prodaja.F_STATUS_POLICE (O.OS_TIP, O.SIFRA)
STATUS_POLISE,
(SELECT forma
FROM odobrenje
WHERE odobrenje = o.odobrenje)
status_odobravanja,
sd.grupacija || sd.grupa || '.' || sd.cjenik
tarifa,
dms.postoji_dokument (o.id)
postoji_dokumentacija,
(SELECT k.tekst
FROM os_dokument_komentar k
WHERE k.OS_DOKUMENT_ID = o.id AND k.indikator = 1)
poruka,
o.korisnik,
DECODE ((SELECT k.tekst
FROM os_dokument_komentar k
WHERE k.OS_DOKUMENT_ID = o.id AND k.indikator = 1),
NULL, 'background-color:white',
'background-color:lightblue')
CSS_STYLE_PORUKA,
DECODE (dms.postoji_dokument (o.id),
'NE', 'background-color:white"',
'background-color:lightblue')
CSS_STYLE_DMS
FROM OS_DOKUMENT o,
in2_stranka p,
in2_stranka r,
in2_stranka u,
in2_stranka pl,
trajanje t,
stavka_dokumenta sd
WHERE o.posrednik = p.jmbg(+)
AND o.referent = r.jmbg(+)
AND o.ugovaratelj = u.jmbg(+)
AND o.trajanje = t.trajanje(+)
AND (o.os_tip = 'P08' OR o.os_tip LIKE 'N1%')
AND o.id = sd.id_os_dokument(+)
AND sd.rb(+) = 1
AND o.platitelj = pl.jmbg(+)
&FILTER.
'''
FILTER 是一个隐藏的页面项,它在页面加载时设置了一个过程,它包含一些代码。在最简单的版本中,它将包含“and 1=1”,或者它可以包含一些附加条件,如“and o.POSREDNIK = '12345'”
正如我在 Apex 5.1 中所说,这工作得很好。但是在 Apex 20 中,我什至无法在代码编辑器中验证代码,我明白了
“
ORA-20999: 解析 SQL 查询失败!
ORA-06550:第 53 行,第 27 列:ORA-00933:SQL 命令未正确结束
”
没有 &FILTER 的相同 select。最后工作得很好。
任何建议如何让它在 Apex 20 中工作?或者如何将一些代码插入 select ?
没错,它不再起作用了。
但是,如果您选择返回SQL查询的函数体作为源类型(而不是SQL查询),它将起作用。
Apex 20 真正好的功能是它会自动将您的查询转换为 RETURN
子句,使用 q-quoting 机制来防止可能的 单引号 问题。所以:您只需更改来源类型 - Apex 将为您完成剩下的工作,报告应该可以正常工作。至少,它对我有用。
我正在尝试使用 oracle apex 20 上的一项功能,该功能在 apex 5.1 中运行良好。 我有一个交互式报告,并且在我添加项目的价值时是这样的: '''
SELECT /* PARALLEL(4)*/
o.id,
NULL
pregled,
o.OS_TIP,
o.SIFRA,
o.OS_TIP_PRETH,
o.PRETHODI,
o.OS_TIP_MASTER,
o.MASTER,
u.naziv || ' - ' || o.UGOVARATELJ
Ugovaratelj,
p.naziv || ' - ' || o.POSREDNIK
Posrednik,
t.naziv || ' ' || o.TRAJANJE
Trajanje,
o.POCETAK_OSIGURANJA,
o.ISTEK_OSIGURANJA,
o.POCETAK_PREMIJE,
o.KRAJ_PREMIJE,
o.DATUM_IZDANJA,
o.BROJ_RATA,
o.PREMIJA,
( SELECT CASE
WHEN MONTHS_BETWEEN (
TO_DATE (osd.kraj_premije, 'DD.MM.YYYY'),
TO_DATE (osd.pocetak_premije, 'DD.MM.YYYY')) <
12
THEN
ROUND (SUM (st.premija_neto), 2)
ELSE
ROUND (
SUM (st.premija_neto)
/ NVL (
( (FLOOR (
MONTHS_BETWEEN (
TO_DATE (osd.kraj_premije,
'DD.MM.YYYY'),
TO_DATE (osd.pocetak_premije,
'DD.MM.YYYY'))))
/ 12),
1),
2)
END godisnja
FROM os_dokument osd, stavka_dokumenta st
WHERE st.os_tip(+) = osd.os_tip
AND st.sifra(+) = osd.sifra
AND osd.os_tip(+) = o.os_tip
AND osd.sifra(+) = o.sifra
GROUP BY osd.pocetak_premije, osd.kraj_premije)
godisnja_premija,
r.naziv || ' - ' || o.REFERENT
Referent,
prodaja.F_STATUS_POLICE (O.OS_TIP, O.SIFRA)
STATUS_POLISE,
(SELECT forma
FROM odobrenje
WHERE odobrenje = o.odobrenje)
status_odobravanja,
sd.grupacija || sd.grupa || '.' || sd.cjenik
tarifa,
dms.postoji_dokument (o.id)
postoji_dokumentacija,
(SELECT k.tekst
FROM os_dokument_komentar k
WHERE k.OS_DOKUMENT_ID = o.id AND k.indikator = 1)
poruka,
o.korisnik,
DECODE ((SELECT k.tekst
FROM os_dokument_komentar k
WHERE k.OS_DOKUMENT_ID = o.id AND k.indikator = 1),
NULL, 'background-color:white',
'background-color:lightblue')
CSS_STYLE_PORUKA,
DECODE (dms.postoji_dokument (o.id),
'NE', 'background-color:white"',
'background-color:lightblue')
CSS_STYLE_DMS
FROM OS_DOKUMENT o,
in2_stranka p,
in2_stranka r,
in2_stranka u,
in2_stranka pl,
trajanje t,
stavka_dokumenta sd
WHERE o.posrednik = p.jmbg(+)
AND o.referent = r.jmbg(+)
AND o.ugovaratelj = u.jmbg(+)
AND o.trajanje = t.trajanje(+)
AND (o.os_tip = 'P08' OR o.os_tip LIKE 'N1%')
AND o.id = sd.id_os_dokument(+)
AND sd.rb(+) = 1
AND o.platitelj = pl.jmbg(+)
&FILTER.
''' FILTER 是一个隐藏的页面项,它在页面加载时设置了一个过程,它包含一些代码。在最简单的版本中,它将包含“and 1=1”,或者它可以包含一些附加条件,如“and o.POSREDNIK = '12345'” 正如我在 Apex 5.1 中所说,这工作得很好。但是在 Apex 20 中,我什至无法在代码编辑器中验证代码,我明白了 “ ORA-20999: 解析 SQL 查询失败!
ORA-06550:第 53 行,第 27 列:ORA-00933:SQL 命令未正确结束
” 没有 &FILTER 的相同 select。最后工作得很好。 任何建议如何让它在 Apex 20 中工作?或者如何将一些代码插入 select ?没错,它不再起作用了。
但是,如果您选择返回SQL查询的函数体作为源类型(而不是SQL查询),它将起作用。
Apex 20 真正好的功能是它会自动将您的查询转换为 RETURN
子句,使用 q-quoting 机制来防止可能的 单引号 问题。所以:您只需更改来源类型 - Apex 将为您完成剩下的工作,报告应该可以正常工作。至少,它对我有用。