【问题标题】:Errors SQL Statement ignored and ORA-00934: group function is not allowed here on stored PL/SQL procedure错误 SQL 语句被忽略和 ORA-00934: group function is not allowed here on stored PL/SQL procedure
【发布时间】:2020-09-12 06:13:20
【问题描述】:

我对 SQL 还很陌生,无法解决这两个错误。

这个想法是,当程序运行时,它将尝试找到与 order_key、part_key 和供应商密钥匹配的任何数据。如果没有找到匹配的数据,那么插入语句很好,但是如果找到匹配的数据,则显示一条消息。

SET SERVEROUTPUT ON;

CREATE OR REPLACE PROCEDURE INSERT_ITEM(order_key IN NUMBER,
                                        part_key IN NUMBER,
                                        supplier_key IN NUMBER,
                                        quantity IN NUMBER,
                                        price IN NUMBER,
                                        discount IN NUMBER,
                                        tax IN NUMBER) IS

ITEM_CHECK LINEITEM%ROWTYPE;

BEGIN
    SELECT *
    INTO ITEM_CHECK
    FROM LINEITEM
    WHERE L_ORDERKEY = order_key
    AND L_PARTKEY = part_key
    AND L_SUPPKEY = supplier_key;
    
    IF ITEM_CHECK IS NOT NULL THEN
        DBMS_OUTPUT.PUT_LINE('Error! An order already exists with the same part manufactured by the same supplier');
    END IF;
    
EXCEPTION
    WHEN NO_DATA_FOUND THEN
        INSERT INTO LINEITEM VALUES(order_key, part_key, supplier_key, COUNT(L_LINENUMBER) + 1, quantity, price, discount, tax, '', '', SYSDATE  + 1, SYSDATE , SYSDATE  + 8, '', '', '');
END;
/
COMMIT;
END INSERT_ITEM;

EXECUTE INSERT_ITEM(1, 1, 1, 50, 200, 0.04, 0.02);

我很确定

Error(26,72): PL/SQL: ORA-00934: group function is not allowed here

是由于 select 语句中的COUNT,但是我无法找到任何有关导致的原因

错误(26,9):PL/SQL:SQL 语句被忽略

任何帮助将不胜感激!

【问题讨论】:

  • 如果您仅在记录不存在时才插入记录,我不明白您要对 COUNT(L_LINENUMBER) + 1 做什么?
  • 关于堆栈中的“statement ignored”错误,即PL/SQL编译器由于前面的错误而拒绝了SQL语句。

标签: sql oracle stored-procedures plsql


【解决方案1】:

我不会那样做的。

在这 3 个 KEY 列上创建一个复合 UNIQUE 索引。

  • 如果不存在这样的组合,将插入行
  • 否则会引发错误。不是消息,而是您可以/应该在 PL/SQL 过程的 EXCEPTION 处理部分处理的“真实”错误。异常名称为 DUP_VAL_ON_INDEX

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-03
    • 2012-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-19
    • 2022-01-23
    • 2012-11-22
    相关资源
    最近更新 更多