Einfache Version des DDL ausführen:Sollte es möglich sein, eine SQL-Funktion in einer Check-Einschränkung innerhalb von 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;
Tabelle:
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);
Ich bin ein SQL00551N - no execution privilege
bekommen und dass ist seltsam, weil ich die Funktion in einer Select-Anweisung ausführen kann.
Irgendeine Idee, um dieses Problem zu lösen? Danke.
Darn. Ich habe diesen Doc gelesen, aber die Kugel verpasst. Vielen Dank. FYI, wenn ich eine eingebaute Funktion, min (1,0) stub-in, bekomme ich eine Fehlermeldung, die Sinn macht, Check Constraint ist ungültig. Unabhängig von den Berechtigungen für WLM funktioniert dieser Ansatz nicht. –
FYI, ein Trigger selbst wird nicht funktionieren, weil die Gültigkeit der Einfüge- oder Aktualisierungsoperation von bereits in der Tabelle vorhandenen Werten abhängt und Sie nicht auf die Tabelle zugreifen können. Ich stieß darauf, http://www.ibm.com/support/knowledgecenter/SSEPEK_11.0.0/codes/src/tpc/n746.html –
@ChrisGolledge Darf ich fragen, wie Sie das Problem gelöst haben? – David