【发布时间】:2020-03-28 08:09:23
【问题描述】:
我想使用触发器限制表上的输入,但我总是收到错误消息。 警告:创建的触发器存在编译错误。
LINE/COL ERROR
-------- -----------------------------------------------------------------
4/1 PL/SQL: SQL Statement ignored
4/67 PL/SQL: ORA-00920: invalid relational operator
这是我的数据库表的代码
CREATE TABLE jadwal(
id_jadwal VARCHAR2(10) NOT NULL,
hari VARCHAR2(7) NOT NULL,
jam_masuk TIME,
jam_keluar TIME,
id_ajar VARCHAR2(20) NOT NULL,
id_ruang VARCHAR2(4) NOT NULL,
CONSTRAINT pk_jadwal PRIMARY KEY(id_jadwal),
CONSTRAINT fk_ajar_jadwal FOREIGN KEY(id_ajar) REFERENCES
ajar(id_ajar) ON DELETE CASCADE,
CONSTRAINT fk_ruangan_jadwal FOREIGN KEY(id_ruang) REFERENCES
ruangan(id_ruang) ON DELETE CASCADE
);
这是我的触发器的代码
CREATE OR REPLACE TRIGGER bef_ins_or_upd_jadwal
BEFORE INSERT OR UPDATE ON jadwal
FOR EACH ROW
DECLARE
v_cek number(1);
BEGIN
SELECT COUNT(id_jadwal) INTO v_cek FROM jadwal WHERE old.id_ruang := new.id_ruang AND old.hari := new.hari AND old.jam_masuk :<= new.jam_masuk AND old.jam_keluar :>= new.jam_masuk AND old.id_ajar := new.id_ajar
OR
old.id_ruang := new.id_ruang AND old.hari := new.hari AND old.jam_masuk :<= new.jam_keluar AND old.jam_keluar :>= new.jam_keluar AND old.id_ajar := new.id_ajar
OR
old.id_ruang := new.id_ruang AND old.hari := new.hari AND old.jam_masuk :>= new.jam_masuk AND old.jam_keluar :<= new.jam_keluar AND old.id_ajar := new.id_ajar;
if v_cek > 0 THEN
dbms_output.put_line('id_ruang Sudah Di Isi');
ELSE
dbms_output.put_line('berhasil');
END IF;
END;
【问题讨论】:
-
:>=、:<=怎么了? -
我用它来定义大于或等于
-
这不是有效的 Oracle 语法。使用
>=和<=。 -
我用过,结果一样
标签: oracle plsql oracle11g database-trigger