CREATE TABLE TBL_TEST(ID NUMBER(38), NAME VARCHAR(100) NOT NULL, JUMIN VARCHAR(64), DEPT_ID NUMBER(38));
ALTER TABLE TBL_TEST ADD CONSTRAINT TBL_TEST_ID_PK PRIMARY KEY(ID);
INSERT INTO TBL_TEST(ID, NAME, JUMIN, DEPT_ID) VALUES(1, 'Kim', '0234561234567', 10);
INSERT INTO TBL_TEST(ID, NAME, JUMIN, DEPT_ID) VALUES(2, 'Park', '1234561234567', 10);
INSERT INTO TBL_TEST(ID, NAME, JUMIN, DEPT_ID) VALUES(3, 'Hong', '2234561234567', 20);
INSERT INTO TBL_TEST(ID, NAME, JUMIN, DEPT_ID) VALUES(4, 'Lee', '3234561234567', 20);
INSERT INTO TBL_TEST(ID, NAME, JUMIN, DEPT_ID) VALUES(5, 'Jung', '4234561234567', 30);
INSERT INTO TBL_TEST(ID, NAME, JUMIN, DEPT_ID) VALUES(6, 'Ahn', '5234561234567', 30);
INSERT INTO TBL_TEST(ID, NAME, JUMIN, DEPT_ID) VALUES(7, 'Cho', '6234561234567', 40);
INSERT INTO TBL_TEST(ID, NAME, JUMIN, DEPT_ID) VALUES(8, 'Jang', '7234561234567', 40);
INSERT INTO TBL_TEST(ID, NAME, JUMIN, DEPT_ID) VALUES(9, 'Lim', '8234561234567', 50);
INSERT INTO TBL_TEST(ID, NAME, JUMIN, DEPT_ID) VALUES(10, 'Yun', '9234561234567', 50);
COMMIT;
ALTER TABLE TBL_TEST RENAME TO TBL_TEST_TB;
CREATE OR REPLACE VIEW PDB_ACCT.TBL_TEST
AS SELECT
ID,
CRYPTO.DEC('normal', NAME, '', 0) NAME,
CRYPTO.DEC('pattern7', JUMIN, '', 0) JUMIN,
DEPT_ID
FROM PDB_ACCT.TBL_TEST_TB
CREATE OR REPLACE TRIGGER PDB_ACCT.TBL_TEST_TI
INSTEAD OF INSERT OR UPDATE
ON PDB_ACCT.TBL_TEST
FOR EACH ROW
BEGIN
IF INSERTING THEN
INSERT INTO PDB_ACCT.TBL_TEST_TB(
ID,
NAME,
JUMIN,
DEPT_ID)
VALUES(
:new.ID,
CRYPTO.ENC('normal', :new.NAME, ''),
CRYPTO.ENC('pattern7', :new.JUMIN, ''),
:new.DEPT_ID);
ELSIF UPDATING THEN
IF UPDATING('ID') THEN
UPDATE PDB_ACCT.TBL_TEST_TB SET ID=:new.ID WHERE ID = :old.ID;
END IF;
IF UPDATING('NAME') THEN
UPDATE PDB_ACCT.TBL_TEST_TB SET NAME=CRYPTO.ENC('normal', :new.NAME, '') WHERE ID = :old.ID;
END IF;
IF UPDATING('JUMIN') THEN
UPDATE PDB_ACCT.TBL_TEST_TB SET JUMIN=CRYPTO.ENC('pattern7', :new.JUMIN, '') WHERE ID = :old.ID;
END IF;
IF UPDATING('DEPT_ID') THEN
UPDATE PDB_ACCT.TBL_TEST_TB SET DEPT_ID=:new.DEPT_ID WHERE ID = :old.ID;
END IF;
END IF;
END TBL_TEST_TI;
/
에러내용
ON PDB_ACCT.TBL_TEST_TB
*
ERROR at line 3:
ORA-25002: cannot create INSTEAD OF triggers on tables
오라클 12버전인데 왜안되는지... 도저히모르겠어서 질문드립니다
아 참고로 PDB_ACCT계정 내에서 한거 맞습니다
해당 에러는 테이블에 INSTEAD OF 트리거를 걸 때 나는 에러입니다.
INSTEAD OF 트리거는 뷰에만 걸 수 있습니다.
즉, PDB_ACCT.TBL_TEST 가 뷰가 아니라 테이블이란 얘기가 되네요.
작업 계정이 맞는지? 해당 객체가 뷰인지? 테이블인지?
앞 선 단계의 작업들이 정상적으로 수행이 되었는지? 등등 검증을 해보세요.
뷰 생성 구문 마지막에 세미콜론 없는데? 이 부분도 확인해 보세요.
DB내에서 입력하면 모두 잘 처리 되었다고 나와서 된줄알았는데, 확인해보니, 암호화가 이뤄지지 않아 체크하던도중,
초기화하고 이번엔 외부DB툴(쿼리박스)에서 접속해서 다시 입력하니 트리거생성차레 들어가는순간
부적합한 SQL 유형입니다: sqlKind = UNINITIALIZED
Error code: 17439
SQL state: 99999
라고 나오네요
실질적으로 저게 테이블생성 ,뷰 생성 까지는 먹혔어도
트리거쪽에 문제가있는건지 DB내에서 입력했을때는 모두다 생성돠었다고 나오는데
외부DB툴들이 잘 걸러내는가 보네요... 이건 뭐가 문제인거죠...ㅠㅠ
정말 감사드립니다 뷰생성시 마지막 세미콜론(;) 하나 없어서 몇일을 해멨네요....
진작에 질문드릴걸 그랬나봅니다 나머지 내용도 정말 많은 도움이 되었습니다. 정말감사드립니다.
툴에 따라 SQL 을 실행하는 방법과 PL/SQL 을 실행하는 방법이 다를 수 있습니다.
아 그렇군요.. 답변이 됬습니다 감사합니다.