当前位置:网站首页>MySQL stored procedure

MySQL stored procedure

2022-06-26 19:37:00 yly. py

Defining variables

SET @username = ‘yly’;

Defined function

DROP FUNCTION IF EXISTS select_by;
DELIMITER //
CREATE FUNCTION select_by(INT(10) user_id)
RETURNS VARCHAR(25)
	DETERMINISTIC #  Whether there is certainty -> Whether the multiple execution results are the same 
	CONTAINS SQL #  Does it include sql
	READS SQL DATA #  Just read sql data , No modification 
	#  If you do not add the above restrictions, an error will be reported 

BEGIN
        RETURN (SELECT username FROM sys_user su WHERE su.user_id=user_id);
END //
DELIMITER ;

Call function

SELECT select_by(2022);

Define stored procedures

-- in
DROP PROCEDURE IF EXISTS select_user_by_username;
DELIMITER $$
CREATE PROCEDURE select_user_by_username(IN username VARCHAR(20)) -- IN  Enter the reference  OUT  The ginseng  INOUT  Will do 
BEGIN
	SELECT * FROM sys_user su
	WHERE su.username=username;
END $$
DELIMITER ;
-- out
DROP PROCEDURE IF EXISTS select_user_by_username;
DELIMITER $$
CREATE PROCEDURE select_user_by_username(IN username VARCHAR(20),OUT userdata VARCHAR(40)) -- IN  Enter the reference  OUT  The ginseng  INOUT  Will do 
BEGIN
	SELECT su.username INTO userdata 
	FROM sys_user su
	WHERE su.username=username;
END $$
DELIMITER ;

Calling stored procedure

-- 1
CALL select_user_by_username('yly');
-- 2
SET @username = '';
CALL select_user_by_username('yly',@username);
SELECT @username;

View stored procedures

-- 1
--  Create information 
SHOW CREATE PROCEDURE select_user_by_username;
SHOW CREATE FUNCTION select_by;

--  State information 
SHOW PROCEDURE STATUS LIKE '';
SHOW FUNCTION STATUS LIKE '';
--2  from information_schema.Routines View the information of stored procedures and functions in the table 
SELECT * FROM information_schema.Routines 
WHERE ROUTINE_NAME='select_user_by_username' AND ROUTINE_TYPE='PROCEDURE';
SELECT * FROM information_schema.Routines 
WHERE ROUTINE_NAME='select_by' AND ROUTINE_TYPE='FUNCTION';

--  modify 
ALTER PROCEDURE select_user_by_username
COMMENT ' adopt username Query the user ';

--  Delete 
DROP PROCEDURE IF EXISTS select_user_by_username;

## mysql Variable 

mysql System variables

--  overall situation   conversation 

--  Look at the system variables 
SHOW GLOBAL VARIABLES LIKE 'admin_%';
SHOW SESSTION VARIABLES LIKE 'character_%';
--  View the specified system variable 
SELECT @@global.max_connections;
--  modify 
SET @@global.max_connections = 124;
SET GLOBAL max_connections = 123;
--  The global system variable is valid for the current database instance ,  Once the restart mysql service , It will fail. ;

mysql User variables

--  Defining variables 
-- 1
SET @username = '';
SET @username := '';
-- 2
SELECT @username := FROM sys_user;
SELECT username INTO @username := FROM sys_user;
--  Use 
SELECT @username;
--  Defining local variables 
--  local variable   Use DECLARE Statement 
--  Only in  PROCEDURE, FUNCTION Use in ;
-- BEGIN  First line 

--  Declaration format 
DECLARE username VARCHAR(30) '';
DELIMITER $$
CREATE PROCEDURE `test_var`()
BEGIN
  DECLARE username VARCHAR(20); --  If not specified, it will be empty 
  SELECT username INTO username FROM sys_user;
  SELECT username;
END;
$$
DELIMITER ;

Define errors and handlers

Define error conditions

DECLARE '' /*error*/ CONDITION FOR ''/*error_code*/; 
DECLARE Field_Not_Be_NULL CONDITION FRO 1048;
DECLARE Field_Not_Be_NULL CONDITION FRO SQLSTATE '1048';

Define handler

DECLARE EXIT/**/ HANDLER FRO Field_Not_Be_NULL SET @INFO = 'ERROR';

if

-- IF(a,b,c)  amount to  a ? b : c
DROP PROCEDURE IF EXISTS test_var;
DELIMITER $$
BEGIN
  DECLARE username VARCHAR(20);
  SELECT su.username INTO username FROM sys_user su WHERE su.user_id=2022;

  IF username = 'yly'
    THEN SET username='';
    ELSEIF username='hello'
      THEN SET username='123456';
      ELSE SET username='hhhhh';
  END IF;
  SELECT username;
END;
$$
DELIMITER ;

case

DROP PROCEDURE IF EXISTS test_var;
DELIMITER $$
CREATE PROCEDURE `test_var`()
BEGIN
  DECLARE username VARCHAR(20);
  SELECT su.username INTO username FROM sys_user su WHERE su.user_id=2022;
  -- CASE username
   -- when 'yly3' THEN SET username='';
  -- When 'hello' THEN SET username='123456';
   -- Else SET username='else';
  -- end case;
 CASE 
  WHEN LENGTH(username)>4 THEN SET username='';
  WHEN LENGTH(username)>1 THEN SET username='123456'; 
  ELSE SET username='else';
  END CASE;
  SELECT username;
END;
$$
DELIMITER ;

loop while repeat

loop It feels like for equally

DROP PROCEDURE IF EXISTS test_loop;
DELIMITER $$
CREATE PROCEDURE `test_loop`()
BEGIN
  DECLARE username VARCHAR(20);
  DECLARE `count` INT(10) DEFAULT 0;
  SELECT su.username INTO username FROM sys_user su WHERE su.user_id=2022;
  loop_label:LOOP
    SET `count` = `count`+1;
    IF `count` >= 10 THEN LEAVE /* Out of the loop */ loop_label;
    END IF;
  END LOOP loop_label;
  SELECT username,`count`;	
END;
$$
DELIMITER ;

while It feels like while You can also add label

DROP PROCEDURE IF EXISTS test_while;
DELIMITER $$
CREATE PROCEDURE `test_while`()
BEGIN
  DECLARE username VARCHAR(20);
  DECLARE `count` INT(10) DEFAULT 0;
  SELECT su.username INTO username FROM sys_user su WHERE su.user_id=2022;
  WHILE `count` < 10 DO
    SET `count` = `count`+1;
  END WHILE
  SELECT username,`count`;	
END;
$$
DELIMITER ;

repeat It feels like do while

DROP PROCEDURE IF EXISTS test_while;
DELIMITER $$
CREATE PROCEDURE `test_while`()
BEGIN
  DECLARE username VARCHAR(20);
  DECLARE `count` INT(10) DEFAULT 0;
  SELECT su.username INTO username FROM sys_user su WHERE su.user_id=2022;
  REPEAT  
    SET `count` = `count`+1;
    UNTIL `count` >= 10
  END REPEAT;
  SELECT username,`count`;	
END;
$$
DELIMITER ;

LEAVE and ITERATE image continue

-- LEAVE
DROP PROCEDURE IF EXISTS test_while;
DELIMITER $$
CREATE PROCEDURE `test_while`()
test:BEGIN
  DECLARE username VARCHAR(20);
  DECLARE `count` INT(10) DEFAULT 0;
  SELECT su.username INTO username FROM sys_user su WHERE su.user_id=2022;
  REPEAT  
    SET `count` = `count`+1;
    UNTIL `count` >= 10
  END REPEAT;
  LEAVE test; --  It will stop here 
  SELECT username,`count`;	
END;
$$
DELIMITER ;
-- ITERATE
DROP PROCEDURE IF EXISTS test_loop;
DELIMITER $$
CREATE PROCEDURE `test_loop`()
BEGIN
  DECLARE username VARCHAR(20);
  DECLARE `count` INT(10) DEFAULT 0;
  SELECT su.username INTO username FROM sys_user su WHERE su.user_id=2022;
  loop_label:LOOP
    SELECT username,`count`;
    SET `count` = `count`+1;
    IF `count` >= 10 THEN LEAVE /* Out of the loop */ loop_label;
    END IF;
    IF `count` < 3 THEN SELECT 100; ITERATE loop_label;
    END IF;
    SET `count` = `count`+100;
  END LOOP loop_label;
  SELECT username,`count`;	
END;
$$
DELIMITER ;
CALL test_loop();

The cursor

原网站

版权声明
本文为[yly. py]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/177/202206261922194429.html