Oracle Express에서 트리거 생성
Oracle 11g Express 및 SQL Developer 자동 증가 등의 작업을 수행하려고 했습니다.Oracle에 대해 아는 것이 거의 없고 트리거도 처음입니다.
이걸 실행해 봤는데, 제대로 하는 방법을 모르겠어요.
CREATE TABLE theschema.thetable
(id NUMBER PRIMARY KEY,
name VARCHAR2(30));
CREATE SEQUENCE theschema.test1_sequence
START WITH 1
INCREMENT BY 1;
create or replace trigger insert_nums
before insert on theschema.thetable
for each row
begin
select test1_sequence.nextval into :new.id from dual;
end;
/
트리거를 생성하려고 하면 "바인드"를 묻는 화면이 나타납니다.대화상자에는 "null" 확인란이 하나만 있습니다.이것은 무엇을 의미하며 올바르게 동작하는 스크립트를 작성하려면 어떻게 해야 합니까?
이러한 종류의 "자동 증가"를 수행할 때 주의해야 할 사항이 있습니까?
SQL Developer는 사용자가 DDL(데이터 정의)이 아닌 일반 DML(데이터 조작) 스크립트를 실행하고 있다고 생각하는 것 같습니다.그것은 또한 다음과 같이 생각한다.:new.id는 바인딩 가능한 변수입니다.
왜 이런 일이 일어나는지 모르겠습니다. Oracle SQL Developer 2.1에서는 재현할 수 없습니다.
에서 새 SQL 워크시트 창을 열어 봅니다.theschema스키마 및 (문이 아님)를 눌러 "schema" 스크립트를 실행합니다.
이 문제를 해결한 방법은 다음과 같습니다.명령어 앞에 "set define off;"를 붙입니다.
set define off;
create or replace trigger [...]
[...]
end;
/
그런 다음 두 명령을 모두 강조 표시하고 F9 키를 눌러 실행합니다.또는 모든 명령어를 F5로 실행할 수도 있습니다.
명령어가 F9에서 별도로 실행되는 경우 set define off는 활성화되지 않는 것으로 보입니다.
제 경우, 솔루션은 바인딩의 값으로 "newrow"를 "newrow"로 입력하고 "old"를 "old"로 입력합니다.
저는 초보니까 참고해서 대답할게요.내 생각에 문제는 그 코드가
create or replace trigger insert_nums
before insert on theschema.thetable
for each row
begin
select test1_sequence.nextval into :new.id from dual;
end;
실제로는 스크립트이며 직접 SQL 문이 아닙니다.따라서 "스크립트 실행"을 실행해야 합니다.SQL Developer에서 워크시트를 열었을 때 위와 같은 트리거 코드가 있으면 SQL Developer가 워크시트를 다시 보고 스크립트를 실행하려고 한다는 것을 알게 되었습니다.그 일을 막기 위해 나는 코드를 코멘트해야 했다.새 워크시트를 여는 것보다 트리거 코드를 실행하려면 코드를 여기에 배치하고 RUN SCRIPT를 수행합니다.
언급URL : https://stackoverflow.com/questions/12166046/creating-a-trigger-in-oracle-express