version simple du DDL:Faut-il possible d'exécuter une fonction SQL dans une contrainte de vérification au sein de DB2 z/OS
create function rm00dv1.no_concurrent_schedules()
returns integer
LANGUAGE SQL
READS SQL DATA
NO EXTERNAL ACTION
NOT DETERMINISTIC
BEGIN
declare num_overlaps integer;
select count(*)
into num_overlaps
from
rm00dv1.schedules a
where
a.id != 0
and
exists (
select 1
from rm00dv1.schedules b
where
b.id = 0 -- matches the key of a given record
and rm00dv1.isConcurrent(b.schdl_eff_dt, b.schdl_trm_dt, a.schdl_eff_dt, a.schdl_trm_dt) != 0
);
return num_overlaps;
end;
Tableau:
create table rm00dv1.schedules (
id int not null,
schdl_eff_dt date not null,
schdl_trm_dt date not null,
info_chg_ts timestamp(6) not null with default
)
in RM00DV1.TSRMDV01 ;
alter table rm00dv1.schedules add constraint no_schedule_overlap
check ((schdl_trm_dt < '01/01/2015')
or
rm00dv1.no_concurrent_schedules() <= 0);
Je reçois un SQL00551N - no execution privilege
et que est étrange car je peux exécuter la fonction dans une instruction select.
Une idée pour résoudre ce problème? Merci.
Darn. J'ai relu ce document, mais j'ai manqué cette balle. Merci. FYI, quand je stub-dans une fonction intégrée, min (1,0), je reçois un message d'erreur qui a du sens, la contrainte de vérification est invalide. Donc, indépendamment des privilèges sur WLM, cette approche ne va pas fonctionner. –
FYI, un déclencheur en lui-même ne fonctionnera pas non plus car la validité de l'opération d'insertion ou de mise à jour dépend des valeurs déjà présentes dans la table et vous ne pouvez pas accéder à la table. Je me suis heurté à cela, http://www.ibm.com/support/knowledgecenter/SSEPEK_11.0.0/codes/src/tpc/n746.html –
@ChrisGolledge Puis-je vous demander comment vous avez fini par résoudre le problème? – David