mysql的学习(七)-自定义函数和流程控制

匿名 (未验证) 提交于 2019-12-02 22:06:11
DELIMITER //     (设置结束符  其实我也不太明白为啥要这样  记住就行把) CREATE FUNCTION ym_date(mydate DATE)  (创建函数  函数名字(参数)) RETURNS VARCHAR(20)            (指定函数的返回类型) BEGIN                (函数开始,如果函数只有一句可以省略biginend RETURN DATE_FORMAT(mydate,%Y-%m);        (函数体) END//                    (函数结束) DELIMITER ;                (把结束符再变成;)  CREATE FUNCTION show_name_store(bid INT) RETURNS VARCHAR(20) RETURN (SELECT CONCAT_WS(-----,book_name,store) FROM bookinfo WHERE book_id=bid);  into的介绍) DELIMITER // CREATE FUNCTION show_name_store(bid INT) RETURNS VARCHAR(20) BEGIN DECLARE result VARCHAR(20) (声明变量) SELECT CONCAT_WS(-----,book_name,store) INTO result FROM bookinfo WHERE book_id=bid;(对变量result进行赋值。emmm没啥说的) RETURN result; END// DELIMITER ;  (删除函数) DROP FUNCTION xxxxx;    (又是if else DELIMITER // CREATE FUNCTION show_level(cid VARCHAR(20)) RETURNS VARCHAR(10) BEGIN DECLARE lev VARCHAR(20); DECLARE money DECIMAL(7,3); SELECT balance INTO money FROM readerinfo WHERE card_id=cid; IF money>=500 THEN     SET lev=高级; ELSEIF money>=300 THEN     SET lev=普通; ELSE      SET lev=非会员; END IF; RETURN lev; END// DELIMITER ;  case的样例) DELIMITER // CREATE FUNCTION show_lev2(cid CHAR(18)) RETURNS barchar(10) BEGIN DECLARE lev VARCHAR(10); DECLARE money DECIMAL(7,3); DECLARE num INT; SELECT balance INTO money FROM readerinfo WHERE card_id=cid; SET num=TRUNCATE(money/100,0); CASE num WHEN 0 THEN SET lev=非会员; WHEN 1 THEN SET lev=普通; WHEN 2 THEN SET lev=高级; ELSE SET lev=金牌; END CASE; RETURN lev; END// DELIMITER ; (CASE 也可以这样用) CASE WHEN money>500 THEN SET lev=高级; WHEN money>=300 THEN SET lev=普通; ELSE SET lev=不是; END CASE;   (以下是循环的样例) DELIMITER // CREATE FUNCTION test(n INT) RETURNS INT BEGIN  DECLARE num INT DEFAULT 0; DECLARE SUM INT DEFAULT 0; WHILE num<n DO     SET num= num + 1;     SET SUM=SUM + num; END WHILE; RETURN SUM; END// DELIMITER ;    DELIMITER // CREATE FUNCTION test(n INT) RETURNS INT BEGIN  DECLARE num INT DEFAULT 0; DECLARE SUM INT DEFAULT 0; labl:LOOP     SET num=num+1;     SET SUM=SUM+num;     IF num>=n THEN     LEAVE labl;     END IF; END LOOP labl; RETURN SUM; END// DELIMITER ;   DELIMITER // CREATE FUNCTION test(n INT) RETURNS INT BEGIN  DECLARE num INT DEFAULT 0; DECLARE SUM INT DEFAULT 0; REPEAT SET num=num+1; SET SUM=SUM+num; UNTIL num>=n END REPEAT; RETURN SUM; END// DELIMITER ;

DELIMITER // (设置结束符 其实我也不太明白为啥要这样 记住就行把)
CREATE FUNCTION ym_date(mydate DATE) (创建函数 函数名字(参数))
RETURNS VARCHAR(20) (指定函数的返回类型)
BEGIN (函数开始,如果函数只有一句可以省略bigin和end)
RETURN DATE_FORMAT(mydate,%Y-%m); (函数体)
END// (函数结束)
DELIMITER ; (把结束符再变成;)

CREATE FUNCTION show_name_store(bid INT)
RETURNS VARCHAR(20)
RETURN (SELECT CONCAT_WS(‘-----‘,book_name,store) FROM bookinfo WHERE book_id=bid);

(into的介绍)
DELIMITER //
CREATE FUNCTION show_name_store(bid INT)
RETURNS VARCHAR(20)
BEGIN
DECLARE result VARCHAR(20) (声明变量)
SELECT CONCAT_WS(‘-----‘,book_name,store) INTO result FROM bookinfo WHERE book_id=bid;(对变量result进行赋值。emmm没啥说的)
RETURN result;
END//
DELIMITER ;

(删除函数)
DROP FUNCTION xxxxx;

 

(又是if else)
DELIMITER //
CREATE FUNCTION show_level(cid VARCHAR(20))
RETURNS VARCHAR(10)
BEGIN
DECLARE lev VARCHAR(20);
DECLARE money DECIMAL(7,3);
SELECT balance INTO money FROM readerinfo WHERE card_id=cid;
IF money>=500 THEN
SET lev=‘高级‘;
ELSEIF money>=300 THEN
SET lev=‘普通‘;
ELSE
SET lev=‘非会员‘;
END IF;
RETURN lev;
END//
DELIMITER ;

(case的样例)
DELIMITER //
CREATE FUNCTION show_lev2(cid CHAR(18))
RETURNS barchar(10)
BEGIN
DECLARE lev VARCHAR(10);
DECLARE money DECIMAL(7,3);
DECLARE num INT;
SELECT balance INTO money FROM readerinfo WHERE card_id=cid;
SET num=TRUNCATE(money/100,0);
CASE num
WHEN 0 THEN SET lev=‘非会员‘;
WHEN 1 THEN SET lev=‘普通‘;
WHEN 2 THEN SET lev=‘高级‘;
ELSE SET lev=‘金牌‘;
END CASE;
RETURN lev;
END//
DELIMITER ;
(CASE 也可以这样用)
CASE
WHEN money>500 THEN SET lev=‘高级‘;
WHEN money>=300 THEN SET lev=‘普通‘;
ELSE SET lev=‘不是‘;
END CASE;


(以下是循环的样例)
DELIMITER //
CREATE FUNCTION test(n INT)
RETURNS INT
BEGIN
DECLARE num INT DEFAULT 0;
DECLARE SUM INT DEFAULT 0;
WHILE num<n DO
SET num= num + 1;
SET SUM=SUM + num;
END WHILE;
RETURN SUM;
END//
DELIMITER ;

 

DELIMITER //
CREATE FUNCTION test(n INT)
RETURNS INT
BEGIN
DECLARE num INT DEFAULT 0;
DECLARE SUM INT DEFAULT 0;
labl:LOOP
SET num=num+1;
SET SUM=SUM+num;
IF num>=n THEN
LEAVE labl;
END IF;
END LOOP labl;
RETURN SUM;
END//
DELIMITER ;


DELIMITER //
CREATE FUNCTION test(n INT)
RETURNS INT
BEGIN
DECLARE num INT DEFAULT 0;
DECLARE SUM INT DEFAULT 0;
REPEAT
SET num=num+1;
SET SUM=SUM+num;
UNTIL num>=n
END REPEAT;
RETURN SUM;
END//
DELIMITER ;

 

原文:https://www.cnblogs.com/wpbing/p/9215588.html

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!