처음으로 만들 Helloworld 는 함수였습니다.

함수와 프로시져를 서로 만드는 법이 틀리죠. 하지만 구조가 많이 비슷합니다.


Functions

함수는 항상 리턴 값이 존재합니다. 그리고 꼭 하나의 값만 리턴합니다.

MySQL에서 자주 사용하는 CONCAT 라는 함수를 보겠습니다.


mysql> select concat(emp_name,' ',dept_id) from emps;

+------------------------------+

| concat(emp_name,' ',dept_id) |

+------------------------------+

| Roger 1 |

| John 2 |

| Alan 1 |

+------------------------------+

3 rows in set (0.00 sec)



위와 같이 두개의 글자를 합해서 하나의 글자로 리턴하는 CONCAT 함수를 보았습니다.

MySQL에서 제공하는 스트링 함수이지만 이제부터는 개발자가 직접 함수를 만들어 사용할수 있습니다.


함수는 꼭 Select 명령을 통해서만 결과를 볼수 있습니다.


Procedures



프로시져는 함수보다 작은 기능을 가지고 있습니다.

함수와 거의 같지만 리턴 값만 없다고 보시면 됩니다.

간단한 함수를 하나 만들어보겠습니다.


--------------------------------


create procedure helloprocedure()

select 'Hello Procedure' ;


---------------------------------


위에 Procedure를 실행시킬때는 call 이라는 명령어를 통해 실행시킵니다.


mysql> call helloprocedure();

+-----------------+

| Hello Procedure |

+-----------------+

| Hello Procedure |

+-----------------+

1 row in set (0.00 sec)


Query OK, 0 rows affected (0.00 sec)


이제 기존이 프로시져를 삭제하고 다시 생성해보겠습니다.

아래의 코드는 helloprocedure 라는 프로시져를 만들고

begin .. end 을 통해 작성하였습니다.

-------------------------------------------------

delimiter //


drop procedure if exists helloprocedure

//


create procedure helloprocedure()

begin

select 'Hello Procedure 2' ;

end

//

-------------------------------------------------


mysql> call helloprocedure() //

+-------------------+

| Hello Procedure 2 |

+-------------------+

| Hello Procedure 2 |

+-------------------+

1 row in set (0.00 sec)


Query OK, 0 rows affected (0.00 sec)


이제 여러분 간단하게 프로시져와 함수를 만들고 실행시키는 법에 대해서

간단하게 이해 하셨을거라 생각합니다.


http://mysql.gilfster.com/page.php?parent_id=1.1&page_id=1.1.4


SQLGate Development Team


http://www.antwiz.com


Blog : http://isql.blogspot.com/

신고
Posted by 나비 나비:D

첫번째로 helloworld 을 만들었는데 좀더 자세히 설명하도록 하겠습니다.


현재 Helloworld 함수는 varchar(20) 을 return 하도록 구성되어 있습니다.


간단하게 출력해 보면 보시는 바와 같 "Hello World" 을 출력합니다.


참 함수를 실행할때는 Select 명령어를 실행해야 합니다.


그럼 다시 한번 Helloworld 함수를 삭제하고 다른 내용을 출력해 보겠습니다.


먼저 helloworld을 Drop 시켜 보겠습니다.


Drop 명령어는 두가지가 있습니다.


drop function helloworld //


or


drop function if exists helloworld //


두 차이점은 코드에서 보는거 처럼 함수가 있음면 삭제할것인지 여부를 한번더 물어보시는거라 생각하시면 됩니다.

첫번째 drop 명령어는 helloworld 라는 함수가 없으면 에러는 발생합니다.


이 강좌에서는 drop function if exists 를 사용하겠습니다.


--------------------------------------------------------------------------

drop function if exists helloworld

//

create function helloworld() returns varchar(20)

begin

return "Hello World 2";

end

//

select helloworld() //

--------------------------------------------------------------------------

결과는


mysql> select helloworld() //

+---------------+

| helloworld() |

+---------------+

| Hello World 2 |

+---------------+

1 row in set (0.00 sec)


이정도 보셨으면 아주 간단함을 알수 있습니다.

다만 확실히 기억하실것은 Function 은 Return 값이 있어야 하고

함수를 실행시키실때는 Select 명령어를 통해서 한다는것 기억하세요 ^^


참조 : http://mysql.gilfster.com/page.php?parent_id=1.1&page_id=1.1.3


SQLGate Development Team

http://www.antwiz.com


Blog : http://isql.blogspot.com/

신고
Posted by 나비 나비:D

MySQL 5.0 의 새로운 기능에 대해서 조금씩 살펴보겠습니다.

하루에 한시간씩 정리해서 올려 놓도록 노력해보겠습니다.


본 내용은 http://mysql.gilfster.com 에서 발취한 내용입니다.

보다 많은 정보는 http://mysql.gilfster.com/ 에서 참조하시기 바랍니다.


개발환경

OS : Windows 2003

DB : MySQL 5.0.11

사양 : 팬티엄 4 CPU 3.00GHZ, 1.0 GB RAM


모든샘플링은 직접 커멘트에서 작성하기 때문에 바로 Copy 하셔서 사용하셔도 무방하실거라 생각됩니다.

----------


----------

사이에 코드는 직접 카피하셔도 되는 코드들입니다.


Test 데이타를 샘플링 하기 위해서 데이타베이스를 생성하고 테이블을 만든 후에 함수를 생성해 보겠습니다.


-----------------------------------------------------------------------------------

DELIMITER //


drop database if exists pers

//

create database pers

//

use pers

//

create table emps(emp_id int NOT NULL,

emp_name varchar(30),

dept_id int,

salary decimal(5,2),

primary key(emp_id))

//

insert into emps (emp_id,emp_name,dept_id,salary)

values (1,'Roger',1,2000.00),(2,'John',2,2500.00),(3,'Alan',1,2100.00)

//

select * from emps

//

create table dept (dept_id int NOT NULL,

description varchar(30),

primary key(dept_id))

//

insert into dept (dept_id,description)

values (1,'Information Technology'),(2,'Sales')

//

select * from dept

//

-----------------------------------------------------------------------------------

mysql> select * from dept //

+---------+------------------------+

| dept_id | description |

+---------+------------------------+

| 1 | Information Technology |

| 2 | Sales |

+---------+------------------------+

2 rows in set (0.00 sec)


위와 같은 내용이 나타나면 됩니다.

데이타베이스 pers 와 테이블 emps , dept 를 만들었습니다.


MySQL 5.0 이후 부터 delimiter 라는것이 생겼는데, 이것은 그전 버전에서 ; 로 명령을 분리했던것과는 차별을 두기 위해 만든것입니다.


위에 코드에서 보듯이

select * from dept //


라는 명령을 쳐야 실행되는걸 볼수 있는거 처럼 사용자가 구분자를 직접 지정할수 있습니다.


예를 들면


mysql> delimiter $$

mysql> select 'hello' $$

+-------+

| hello |

+-------+

| hello |

+-------+

1 row in set (0.00 sec)


이제 첫번째로 function 을 만들어 보겠습니다.


------------------------------

delimiter //

create function helloworld() returns varchar(20)

return "Hello World" //

-------------------------------

Query OK, 0 rows affected (0.00 sec)


함수를 처음으로 생성하였습니다. 이제 이 생성한 helloworld 함수를 호출해 보겠습니다.


mysql> select helloworld() //

+--------------+

| helloworld() |

+--------------+

| Hello World |

+--------------+

1 row in set (0.00 sec)


처음으로 글을 쓰는거라 잘 이해가 가지 않더라도 차차 좋아질거라 생각합니다.

다음에 다시 글 쓰겠습니다.


참조 : http://mysql.gilfster.com/page.php?parent_id=1.1&page_id=1.1.2


SQLGate Development Team

http://www.antwiz.com


Blog : http://isql.blogspot.com/

신고
Posted by 나비 나비:D

PROCEDURE와 FUNCTION의 차이점



- 프로시저는 매개변수로 데이터를 전달받을 수도 있고, 빋지 않을 수도 있다.

  실행 후 프로시저는 호출한 프로그램에게 값을 반환할 수도 있고, 안 할 수도 있다.


- 함수도 매개변수로 데이터를 전달받을 수도 있고, 빋지 않을 수도 있다.

  그러나 함수는 프로시저와 다르게 실행 후 반드시 하나의 값을 반환(RETURN)한다.


- 생성방법과 호출방법이 다르다.



 

1. Stored PROCEDURE(프로시저)


 

- 생성방법



CREATE [OR REPLACE] PROCEDURE 프로시저명(매개변수1, ...) IS [지역변수선언; ]


BEGIN

   처리명령문;

   ......;


[EXCEPTION]

  [ 처리명령문;]

  [......;]


END [프로시저명];



- 호출방법 : SQL*PLUS 커맨드창에서 SQL>EXECUTE 프로시저명(매개변수1,...)




2. Function(함수)



- 생성방법



CREATE [OR REPLACE] Function 함수명(매개변수1, ...)

RETURN 데이터타입

IS [지역변수선언; ]


BEGIN

   처리명령문;

   ......;

   RETURN 변수명;


[EXCEPTION]

  [ 처리명령문;]

  [......;]


END [함수명];



- 호출방법 : SQL내장함수와 동일. SELECT문 내에서 사용하면 된다.

                 예를 들어, 함수명이 CONVERT라면,

                 SELECT CONVERT(매개변수1,...) FROM TABLE명

신고
Posted by 나비 나비:D

BLOG main image
by 나비:D

공지사항

카테고리

분류 전체보기 (278)
Programming? (0)
----------------------------- (0)
나비의삽질 (5)
Application (177)
SQL (51)
Web (27)
etc. (14)
Omnia (0)
---------------------------.. (0)

글 보관함

달력

«   2017/12   »
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            
Total : 894,884
Today : 42 Yesterday : 238