错误SQL语句被忽略,存储的PL/SQL过程中此处不允许使用ORA-00934:group函数

错误SQL语句被忽略,存储的PL/SQL过程中此处不允许使用ORA-00934:group函数,sql,oracle,stored-procedures,plsql,Sql,Oracle,Stored Procedures,Plsql,我对SQL相当陌生,在解决这两个错误时遇到困难 其思想是,在运行该过程时,它将尝试查找具有匹配的订单密钥、零件密钥和供应商密钥的任何数据。如果没有找到匹配的数据,则insert语句可以执行,但是如果找到匹配的数据,则显示这样的消息 SET SERVEROUTPUT ON; CREATE OR REPLACE PROCEDURE INSERT_ITEM(order_key IN NUMBER, part_key IN

我对SQL相当陌生,在解决这两个错误时遇到困难

其思想是,在运行该过程时,它将尝试查找具有匹配的订单密钥、零件密钥和供应商密钥的任何数据。如果没有找到匹配的数据,则insert语句可以执行,但是如果找到匹配的数据,则显示这样的消息

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);
我相当肯定

错误(26,72):PL/SQL:ORA-00934:此处不允许使用组函数

是由于select语句中的
计数
造成的,但是我无法找到任何有关原因的信息

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


任何帮助都将不胜感激

我不会那样做的

在这3个键列上创建一个复合唯一索引

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

    • 我不会那样做的

      在这3个键列上创建一个复合唯一索引

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

      如果您仅在记录不存在的情况下插入记录,我不明白您试图如何处理
      计数(L_LINENUMBER)+1
      ?关于堆栈中的“语句忽略”错误,即PL/SQL编译器由于前面的错误而拒绝SQL语句。如果您仅在记录不存在的情况下插入记录,我不明白你想用
      COUNT(L_LINENUMBER)+1做什么?关于堆栈中的“statement ignored”错误,即PL/SQL编译器由于前面的错误而拒绝SQL语句。