zoukankan      html  css  js  c++  java
  • 数据库function和procedure

    数据库初始化:

    CREATE DATABASE school;
    
    -- 创建表:course
    CREATE TABLE `course` (
        `cno` VARCHAR (12) NOT NULL DEFAULT '',
        `cname` VARCHAR (12) NOT NULL,
        `cpno` VARCHAR (12) DEFAULT NULL,
        `ccredit` INT (11) NOT NULL,
        PRIMARY KEY (`cno`)
    ) ENGINE = INNODB DEFAULT CHARSET = utf8;
    
    INSERT INTO `course`
    VALUES
        ('1', 'java', '2', '3');
    
    INSERT INTO `course`
    VALUES
        ('2', 'c++', '4', '2');
    
    INSERT INTO `course`
    VALUES
        ('3', '数学', NULL, '5');
    
    INSERT INTO `course`
    VALUES
        ('4', 'c', '3', '3');
    
    INSERT INTO `course`
    VALUES
        ('5', '英语', NULL, '5');
    
    INSERT INTO `course`
    VALUES
        ('6', '数据结构', '3', '3');
    
    INSERT INTO course
    VALUES
        ('7', 'c', '3', '5');
    
    DELETE
    FROM
        course
    WHERE
        cno = '7';
    
    CREATE TABLE `student` (
        `id` INT (11) NOT NULL,
        `sno` VARCHAR (12) NOT NULL,
        `sname` VARCHAR (12) NOT NULL,
        `ssex` VARCHAR (1) DEFAULT '',
        `sage` INT (11) NOT NULL,
        `sdept` VARCHAR (12) NOT NULL,
        `sprovince` VARCHAR (255) DEFAULT NULL,
        `scity` VARCHAR (255) DEFAULT NULL,
        `sstreet` VARCHAR (255) DEFAULT NULL,
        `sbirthday` date DEFAULT NULL,
        PRIMARY KEY (`id`),
        UNIQUE KEY `sno` (`sno`),
        FULLTEXT KEY `index_name` (`sname`)
    ) ENGINE = INNODB DEFAULT CHARSET = utf8;
    
    INSERT INTO `student`
    VALUES
        (
            '2',
            '002',
            '李丽',
            '',
            '19',
            '数学系',
            '江苏',
            '苏州',
            '长桥',
            '1997-07-18'
        );
    
    INSERT INTO `student`
    VALUES
        (
            '3',
            '003',
            '李彤',
            '',
            '22',
            '数学系',
            '江苏',
            '南京',
            '解放',
            '1994-08-02'
        );
    
    INSERT INTO `student`
    VALUES
        (
            '4',
            '004',
            '张天宇',
            '',
            '25',
            '计算机科学与技术系',
            '上海',
            '上海',
            '仁义',
            '1991-07-07'
        );
    
    INSERT INTO `student`
    VALUES
        (
            '5',
            '005',
            '李大奎',
            '',
            '20',
            '计算机科学与技术系',
            '浙江',
            '杭州',
            '东营',
            '1996-02-08'
        );
    
    INSERT INTO `student`
    VALUES
        (
            '6',
            '006',
            '张思源',
            '',
            '27',
            '数学系',
            '广东',
            '深圳',
            '华强',
            '1989-02-06'
        );
    
    INSERT INTO `student`
    VALUES
        (
            '7',
            '007',
            'tony',
            '',
            '20',
            '中文',
            '浙江',
            '杭州',
            '东营',
            '1996-05-29'
        );
    
    INSERT INTO `student`
    VALUES
        (
            '9',
            '0l9',
            'nicy',
            '',
            '21',
            '中文',
            NULL,
            NULL,
            NULL,
            NULL
        );
    
    CREATE TABLE `sc` (
        `id` INT (11) NOT NULL AUTO_INCREMENT,
        `sno` VARCHAR (12) NOT NULL,
        `cno` VARCHAR (12) NOT NULL,
        `grade` INT (11) NOT NULL,
        PRIMARY KEY (`id`),
        KEY `sno` (`sno`),
        KEY `cno` (`cno`),
        CONSTRAINT `sc_ibfk_1` FOREIGN KEY (`sno`) REFERENCES `student` (`sno`),
        CONSTRAINT `sc_ibfk_2` FOREIGN KEY (`cno`) REFERENCES `course` (`cno`)
    ) ENGINE = INNODB AUTO_INCREMENT = 9 DEFAULT CHARSET = utf8;
    
    INSERT INTO `sc`
    VALUES
        ('1', '002', '2', '50');
    
    INSERT INTO `sc`
    VALUES
        ('2', '002', '3', '70');
    
    INSERT INTO `sc`
    VALUES
        ('3', '003', '2', '30');
    
    INSERT INTO `sc`
    VALUES
        ('4', '005', '3', '95');
    
    INSERT INTO `sc`
    VALUES
        ('5', '003', '4', '100');
    
    INSERT INTO `sc`
    VALUES
        ('6', '002', '4', '90');
    
    INSERT INTO `sc`
    VALUES
        ('7', '004', '4', '70');
    
    INSERT INTO `sc`
    VALUES
        ('8', '005', '4', '90');
    
    CREATE TABLE `test` (
        `id` VARCHAR (255) NOT NULL,
        `name` VARCHAR (255) NOT NULL,
        `birthday` date DEFAULT NULL
    ) ENGINE = INNODB DEFAULT CHARSET = utf8;
    
    INSERT INTO `test`
    VALUES
        ('001', 'tom', NULL);
    
    INSERT INTO `test`
    VALUES
        ('002', 'tony', NULL);
    
    INSERT INTO `test`
    VALUES
        ('0l3', 'helen', NULL);
    
    INSERT INTO `test`
    VALUES
        ('003', 'jack', '2015-08-17');
    
    INSERT INTO `test`
    VALUES
        ('004', 'jack', '2015-03-05');
    
    INSERT INTO `test`
    VALUES
        ('005', 'jack', '2015-03-05');
    View Code

     创建函数:

    CREATE FUNCTION fun_getage(str varchar(10))
    -- 函数必须带返回值
    RETURNS VARCHAR(10)
    BEGIN
        RETURN (SELECT sage FROM student WHERE sname=str);
    END;

    调用函数:

    SELECT fun_getage('李丽');

    output:

    19

    在函数中声明变量:

    CREATE FUNCTION fun_getcorce(stu_name VARCHAR(10),course_name varchar(10))
        RETURNS INT
    BEGIN
        DECLARE corce INT;
        SET corce=0;
    --     还可以用 DECLARE corce_temp INT DEFAULT 0; 声明变量。
        SELECT sc.grade INTO corce FROM sc 
    WHERE sc.sno=(SELECT student.sno FROM student WHERE student.sname=stu_name) 
    AND sc.cno=(SELECT course.cno from course where course.cname=course_name);
    RETURN corce;
    END;

    在函数中使用 if 语句:

    CREATE FUNCTION fun_isPass(stu_name VARCHAR(10),course_name VARCHAR(10))
        RETURNS VARCHAR(10)
        BEGIN
            DECLARE stu_core INT DEFAULT 0;
            DECLARE res VARCHAR(10) DEFAULT '';
            SELECT grade INTO stu_core FROM stu_sno_sname_cname_grade_view WHERE sname=stu_name AND cname=course_name;
            IF stu_core>60 AND stu_core<100 THEN SET res ='及格';
            ELSEIF stu_core=100 THEN SET res='满分';
            ELSEIF stu_core<60 THEN SET res ='不及格';
            END IF;
            RETURN res ;
    END;

    使用procedure:

    创建存储过程:

    CREATE PROCEDURE pro_test()
        BEGIN
            SELECT 'hello world';
        END;

    调用procedure:

    CALL pro_test();

    创建一个带输入参数的procedure:

    CREATE PROCEDURE pro_test1(in n INT)
    BEGIN
        SELECT n*n;
    END;

    调用:

    CALL pro_test1(10);
    --
    SET @n =20;
    CALL pro_test1(@n);

    带返回参数的procedure:

    CREATE PROCEDURE pro_test2(in n int,INOUT m INT)
    BEGIN 
        SET m=n*m;
    END;

    IN表示输入参数,OUT表示输出,INOUT表示既可以输入也可以输出。

    调用:

    SET @n=10;
    SET @m=20;
    CALL pro_test2(@n,@m);
    SELECT @m;

    在procedure中使用循环:

    CREATE PROCEDURE pro_add_grade()
    BEGIN
        DECLARE grade_temp INT DEFAULT 0;
        SELECT MIN(grade) INTO grade_temp FROM sc;
        WHILE grade_temp < 60 DO
            UPDATE sc SET grade=grade+10;
            SELECT MIN(grade) INTO grade_temp FROM sc;
        END WHILE;
        UPDATE sc SET grade=100 WHERE grade > 100;
    END;
  • 相关阅读:
    GDAL指定自定义的金字塔目录
    同一个脚本在SQLPLUS和SQLDEV上的不同
    【LeetCode-面试算法经典-Java实现】【062-Unique Paths(唯一路径)】
    unity3d的playmaker插件使用教程,三、对象出入触发,声音播放
    MapReduce实现矩阵乘法
    Nginx+Tomcat搭建高性能负载均衡集群
    怎么去掉Xcodeproject中的某种类型的警告 Implicit conversion loses integer precision: &#39;NSInteger&#39; (aka &#39;long&#39;) to &#39;int32
    <html>
    实战c++中的vector系列--vector&lt;unique_ptr&lt;&gt;&gt;初始化(全部权转移)
    [Mac] mac linux 多线程下载利器 axel
  • 原文地址:https://www.cnblogs.com/mada0/p/4742405.html
Copyright © 2011-2022 走看看