如何在触发器中声明一个函数 - Oracle

时间:2014-10-24 23:10:19

标签: database oracle function triggers

我不知道如何使用Oracle中的内部函数执行此触发器

CREATE OR REPLACE TRIGGER promo 
AFTER INSERT ON promociones 
FOR EACH ROW 
DECLARE nomb VARCHAR2(20); times NUMBER; cont NUMBER;
FUNCTION veces (promo VARCHAR2(20)) 
RETURN NUMBER as cont 
BEGIN 
SELECT count(*) INTO cont FROM promociones WHERE id2=promo;
RETURN cont;
END veces; 
BEGIN 
    times:= veces(:new.id2); 
    SELECT nombre into nomb FROM promociones WHERE id=:new.id2;
    DBMS_OUTPUT.PUT_LINE (nomb || times);
END;
/

然后我说:'遇到了simbol'(“当期待下列之一:: =。),@%默认字符。符号“:=”被替换为“(”继续。 “ '遇到以下其中一个时遇到符号“BEGIN”:常量异常(标识符)(双引号分隔标识符)表long double ref char timestamp interval date二进制国家字符nchar。 '遇到以下情况时遇到符号“文件结束”:开始函数pragme程序'

这个触发器的真实语法是怎样的?请帮帮我。

1 个答案:

答案 0 :(得分:0)

错误是参数VARCHAR2(20)的“(”)。 在PLSQL中编写函数时,不要包含精度。

FUNCTION veces (promo VARCHAR2) RETURN NUMBER
as 
    cont NUMBER(38);
BEGIN 
    SELECT count(*) INTO cont FROM promociones WHERE id2=promo;
    RETURN cont;
END veces;