Oracle 생성 트리거 오류(나쁜 바인딩 변수)
나는 다음 코드로 트리거를 만들려고 합니다.
CREATE OR REPLACE TRIGGER MYTABLE_TRG
BEFORE INSERT ON MYTABLE
FOR EACH ROW
BEGIN
select MYTABLE_SEQ.nextval into :new.id from dual;
END;
오류가 납니다.
Error(2,52): PLS-00049: bad bind variable 'NEW.ID'
무슨 생각 있어요?감사해요.
오류 코드가 테이블에 그런 컬럼 ID가 없다는 것을 알려주는 것 같습니다.
어떻게든 당신의 환경은 당신의 코드를 DDL 문이 아닌 SQL로 취급하고 있습니다.이것은 나에게 효과가 있습니다(sqlplus에서 실행됨).명령 프롬프트에서 exe):
SQL> create sequence mytable_seq;
Sequence created.
SQL> create table mytable (id number);
Table created.
SQL> CREATE OR REPLACE TRIGGER MYTABLE_TRG
2 BEFORE INSERT ON MYTABLE
3 FOR EACH ROW
4 BEGIN
5 select MYTABLE_SEQ.nextval into :new.id from dual;
6 END;
7 /
Trigger created.
후행 "/" - 이는 컴파일 중인 응용프로그램에서 중요할 수 있습니다.
만약 누군가가 적절한 명명 규칙을 사용한다면, 이러한 유형의 오류를 발견하는 것은 훨씬 더 쉬워질 것입니다. (적절한 수단이 사전 및 사후 수정을 사용하는 경우) 그들의 목적에 대해 더 잘 암시하는 일반적인 객체 이름에 대해. 즉, 이와 같은 것은 정답을 발견했을 것입니다.
--START -- CREATE A SEQUENCE
/*
create table "TBL_NAME" (
"TBL_NAME_ID" number(19,0) NOT NULL
, ...
*/
--------------------------------------------------------
-- drop the sequence if it exists
-- select * from user_sequences ;
--------------------------------------------------------
declare
c int;
begin
select count(*) into c from user_sequences
where SEQUENCE_NAME = upper('SEQ_TBL_NAME');
if c = 1 then
execute immediate 'DROP SEQUENCE SEQ_TBL_NAME';
end if;
end;
/
CREATE SEQUENCE "SEQ_TBL_NAME"
MINVALUE 1 MAXVALUE 999999999999999999999999999
INCREMENT BY 1 START WITH 1
CACHE 20 NOORDER NOCYCLE ;
-- CREATE
CREATE OR REPLACE TRIGGER "TRG_TBL_NAME"
BEFORE INSERT
ON "TBL_NAME"
REFERENCING NEW AS New OLD AS Old
FOR EACH ROW
DECLARE
tmpVar NUMBER;
BEGIN
tmpVar := 1 ;
SELECT SEQ_TBL_NAME.NEXTVAL INTO tmpVar FROM dual;
:NEW.TBL_NAME_ID := tmpVar;
END TRG_TBL_NAME;
/
ALTER TRIGGER "TRG_TBL_NAME" ENABLE;
-- STOP -- CREATE THE TRIGGER
만약 당신이 나와 비슷하고 당신의 코드가 작동해야 한다면, 당신이 트리거를 다시 만들기 전에 명시적으로 삭제해 보세요.바보같은 오라클.
언급URL : https://stackoverflow.com/questions/14993980/oracle-create-trigger-error-bad-bind-variable
'programing' 카테고리의 다른 글
서명된 int와 서명되지 않은 int 사이의 캐스트는 메모리에서 변수의 정확한 비트 패턴을 유지합니까? (0) | 2023.09.21 |
---|---|
MariaDB UNION과 함께 선택할 때 텍스트 잘라내기 (0) | 2023.09.21 |
jquery에서 드롭다운 상자 사용/사용 안 함 (0) | 2023.09.21 |
GCC: 유사한 두 루프 사이의 벡터화 차이 (0) | 2023.09.21 |
Mysql select distinct (0) | 2023.09.21 |