ORA-00907: missing right parenthesis

The query below is generated by DOA after an insert into the database. I've marked the DOA-changes with [DOA] [/DOA]. Obviously there is something wrong with the parenthesis, but how can I avoid DOA from generating this?

Hans Claassens
HumanCapitalCare BV

Code:
select
  ecare.pck_ecare.OpgemaakteNaamInclUitDienst(p.geslacht,
    p.voorletters, p.voorvoegsels, p.naam,
    p.kode_naam_gebruik, p.voorvoegsels_echtgenoot,
    p.naam_echtgenoot, w.dat_uit_dienst) || ' (' || p.sofinr || ')' NaamWerknemer,
  w.psn_gid wnr__psn_gid,
  w.volgnr wnr__volgnr,
  onw.GID,
  onw.ONWG_GID,
  onw.WGR_REL_ID,
  onw.PSN_GID,
  onw.WNR_VOLGNR,
  onw.DATUM_UITNODIGING,
  onw.DATUM_INGEVULD,
  onw.DATUM_GEREED,
  onw.STATUS,
  onw.OPGEZET_DOOR,
  onw.DATUM_ORIGINEEL,
  onw.rowid
from mycare.onderzoek_werknemer onw, asa.q_werknemers w, asa.q_personen p

where    [DOA]([/DOA]
  :p_alle_wnrs <> '1'
  and onwg_gid = :onwg_gid
  and onw.psn_gid = w.psn_gid
  and onw.wnr_volgnr = w.volgnr
  and onw.wgr_rel_id = w.wgr_rel_id
  and w.psn_gid = p.gid
UNION
select
  ecare.pck_ecare.OpgemaakteNaamInclUitDienst(p.geslacht,
    p.voorletters, p.voorvoegsels, p.naam,
    p.kode_naam_gebruik, p.voorvoegsels_echtgenoot,
    p.naam_echtgenoot, w.dat_uit_dienst) || ' (' || p.sofinr || ')' NaamWerknemer,
  w.psn_gid wnr__psn_gid,
  w.volgnr wnr__volgnr,
  onw.GID,
  onw.ONWG_GID,
  onw.WGR_REL_ID,
  onw.PSN_GID,
  onw.WNR_VOLGNR,
  onw.DATUM_UITNODIGING,
  onw.DATUM_INGEVULD,
  onw.DATUM_GEREED,
  onw.STATUS,
  onw.OPGEZET_DOOR,
  onw.DATUM_ORIGINEEL,
  onw.rowid
from mycare.onderzoek_werknemer onw, asa.q_werknemers w, asa.q_personen p
where
  :p_alle_wnrs = '1'
  and w.psn_gid = p.gid
  and (w.dat_in_dienst is null or w.dat_in_dienst <= sysdate)
  and (w.dat_uit_dienst is null or w.dat_uit_dienst > sysdate)
  and w.wgr_rel_id = :p_wgr_rel_id
  and onwg_gid(+) = :onwg_gid
  and onw.psn_gid(+) = w.psn_gid
  and onw.wnr_volgnr(+) = w.volgnr
  and onw.wgr_rel_id(+) = w.wgr_rel_id  [DOA])
and
(onw.rowid = :doa__rowid)
[/DOA]
 
I assume you have enabled the [roAllFields] option of the RefreshOptions? As a result, the insert statement will be followed by a select statement of the original query, limited to the newly inserted rowid. This fails for a union, unless you take specific actions.

It's a bit tricky, but you will need to add an /* END_REFRESH */ comment to this query at the right position (see also the RefreshOptions help topic). It probably needs to look like this:

Code:
select
  ecare.pck_ecare.OpgemaakteNaamInclUitDienst(p.geslacht,
    p.voorletters, p.voorvoegsels, p.naam,
    p.kode_naam_gebruik, p.voorvoegsels_echtgenoot,
    p.naam_echtgenoot, w.dat_uit_dienst) || ' (' || p.sofinr || ')' NaamWerknemer,
  w.psn_gid wnr__psn_gid,
  w.volgnr wnr__volgnr,
  onw.GID,
  onw.ONWG_GID,
  onw.WGR_REL_ID,
  onw.PSN_GID,
  onw.WNR_VOLGNR,
  onw.DATUM_UITNODIGING,
  onw.DATUM_INGEVULD,
  onw.DATUM_GEREED,
  onw.STATUS,
  onw.OPGEZET_DOOR,
  onw.DATUM_ORIGINEEL,
  onw.rowid
from mycare.onderzoek_werknemer onw, asa.q_werknemers w, asa.q_personen p
where onw.psn_gid = w.psn_gid
  and onw.wnr_volgnr = w.volgnr
  and onw.wgr_rel_id = w.wgr_rel_id
  and w.psn_gid = p.gid
  /* END_REFRESH */
  and :p_alle_wnrs <> '1'
  and onwg_gid = :onwg_gid
  ...
Now the correct record will be fetched, and all necessary fields will be joined.
 
Back
Top