복붙노트

[SQL] 구분 기호와 저장 프로 시저 구문을 만들 MYSQL

SQL

구분 기호와 저장 프로 시저 구문을 만들 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

구분 기호로 저장 프로 시저를 만들고 처음있는 경우이를 삭제에 대한 적절한 구문은 무엇입니까?

해결법

  1. ==============================

    1.여기 구분하는 방법과 전화하는 방법과 저장 프로 시저 샘플 MYSQL입니다 ..

    여기 구분하는 방법과 전화하는 방법과 저장 프로 시저 샘플 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 사양에 의해 호출

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

    이 과정에서 결과를 반환합니다.

  2. ==============================

    2.좋은 프로그래머는 GUI가 중간에 부드러운 당신을하고, 터미널을 사용합니다. 당신이 그것을 사용하고 명령을 기억받을 때 5 배 빠른 속도로 어떤 GUI보다. 생산성 성공을 =.

    좋은 프로그래머는 GUI가 중간에 부드러운 당신을하고, 터미널을 사용합니다. 당신이 그것을 사용하고 명령을 기억받을 때 5 배 빠른 속도로 어떤 GUI보다. 생산성 성공을 =.

    1.이 같은 MySQL의에 터미널 및 로그인 :

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

    당신이 어떤 절차가 있는지 살펴보십시오합니다 :

    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)
    

    나는 사람은 아마 당신은 밖으로 시작하는 아무도 없어, 정의했습니다.

    데이터베이스로 변경은 삭제합니다.

    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입니다. 이 매개 변수를 사용하지 않고 "안녕하세요"를 반환해야합니다.

    그것은 거기 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. 드롭는 foobar는 매개 변수를 받아 다시 정의하고이를 다시 실행 :

    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. 제거는 foobar, 아웃 변수를 확인, 실행 :

    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)
    

    MySQL은 INOUT 사용량의 10 예 :

    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)
    

    이 일을 좋아, 그것은 함께 문자열에 합류했다. 그래서 당신은 저장 프로 시저라고는 foobar로 그 변수에 전달 된 변수 MSG를 정의하고, @msg이는 foobar에 의해 작성되었습니다.

    지금 당신은 구분 기호로 저장 프로 시저를 만드는 방법을 알고. 여기에이 튜토리얼을 계속 저장 프로 시저 내에서 변수의 시작 : http://net.tutsplus.com/tutorials/an-introduction-to-stored-procedures/

  3. ==============================

    3.다음은 MySQL의에서 프로 시저를 작성하려면 코드는 다음과 같습니다

    다음은 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) DEFINER : 루트 사용자 이름이며 서버를 호스팅에서이 쿼리를 실행하면 서버의 IP 주소로 변경할 수 있습니다 호스트가 MySQL은 로컬 호스트의 사용자 이름에 따라 변경합니다.

    자세한 내용 여기를 읽어

  4. ==============================

    4.아래에 주어진 나는 간단한 MySQL의 절차를 만들었습니다 :

    아래에 주어진 나는 간단한 MySQL의 절차를 만들었습니다 :

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

    친절이 따릅니다. 절차가 생성 된 후에는 동일한 참조하고 실행할 수 있습니다.

  5. ==============================

    5.

    DELIMiTER $$
    create procedure GetUserRolesEnabled(in UserId int)
    Begin
    
    select * from users
    where id=UserId ;
    END $$
    DELIMITER ;
    
  6. from https://stackoverflow.com/questions/15786240/mysql-create-stored-procedure-syntax-with-delimiter by cc-by-sa and MIT license