我在oracle中创建了一个触发器:
/* Formatted on 3-Oct-2013 15:58:45 (QP5 v5.126) */
CREATE OR REPLACE TRIGGER testtrigger
AFTER INSERT OR UPDATE OF sellpoint_name
ON sell_point
FOR EACH ROW
WHEN (new.sellpoint_name = 'Location')
DECLARE lat, lng sell_point.sellpoint_lat%TYPE;
BEGIN
SELECT sellpoint_lat, sellpoint_long into lat, lng
FROM sell_point
WHERE sellpoint_name = :new.sellpoint_name;
IF (:new.sellpoint_lat < 20 OR :new.sellpoint_long < 100)
THEN
raise_application_error (-20225, 'this point is not exists');
END IF;
END;
但是我收到了错误:
1/12 PLS-00103: Encountered the symbol "," when expecting one of the following:
constant exception <an identifier>
<a double-quoted delimited-identifier> table long double ref
char time timestamp interval date binary national character
nchar
1/47 PLS-00103: Encountered the symbol ";" when expecting one of the following:
16:10:50 := ( , not null range default external character
这里有什么不对?谢谢你的帮助!
答案 0 :(得分:2)
试试这个,
CREATE OR REPLACE TRIGGER testtrigger
AFTER INSERT OR UPDATE OF sellpoint_name ON sell_point
FOR EACH ROW
WHEN (new.sellpoint_name = 'Location')
DECLARE
lat sell_point.sellpoint_lat%TYPE;
lng sell_point.sellpoint_long%TYPE;
BEGIN
SELECT sellpoint_lat, sellpoint_long
INTO lat, lng
FROM sell_point
WHERE sellpoint_name = :new.sellpoint_name;
IF (:NEW.sellpoint_lat < 20 OR :NEW.sellpoint_long < 100) THEN
raise_application_error (-20225, 'this point is not exists');
END IF;
END;
<强>被修改强>
当您尝试从同一个表中选择列时,上面的代码会引发错误table is mutating
。
您可以编辑这样的代码,
CREATE OR REPLACE TRIGGER testtrigger
AFTER INSERT OR UPDATE OF sellpoint_name ON sell_point
FOR EACH ROW
WHEN (new.sellpoint_name = 'Location')
BEGIN
IF (:NEW.sellpoint_lat < 20 OR :NEW.sellpoint_long < 100) THEN
raise_application_error (-20225, 'this point is not exists');
END IF;
END;
答案 1 :(得分:0)
我认为因为你没有lat的数据类型
DECLARE lat, lng sell_point.sellpoint_lat%TYPE;
^