320x100
320x100

MariaDB 형식에 맞춘 프로시저 (SQL/PSM 프로시저)

  • 프로시저에서 함수와 다른 프로시저를 호출하여 연산하는 기능
-- DELIMITER $$
CREATE OR REPLACE PROCEDURE register_member (
IN name VARCHAR(255),
IN phone VARCHAR(255),
IN date TIME(6),
IN comment VARCHAR(255))

BEGIN
DECLARE MEMBER_CODE INT(8);
DECLARE res JSON;
DECLARE req JSON;

SET @res = person_info.response();
SET @req = person_info.new_request(
@name,
@phone',
@comment,
'2mukee-company');

CALL expire_calculator.calculate(@req, 'DATE', to_char(@date, 'yyyy-mm-dd"T"hh24:mi:ss'));
CALL regist_server.invoke(@req, @res);

END
-- $$
-- DELIMITER ;
  • MariaDB에서 FUNCTION을 호출 할 때
    • SELECT 함수();
  • MariaDB의 프로시저 혹은 함수에서 FUNCTION을 호출할 때
    • SET 반환값을_받을_변수 = DB.함수();
  • MariaDB의 프로시저 혹은 함수에서 PROCEDURE를 호출할 때
    • CALL DB.프로시저명();

MariaDB 프로시저 호출

CALL register_member('2mukee', '010-1234-6678', '2022-04-29 04:15:41.000', '안녕하세요');

MariaDB 형식에 맞춘 함수

-- DELIMITER $$
CREATE OR REPLACE FUNCTION register_member (
IN name VARCHAR(255),
IN phone VARCHAR(255),
IN date TIME(6),
IN comment VARCHAR(255))

BEGIN
DECLARE MEMBER_CODE INT(8);
DECLARE res JSON;
DECLARE req JSON;
DECLARE result INT(255);

SET @res = person_info.response();
SET @req = person_info.new_request(
@name,
@phone',
@comment,
'2mukee-company');

CALL expire_calculator.calculate(@req, 'DATE', to_char(@date, 'yyyy-mm-dd"T"hh24:mi:ss'));
CALL regist_server.invoke(@req, @res);

SET @result = regist_server.is_complete(@name);

RETURN result;

END
-- $$
-- DELIMITER ;

MariaDB 함수 호출

SELECT register_member('2mukee', '010-1234-6678', '2022-04-29 04:15:41.000', '안녕하세요');

MariaDB에서 프로시저와 함수 저장이 안될 때

  • sql_upgrade -u root -p
    • 기존 테이블의 어떤 데이터도 건드리지 않으면서 mariadb-upgrade/mysql_upgrademysql 데이터베이스에 누락된 테이블을 다시 생성하는 명령어
    • DB의 테이블을 확인하고 최신 버전으로 업데이트
    • 공식문서에 의하면 새 MariaDB 서버를 시작한 후 실행 되고 이전 버전을 종료하기 전에 실행해도 아무런 문제가 없음
    • 실행하기 전에 모든 DB를 백업하는 것이 좋음
    • 대부분 몇 초면 끝난다고 함
    • Privilieges 가 초기화 됨
      • 테스트 결과 Priviliges 설정이 변하지는 않았음
  • 공식문서
  • 업그레이드 필요여부 확인 방법
    • mysql_upgrade -u root -p check-if-upgrade-is-needed
300x250
728x90