관리 메뉴

여름 언덕에서 배운 것

프로시저에서 쓰는 변수 본문

가랑비에 옷 젖는 줄 모른다 💻/SQL & DB

프로시저에서 쓰는 변수

잔뜩 2023. 8. 9. 19:02

https://codingapple.com/

 

코딩애플 온라인 강좌 - 개발자도 단기완성!

단연 NO1 강사님의 NO.1 강의 역시나 명강입니다. IT 업계의 대치동 NO1. 강사같은 엄청난 강의력. 코딩애플님의 강의는, 엄청나게 기초적인 것부터 가르치는 듯 보이지만, 실제로 다루는 깊이는 절

codingapple.com

자료를 잠깐 저장하고 싶으면 변수를 사용하자.

 

변수 문법

SET @변수명 = 저장할값;

SET @변수명 := 저장할값;

SELECT @변수명 := 저장할값;

 

프로시저는 긴 SQL문을 한 단어로 축약,

변수에는 숫자,문자,binary,null 자료 1개만 저장 가능

 

SET @age = 20;
SELECT @age;

20이 출력된다.

 

SET @price = 6000;
SELECT * FROM product WHERE 가격 = @price;

가격이 6000인 상품을 가져오라는 뜻이다.

SET @price = (SELECT COUNT(*) FROM product WHERE 가격 = 5000) 

서브쿼리를 넣어도 상관이 없다.

SET @age =  20;
SET @age = @age + 1;
SELECT @age;

21이 출력된다.

 

프로시저 안에서 변수 선언하기

CREATE PROCEDURE mart.var_test() 
BEGIN 
  DECLARE 변수1 INT;
  DECLARE 변수2 VARCHAR(100);
  DECLARE 변수3 INT DEFAULT 123;
END 

DECLARE 변수명 데이터타입; 로 정의하며 여기서는 @ 안써도 된다.

default는 초기값 설정해주고 싶을 때 사용한다.

DECLARE 로 만든 변수에 데이터 저장시엔 똑같이 SET 키워드로 변수에 마음대로 데이터 저장가능

 

DECLARE 변수 vs @변수 차이점 

 

@변수는 전역변수로 한번 만들면  DBMS 프로그램이 종료될때 까지 남아있으면 전역 sql 파일에서 사용가능하다.

DECLARE는 지역변수로 변수를 만든 프로시저 내에서만 사용 가능합니다. 프로시저 종료시 바로 사라진다.

 

DROP PROCEDURE IF EXISTS mart.var_test;

DELIMITER $$
CREATE PROCEDURE mart.var_test()
BEGIN
  DECLARE 나이 int DEFAULT 10;
  SET 나이 = 나이 + 10; 
  SELECT 나이;

END
$$ 
DELIMITER ;

CALL mart.var_test();
CALL mart.var_test();
CALL mart.var_test();

CALL 3개 모두  20이 출력됩니다! 20,30,40이 아니다

procedure는 실행할 때 마다 DECLARE 변수는 리셋된다

 

DROP PROCEDURE IF EXISTS mart.var_test;

DELIMITER $$
CREATE PROCEDURE mart.var_test()
BEGIN
  SET @나이 = @나이 + 10;
  SELECT 나이;

END
$$ 
DELIMITER ;

SET @나이 = 10;
CALL mart.var_test();
CALL mart.var_test();
CALL mart.var_test()

1.나이 변수를 프로시저가 아닌 바깥에 먼저 선언

2.20,30,40 순으로 출력된다.

3. 왜냐면 한번 @변수로 선언하면 프로그램 종료시까지 남아있어서 가능하다.

 

 

숙제🍎

 

728x90