DB

[MS-SQL] 게시판 게시물 저장시 금지어 체크 하는 프로시저 구현 방법

다음은 데이터를 저장시 프로시저를 이용하여 사용자가 입력한 내용 중에 금지어가 있는지 체크하여 리턴하는 방법에 대해 알아봅니다.

 

게시판 게시물 금지어 체크 하는 방법

1. 금지어를 관리하는 테이블 생성

2. 금지어 INSERT

3. 금지어를 체크하는 스칼라반환 함수 생성

4. 저장 프로시저내에 금지어 체크로직 구현

 

제일 먼저 테이블을 생성합니다.

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_PADDING ON
GO

CREATE TABLE [dbo].[TB_WORD](
	[SUB_SEQ] [smallint] NOT NULL,
	[WORD] [nvarchar](50) NOT NULL,
	[WORD_LANG_CD] [varchar](30) NOT NULL,
	[INSERT_USER] [varchar](30) NOT NULL,
	[INSERT_TIME] [datetime2](7) NOT NULL,
	[USE_YN] [varchar](1) NOT NULL,

 CONSTRAINT [PK_TB_WORD] PRIMARY KEY CLUSTERED 
(
	[SUB_SEQ] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO

ALTER TABLE [dbo].[TB_WORD] ADD  DEFAULT (getdate()) FOR [INSERT_TIME]
GO

 

2. 금지어 관련 데이터를 INSERT 합니다.

INSERT INTO TB_WORD (SUB_SEQ,WORD,WORD_LANG_CD,INSERT_USER,USE_YN ) VALUES(1 , '바보','KO','admin','Y')
INSERT INTO TB_WORD (SUB_SEQ,WORD,WORD_LANG_CD,INSERT_USER,USE_YN ) VALUES(2 , '멍충이','KO','admin','Y')
INSERT INTO TB_WORD (SUB_SEQ,WORD,WORD_LANG_CD,INSERT_USER,USE_YN ) VALUES(3 , 'idiot','EN','admin','Y')

저장된 데이터는 다음과 같이 조회됩니다.


 

3. 금지어를 체크할 함수를 구현합니다.

체크할 문장이 넘어 왔을 때 금지어가 포함되어 있다면 해당 금지어를 리턴합니다.

CREATE FUNCTION FN_CHECK_WORD
(
	@P_TXT NVARCHAR(MAX)
)
RETURNS NVARCHAR(MAX)
AS
BEGIN
	DECLARE @V_RESULT NVARCHAR(MAX);

	SET @V_RESULT = (	SELECT	TOP 1 WORD FROM TB_WORD
						WHERE CHARINDEX(WORD, @P_TXT) > 0
						ORDER BY CHARINDEX(WORD, @P_TXT)
					);

	RETURN @v_result;
END

 

 

생성한 함수를 실행해볼까요?

일치하는 키워드가 존재하는 경우, 해당 키워드를 리턴합니다.


일치하는 키워드가 없을 경우에는 NULL을 반환합니다.


 

4. 저장 프로시저 내에 체크 스크립트를 추가합니다.

DECLARE @P_ACT_PLAN_TXT		NVARCHAR(MAX) = ''
DECLARE @P_RETURN_STR		NVARCHAR(100) = ''
DECLARE @P_ERROR_CD		NVARCHAR(10) = ''
DECLARE @V_WORD NVARCHAR(MAX) = '';
				
SET @P_ACT_PLAN_TXT ='너 멍충이지?'

IF @P_ACT_PLAN_TXT != ''
BEGIN
	SET @V_WORD = (SELECT DBO.FN_CHECK_WORD (@P_ACT_PLAN_TXT))
	IF @V_WORD IS NOT NULL
	BEGIN
		SET @P_ERROR_CD = 'MSG1001';
		SET @P_RETURN_STR = '금지어('+@V_WORD+')가 포함되어 있습니다.'
		--SELECT @P_RETURN_STR
		RETURN;
	END
END

[실행결과]


오늘은 여기까지!!

 

 

Leave a Reply

error: Content is protected !!