Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用找不到的编译错误创建的触发器?_Sql_Oracle_Plsql_Syntax Error_Plsqldeveloper - Fatal编程技术网

Sql 使用找不到的编译错误创建的触发器?

Sql 使用找不到的编译错误创建的触发器?,sql,oracle,plsql,syntax-error,plsqldeveloper,Sql,Oracle,Plsql,Syntax Error,Plsqldeveloper,结合使用触发功能自动监控最低库存水平,以触发提醒消息 这是一个学习练习,已经尝试使用stackoverflow的所有帮助来改变它,但似乎不想继续工作 创建了以下语法: CREATE OR REPLACE TRIGGER STOCKqtyCheck AFTER INSERT OR UPDATE OF QTY ON STOCK DECLARE MINIMUM_QTY NUMBER QTY NUMBER STOCK_LOW_Error EXCEPTION; BEGIN

结合使用触发功能自动监控最低库存水平,以触发提醒消息

这是一个学习练习,已经尝试使用stackoverflow的所有帮助来改变它,但似乎不想继续工作

创建了以下语法:

CREATE OR REPLACE TRIGGER STOCKqtyCheck
AFTER INSERT OR UPDATE OF QTY ON STOCK
DECLARE

    MINIMUM_QTY NUMBER 
    QTY NUMBER
    STOCK_LOW_Error EXCEPTION;
BEGIN
    SELECT count(*)
    /* THE COUNT WILL LOOK INTO QTY */
    INTO QTY    
    FROM STOCK.MINIMUM_QTY
    WHERE
    /* WHERE MINIMUM QTY IS LESS THAN QTY */
    'MINIMUM_QTY' <= 'QTY' 
    IF STOCK_LOW_Error < 'MINIMUM_QTY' THEN
    RAISE STOCK_LOW_Error;
    END IF;
EXCEPTION
    WHEN STOCK_LOW_Error THEN
        Raise_Application_Error ('STOCK LEVEL TO LOW Error'));
END;
/
编译错误是什么

SQL*Plus中的触发器编译错误:

SQL> show errors trigger stockqtycheck
有关其他工具,请参阅工具的用户手册


至少您缺少几个分号

我认为有一件事与raise_应用程序_错误一起,您必须将错误消息与介于-20000和-20999之间的错误号相关联。请参考此链接


或者,您必须使用pragma_exception_init()将用户定义的异常与oracle错误号关联。

在所有情况下,
SHOW ERRORS
命令可能不会运行。根据我的说法,检索编译错误的最佳方法如下-

SELECT *
  FROM user_errors
 WHERE name = 'STOCKQTYCHECK';

您的
选择
查询是否有效?似乎第17行不正确。另外,第19行也没有意义。一个异常怎么可能小于20?当触发器中出现编译错误,并且没有GUI指出错误时,请检查该过程并在头脑中运行它,以查看它在语法和语义上是否正确。同时执行
SELECT
语句并确保它们返回正确的结果。@ADTC感谢您的评论;在第17行中,我告诉它应该参考库存表中的数量列,以与现有的最小数量(最小数量)进行比较,但我不知道其他方法。例外情况是,如果库存中的aka最小值小于20(我已更新了上面的代码),则会导致错误,因为“数量”列查找不起作用。我将根据SQL输出中的可见行号进行查找。不管怎样,关于您所说的:我告诉它应该参考库存表中的QTY列,以与最低现存量(minimum_QTY)进行比较。<您是否实际执行了此查询并获得了预期结果?我怀疑您刚刚编写了查询,但在将其放入触发器代码之前从未对其进行过测试。@ADTC引用带:=QTY的字段是否正确,我尝试了这个方法,但似乎没有出现错误。我真的认为您理解错了。除非它再次小于20,否则这是没有意义的。异常不能小于任何数值。它们只是例外。您需要做的是检查是否
数量<20
(这20应该是一个外部可控变量,而不是触发器内部的硬编码值)。
SQL> show errors trigger stockqtycheck
SELECT *
  FROM user_errors
 WHERE name = 'STOCKQTYCHECK';