programing

Oracle SQL PLS-00049: 잘못된 바인딩 변수

sourcejob 2023. 9. 11. 21:37
반응형

Oracle SQL PLS-00049: 잘못된 바인딩 변수

칼럼 스펠링에 문제가 있는 것으로 보이는 이 오류가 발생합니다.하지만 스펠링을 모두 맞췄다고 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: bad bind variable '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)
);

당신의 도움에 미리 감사드립니다.

업데이트를 다음으로 변경합니다.

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

즉, v_new_qoh 앞에는 결장이 없습니다.

라인 번호(12)는 PL/SQL 블록의 라인 번호를 나타냅니다.블록은 DELECORE로 시작하므로 12번째 줄은 다음으로 시작합니다.

SET qoh = :v_new_qoh

그리고.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;

언급URL : https://stackoverflow.com/questions/7244714/oracle-sql-pls-00049-bad-bind-variable

반응형