쿼리문에서 마스킹을 하는 작업을 또 하게 되었다.
두 가지의 컬럼을 마스킹을 했다.
하나의 컬럼은 앞서 작성된 [SQL]마스킹하기(아스타) 게시글에 작성한대로 마스킹 작업을 진행했다.
SELECT SUBSTR(INFO,1,6)||'****'||'SUBSTR(INFO,10,6)'
FROM TABLE
이렇게!!!!!!!!
다른 컬럼은 SQL내에서 FUNCTION을 사용했다....
아무리 보아도 FUNCTION과 PROCEDURE의 차이를 모르겠다;;;
일단 오늘 함수를 사용한 쿼리문을 봤기 때문에 함수만 말해야징
우선 함수를 만드는 방법이다.
CREATE FUNCTION WOOFER() ...
웅 그냥 CREATE하고 함수명 적어준다 (from IBM 공식 문서)
CREATE OR REPLACE FUNCTION MASKING(NUM VARCHAR(100))
RETURNS VARCHAR(100)
SPECIFIC SQL20230727155400
이건 함수를 만들거나 같은 것이 있으면 덮어씌우는 것이다. 그리고 인풋 파라미터도 받았다.
함수는 무조건 return 값을 가져야 한다.
return 값의 타입을 정의해준다.
그리고 함수의 인스턴스에 대해 고유한 이름을 제공한다. 안해주면 사실 알아서 해준다.
그 외의 설정이 더 있으나
https://www.ibm.com/docs/ko/db2/11.1?topic=statements-create-function-sql-scalar-table-row
얘를 참조해보자
CREATE OR REPLACE FUNCTION MASKING(NUM VARCHAR(100))
RETURNS VARCHAR(100)
SPECIFIC SQL20230727155400
NOT SECURED
LANGUAGE SQL
NOT DETERMINISTIC
READS SQL DATA
EXTERNAL ACTION
INHERIT SPECIAL REGISTERS
BEGIN ATOMIC
DECLARE NUM VARCHAR(100) DEFAULT '';
SET MSKNUM=(
SELECT CASE WHEN (NUM IS NULL OR NUM='') THEN NUM
WHEN LENGTH(TRIM(NUM))<3 THEN NUM
ELSE SUBSTR SUBSTR(TRIM(NUM),1,3)||'***'
END
FROM SYSIBM.DUAL
);
RETURN MSKNUM;
END;
BEGIN ATOMIC 뒤에서 함수 내부? 로직?을 작성해준다.
들어온 파라미터를 가지고 마스킹을 해주는데 사실 테이블이 필요없으니 그냥 dummy 테이블을 사용했다.
그리고 결과를 RETURN하면서 함수를 벗어난다.