MySQL에서는 SELECT 문의 FROM 절에 저장 프로시저를 직접 사용할 수 없습니다. 대신 CALL 명령어로 저장 프로시저를 먼저 호출한 후, 그다음 SELECT 문을 실행하여 결과를 확인하는 방식을 사용해야 합니다.
1. 테이블 생성하기
먼저 예제에 사용할 테이블을 생성하겠습니다.
mysql> create table DemoTable2
-> (
-> CustomerId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> CustomerName varchar(100),
-> ShippingDateTime datetime
-> );
Query OK, 0 rows affected (0.66 sec)
2. 저장 프로시저 생성하기
다음은 데이터를 삽입하는 저장 프로시저를 만드는 쿼리입니다.
mysql> DELIMITER //
mysql> CREATE PROCEDURE insert_information(Name varchar(100),shippingtime datetime)
-> BEGIN
->
-> INSERT INTO DemoTable2(CustomerName,ShippingDateTime) VALUES(Name,shippingtime);
-> END
-> //
Query OK, 0 rows affected (0.16 sec)
mysql> DELIMITER ;
DELIMITER //로 구분 기호를 변경한 후 프로시저 본문을 정의하고, 마지막에 다시 원래 구분 기호(;)로 되돌리는 것이 일반적인 작성 패턴입니다.
3. CALL 명령어로 저장 프로시저 호출하기
이제 CALL 명령어를 사용하여 저장 프로시저를 호출할 수 있습니다.
mysql> call insert_information('Chris',NOW());
Query OK, 1 row affected, 1 warning (0.15 sec)4. SELECT 문으로 결과 확인하기
저장 프로시저를 호출한 후, 아래와 같이 SELECT 문을 실행하여 테이블에 저장된 레코드를 조회합니다.
mysql> select *from DemoTable2;
위 쿼리를 실행하면 다음과 같은 출력 결과를 얻을 수 있습니다.
+------------+--------------+---------------------+
| CustomerId | CustomerName | ShippingDateTime |
+------------+--------------+---------------------+
| 1 | Chris | 2019-04-08 15:03:07 |
+------------+--------------+---------------------+
1 row in set (0.00 sec)
정리
MySQL에서는 SQL Server처럼 SELECT * FROM 프로시저명 형태로 저장 프로시저의 결과를 바로 조회할 수 없습니다. 반드시 CALL 명령어로 프로시저를 실행한 뒤, 필요하다면 임시 테이블에 결과를 담아 SELECT로 조회하는 절차를 거쳐야 한다는 점을 기억해 두시기 바랍니다.