DB 암호화 솔루션 플러그인 방법 완료하고 테스트중입니다만 에러..발생 5

by 이지상 [Oracle 에러코드] [2021.08.05 14:20:02]


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계정 내에서 한거 맞습니다

by 마농 [2021.08.05 14:53:53]

해당 에러는 테이블에 INSTEAD OF 트리거를 걸 때 나는 에러입니다.
INSTEAD OF 트리거는 뷰에만 걸 수 있습니다.
즉, PDB_ACCT.TBL_TEST 가 뷰가 아니라 테이블이란 얘기가 되네요.
작업 계정이 맞는지? 해당 객체가 뷰인지? 테이블인지?
앞 선 단계의 작업들이 정상적으로 수행이 되었는지? 등등 검증을 해보세요.
뷰 생성 구문 마지막에 세미콜론 없는데? 이 부분도 확인해 보세요.


by 이지상 [2021.08.05 16:25:37]

DB내에서 입력하면 모두 잘 처리 되었다고 나와서 된줄알았는데, 확인해보니, 암호화가 이뤄지지 않아 체크하던도중,

초기화하고 이번엔 외부DB툴(쿼리박스)에서 접속해서 다시 입력하니 트리거생성차레 들어가는순간

 

부적합한 SQL 유형입니다: sqlKind = UNINITIALIZED
Error code: 17439
SQL state: 99999

라고 나오네요

실질적으로 저게 테이블생성 ,뷰 생성 까지는 먹혔어도

트리거쪽에 문제가있는건지 DB내에서 입력했을때는 모두다 생성돠었다고 나오는데

외부DB툴들이 잘 걸러내는가 보네요... 이건 뭐가 문제인거죠...ㅠㅠ


by 이지상 [2021.08.05 15:08:32]

정말 감사드립니다 뷰생성시 마지막 세미콜론(;)  하나 없어서 몇일을 해멨네요....

진작에 질문드릴걸 그랬나봅니다 나머지 내용도 정말 많은 도움이 되었습니다. 정말감사드립니다.


by 마농 [2021.08.05 16:59:55]

툴에 따라 SQL 을 실행하는 방법과 PL/SQL 을 실행하는 방법이 다를 수 있습니다.


by 이지상 [2021.08.05 17:04:30]

아 그렇군요.. 답변이 됬습니다 감사합니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입