programing

MySQL 구분 기호를 사용하여 저장 프로시저 구문 생성

telecom 2023. 11. 1. 22:07
반응형

MySQL 구분 기호를 사용하여 저장 프로시저 구문 생성

MySQL에서 다음과 같은 구분 기호를 사용하여 저장 프로시저를 만들려고 합니다.

use am;

DELIMITER $$

CREATE PROCEDURE addfields()
BEGIN
  DECLARE done INT DEFAULT FALSE;
  DECLARE acc INT(16);
  DECLARE validId INT DEFAULT 0;

END $$

DELIMITER ;

오류가 납니다.

#1304 - PROCEDURE addfields already exists

구분 기호를 사용하여 저장 프로시저를 만들고 먼저 존재할 경우 삭제하기 위한 적절한 구문은 무엇입니까?

MySQL에 저장된 프로시저 구문으로 시작하기(단말 사용):

1. 다음과 같이 단말기를 열고 mysql에 로그인합니다.

el@apollo:~$ mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
mysql> 

2. 절차가 있는지 확인해 보십시오.

mysql> show procedure status;
+-----------+---------------+-----------+---------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
| Db        | Name          | Type      | Definer | Modified            | Created             | Security_type | Comment | character_set_client | collation_connection | Database Collation |
+-----------+---------------+-----------+---------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
|   yourdb  | sp_user_login | PROCEDURE | root@%  | 2013-12-06 14:10:25 | 2013-12-06 14:10:25 | DEFINER       |         | utf8                 | utf8_general_ci      | latin1_swedish_ci  |
+-----------+---------------+-----------+---------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
1 row in set (0.01 sec)

나는 정의된 것이 하나 있는데, 당신은 아마 시작할 것이 없을 것입니다.

3. 데이터베이스를 변경하고 삭제합니다.

mysql> use yourdb;
Database changed

mysql> drop procedure if exists sp_user_login;
Query OK, 0 rows affected (0.01 sec)
    
mysql> show procedure status;
Empty set (0.00 sec)
    

4. 네, 이제 저장 프로시저가 정의되지 않았습니다.가장 간단한 것을 만듭니다.

mysql> delimiter //
mysql> create procedure foobar()
    -> begin select 'hello'; end//
Query OK, 0 rows affected (0.00 sec)

저장 프로시저에 대한 명령 입력이 완료되면 // 가 단말기로 통신합니다.저장 프로시저 이름은 foobar 입니다.매개 변수를 사용하지 않으므로 "hello"를 반환해야 합니다.

5. 거기 있는지 확인하고 구분 기호를 다시 설정하는 것을 기억하세요!:

 mysql> show procedure status;
 -> 
 -> 

알았어요! 왜 안됐죠?구분 기호를 다음과 같이 설정합니다.//기억 나?다시 설정 위치;

6. 구분 기호를 다시 설정하고 절차를 살펴봅니다.

mysql> delimiter ;
mysql> show procedure status;
+-----------+--------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
| Db        | Name   | Type      | Definer        | Modified            | Created             | Security_type | Comment | character_set_client | collation_connection | Database Collation |
+-----------+--------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
| yourdb    | foobar | PROCEDURE | root@localhost | 2013-12-06 14:27:23 | 2013-12-06 14:27:23 | DEFINER       |         | utf8                 | utf8_general_ci      | latin1_swedish_ci  |
+-----------+--------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
1 row in set (0.00 sec)

   

7. 실행:

mysql> call foobar();
+-------+
| hello |
+-------+
| hello |
+-------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)

안녕하세요 월드 컴플리트, 더 나은 것으로 덮어씁니다.

8. 푸바를 떨어뜨린 후 매개변수를 사용하도록 다시 정의한 후 다시 실행합니다.

mysql> drop procedure foobar;
Query OK, 0 rows affected (0.00 sec)

mysql> show procedure status;
Empty set (0.00 sec)

mysql> delimiter //
mysql> create procedure foobar (in var1 int)
    -> begin select var1 + 2 as result;
    -> end//
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;
mysql> call foobar(5);
+--------+
| result |
+--------+
|      7 |
+--------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)

좋네요! 입력하고 수정하고 출력하는 절차를 만들었습니다.이제 아웃 변수를 해보겠습니다.

9. 푸바 제거, 아웃 변수 만들기, 실행:

mysql> delimiter ;
mysql> drop procedure foobar;
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter //
mysql> create procedure foobar(out var1 varchar(100))
    -> begin set var1="kowalski, what's the status of the nuclear reactor?";
    -> end//
Query OK, 0 rows affected (0.00 sec)


mysql> delimiter ;
mysql> call foobar(@kowalski_status);
Query OK, 0 rows affected (0.00 sec)

mysql> select @kowalski_status;
+-----------------------------------------------------+
| @kowalski_status                                    |
+-----------------------------------------------------+
| kowalski, what's the status of the nuclear reactor? |
+-----------------------------------------------------+
1 row in set (0.00 sec)

10. MySQL에서의 INOUT 사용 예:

mysql> select 'ricksays' into @msg;
Query OK, 1 row affected (0.00 sec)


mysql> delimiter //
mysql> create procedure foobar (inout msg varchar(100))
-> begin
-> set msg = concat(@msg, " never gonna let you down");
-> end//


mysql> delimiter ;


mysql> call foobar(@msg);
Query OK, 0 rows affected (0.00 sec)


mysql> select @msg;
+-----------------------------------+
| @msg                              |
+-----------------------------------+
| ricksays never gonna let you down |
+-----------------------------------+
1 row in set (0.00 sec)

효과가 있었군요, 끈을 하나로 묶었어요.변수 msg를 정의하고 해당 변수를 foobar라고 하는 저장 프로시저에 전달한 다음 @msg를 foobar에 기록했습니다.

이제 구분 기호를 사용하여 저장 프로시저를 만드는 방법을 알게 되었습니다.여기서 이 자습서를 계속하고 저장된 프로시저 내의 변수부터 시작합니다. http://net.tutsplus.com/tutorials/an-introduction-to-stored-procedures/

다음은 구분 기호가 있는 MYSQL 저장 프로시저 샘플 및 호출 방법입니다.

DELIMITER $$

DROP PROCEDURE IF EXISTS `sp_user_login` $$
CREATE DEFINER=`root`@`%` PROCEDURE `sp_user_login`(
  IN loc_username VARCHAR(255),
  IN loc_password VARCHAR(255)
)
BEGIN

  SELECT user_id,
         user_name,
         user_emailid,
         user_profileimage,
         last_update
    FROM tbl_user
   WHERE user_name = loc_username
     AND password = loc_password
     AND status = 1;

END $$

DELIMITER ;

호출, mysql_connection specification 및

$loginCheck="call sp_user_login('".$username."','".$password."');";

절차 결과를 반환합니다.

MySQL에서 프로시저를 만드는 코드는 다음과 같습니다.

DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `procedureName`(IN comId int)
BEGIN
select * from tableName 
         (add joins OR sub query as per your requirement)
         Where (where condition here)
END $$
DELIMITER ;

이 절차를 호출하려면 다음 쿼리를 사용합니다.

call procedureName(); // without parameter
call procedureName(id,pid); // with parameter

상세 정보 :

1) 정의: root은 사용자 이름이며, mysql localhost의 사용자 이름이 호스트이므로 호스트 서버에서 이 쿼리를 실행하면 서버의 IP 주소로 변경할 수 있습니다.

자세한 내용은 여기를 참조하십시오.

다음과 같은 간단한 MySQL 프로시저를 만들었습니다.

DELIMITER //
CREATE PROCEDURE GetAllListings()
 BEGIN
 SELECT nid, type, title  FROM node where type = 'lms_listing' order by nid desc;
END //
DELIMITER;

이것을 따라주세요.프로시저 생성 후 동일한 내용을 확인하고 실행할 수 있습니다.

SQL 저장 프로시저 생성

DELIMiTER $$
create procedure GetUserRolesEnabled(in UserId int)
Begin

select * from users
where id=UserId ;
END $$
DELIMITER ;

언급URL : https://stackoverflow.com/questions/15786240/mysql-create-stored-procedure-syntax-with-delimiter

반응형