【问题标题】:How to declare a function in a trigger - Oracle如何在触发器中声明函数 - Oracle
【发布时间】:2014-12-20 20:40:15
【问题描述】:

我不知道如何使用 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;
/

然后对我说:'在期望以下之一时遇到了符号 "("::= .) ,@ % 默认字符。符号“:=”被替换为“(”以继续。 ' '当期望以下之一时遇到符号“BEGIN”:常量异常(标识符)(双引号分隔标识符)表长双参考字符时间戳间隔日期二进制国家字符nchar。 '在期待以下情况时遇到符号“文件结尾”:begin function pragme procedure'

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

【问题讨论】:

    标签: database oracle function triggers


    【解决方案1】:

    错误是参数 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;
    

    【讨论】:

    • 我输入如下内容:CREATE OR REPLACE TRIGGER promo AFTER INSERT ON promociones FOR EACH ROW DECLARE nomb VARCHAR2(20); times NUMBER; cont NUMBER; FUNCTION veces (promo VARCHAR2) RETURN NUMBER as cont BEGIN veces 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; / 并说 Encountered the symbol "BEGIN" when expecting a constant excepcion (a identifier) (...)
    • @IvanG4Life 的 cont 数据类型丢失。它必须连续 NUMBER(38);
    猜你喜欢
    • 2019-03-26
    • 2017-03-09
    • 1970-01-01
    • 2021-06-23
    • 2022-01-27
    • 1970-01-01
    • 1970-01-01
    • 2019-04-25
    • 1970-01-01
    相关资源
    最近更新 更多