Ответ 1
Измените обновление на:
UPDATE products
SET qoh = v_new_qoh
WHERE id = :new.product_id;
то есть. нет двоеточия перед v_new_qoh.
Номер строки (12) относится к номеру строки PL/SQL, которая начинается со слова DECLARE.
Я получаю эту ошибку, и у меня есть googled и googled, и все, похоже, проблема с написанием столбцов. Тем не менее, я на 99% уверен, что все правильно написано и прочитал мой код, но я не могу поверить, что получаю ошибку...
Здесь источник:
CREATE OR REPLACE TRIGGER update_qoh_trigger
AFTER INSERT ON sales
FOR EACH ROW
DECLARE
v_qoh products.qoh%TYPE;
v_new_qoh products.qoh%TYPE;
BEGIN
SELECT qoh INTO v_qoh
FROM products
WHERE id = :new.product_id;
v_new_qoh := v_qoh - new.quantity; // ERROR HERE
UPDATE products
SET qoh = :v_new_qoh
WHERE id = :new.product_id;
END;
/
sho err
И это дает 12/12 PLS-00049: неверная переменная связывания 'V_NEW_QOH'
Я попытался заменить строку 12 следующими комбинациями:
v_new_qoh := :v_qoh - :new.quantity;
:v_new_qoh := :v_qoh - :new.quantity;
:v_new_qoh = :v_qoh - :new.quantity;
:v_new_qoh := v_qoh - :new.quantity;
:v_new_qoh := :v_qoh - new.quantity;
v_new_qoh := v_qoh - :new.quantity;
Но это все еще дает мне ошибку. Я так напуган на этом!
Таблица продуктов выглядит так:
CREATE TABLE products (
id NUMBER,
name VARCHAR2,
price NUMBER,
qoh NUMBER(2)
);
CREATE TABLE sales (
id NUMBER(10) AUTO_INCREMENT,
customer_id NUBMER(3),
product_id NUMBER(3),
quantity NUMBER(2),
price NUMBER(5,2),
sale_date DATE,
despatch_id NUMBER(10)
);
Вздохнуть, что это задание должно быть выполнено через 7 часов, и этот триггер приводит меня в бешенство.
Заранее благодарим за помощь.
Измените обновление на:
UPDATE products
SET qoh = v_new_qoh
WHERE id = :new.product_id;
то есть. нет двоеточия перед v_new_qoh.
Номер строки (12) относится к номеру строки PL/SQL, которая начинается со слова DECLARE.
и new.quantity
должны быть :new.quantity
для вставки одинакового значения sample_insp_id в Sir_no: -
update TRIGGER "PT"."BI_PROJECT_PART_SAMPLE_INSP"
before insert on "PROJECT_PART_SAMPLE_INSP"
for each row
begin
if :NEW."SAMPLE_INSP_ID" is null then
select "PROJECT_PART_SAMPLE_INSP_SEQ".nextval into :NEW."SAMPLE_INSP_ID",:NEW."SIR_NO"from dual;
end if;
end;
Создать или заменить триггер
"BI_PROJECT_PART_SAMPLE_INSP"
перед вставкой
"PROJECT_PART_SAMPLE_INSP"
для каждой строки
begin
if :NEW."SAMPLE_INSP_ID" is null then
select "PROJECT_PART_SAMPLE_INSP_SEQ".nextval into :NEW."SAMPLE_INSP_ID" from dual;
:NEW."SIR_NO":= :NEW."SAMPLE_INSP_ID";
end if;
end;
Blockquote
Повторно проверьте имя вашего блока. Этот тип ошибки также может возникать при использовании имени блока при кодировании!