본문 바로가기
DataBase/MySQL

MYSQL-프로시져, 함수 기본 문법

by 백룡화검 2008. 6. 27.

출처 휴~ | 나를위해
원문 http://blog.naver.com/paulmaur/90005333346

작성자 정왕균(areakr) 작성일 2006-04-30 18:06:38ⓒ
2006-05-06 15:23:09ⓜ 조회수 363
문법이 다른 디비와 다르고 자료가 많지 않아 적당한 수식으로 올립니다.

문자로 받아도 연산을 하면 변환없이 바로 상수로 처리됩니다.

CREATE FUNCTION `fnName`(GSCode char) RETURNS char(50)
BEGIN

Declare TRef, CAmount1, SellProc, CAFlag int;
##숫자형 연결하기

Set TRef = CONCAT((GSCode+10) % 65 , Right(GSCode*33, 3) );

##쿼리해서 결과 변수에 넣기

SELECT count(*) INTO CAFlag From tablename;

IF CAFlag>0 THEN
Set SellProc = 1;

SELECT CAmount INTO CAmount1 FROM tablenameWHERE col=2;
ELSE
Set SellProc = 0;

END IF;

CASE case_value
WHEN when_value THEN statement_list
[WHEN when_value THEN statement_list] ...
[ELSE statement_list]
END CASE

Or:

CASE
WHEN search_condition THEN statement_list
[WHEN search_condition THEN statement_list] ...
[ELSE statement_list]
END CASE

[begin_label:] LOOP
statement_list
END LOOP [end_label]

LEAVE label

This statement is used to exit any labeled flow control construct. It can be used within BEGIN ... END or loop constructs (LOOP, REPEAT, WHILE).

ITERATE label

ITERATE can appear only within LOOP, REPEAT, and WHILE statements. ITERATE means “do the loop again.”

[begin_label:] REPEAT
statement_list
UNTIL search_condition
END REPEAT [end_label]

[begin_label:] WHILE search_condition DO
statement_list
END WHILE [end_label]

RETURN SellProc;

END$$

함수 호출은

SELECT fnName('1111');

바리너리 로그를 사용할 때 실행한 함수의 로그때문에 함수의 타입을 설정해야 합니다.

returns char(50) 다음에 DETERMINISTIC, NO SQL 등을 추가해줘야 합니다.

프로시저는 바이너리 로그에 프로시저를 호출한 것은 로그로 남기지 않고 프로시저 안에서 실행한 쿼리문을 그대로 로그로 남깁니다. 함수는 DO 함수명 인가로 남깁니다.

프로시져는 반환값이 없고 Call 프로시저명 으로 호출합니다.

그럼 MySQL 승리를 위해...