【发布时间】: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