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
'programing' 카테고리의 다른 글
"소시지 만드는 법" apache/php/mysql 상호 작용 견학 (0) | 2023.11.01 |
---|---|
관리자 편집 순서로 표시되는 값을 WooCommerce 체크아웃에 사용자 지정 확인란 추가 (0) | 2023.11.01 |
팬더 읽기 _excel: 'utf-8' 코덱이 위치 14에서 바이트 0xa8을 디코딩할 수 없음: 잘못된 시작 바이트 (0) | 2023.11.01 |
Oracle 정점에서 한 페이지를 다른 페이지에 연결 (0) | 2023.10.27 |
MySQL 저장 프로시저 권한 (0) | 2023.10.27 |