Подтвердить что ты не робот

Oracle SQL PLS-00049: неверная переменная привязки

Я получаю эту ошибку, и у меня есть 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 часов, и этот триггер приводит меня в бешенство.

Заранее благодарим за помощь.

4b9b3361

Ответ 1

Измените обновление на:

UPDATE products
SET qoh = v_new_qoh
WHERE id = :new.product_id;

то есть. нет двоеточия перед v_new_qoh.

Номер строки (12) относится к номеру строки PL/SQL, которая начинается со слова DECLARE.

Ответ 2

и new.quantity должны быть :new.quantity

Ответ 3

для вставки одинакового значения 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; 

Ответ 4

Создать или заменить триггер

"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;

Ответ 5

Blockquote

Повторно проверьте имя вашего блока. Этот тип ошибки также может возникать при использовании имени блока при кодировании!