存储过程

*   Oracle版本
    *   select * from tab;

    *   create table t1(id number, name varchar2(10), sex varchar2(10));

    *   select * from t1;

    *   --创建存储过程,循环添加大量是数据
    *   create or replace procedure p_name_sex(in name1 varchar,sex1 varchar,name2 varchar,sex2 varchar)
    *   as
    *   begin
    *   for i in 1..1000 loop
    *   if i mod 2 = 1 then
    *   insert into t1 values(i,name1,sex1);
    *   else
    *   insert into t1 values(i,name2,sex2);
    *   end if;
    *   end loop;
    *   commit;
    *   dbms_output.put_line('数据插入成功!');
    *   end;

    *   --调用存储过程
    *   call p_name_sex('张三','男','李四','女');

    *   select * from t1;

    *   --创建函数
    *   create or replace function f_add(a number,b number) return number
    *   is sum1 number;
    *   begin
    *   sum1 :=a+b;
    *   return sum1;
    *   end;

    *   --调用函数
    *   select f_add(3,8) from dual;

*   Mysql版本
    *   create table test.t1 (id int(4),name varchar(20));

    *   DELIMITER //

    *   CREATE PROCEDURE proc4(OUT s int)
        *   begin
            *   select COUNT(*) into s from TEST.t1;
            *   insert into test.t1 values(s,'Derek');
        *   end
        *   //

    *   DELIMITER ;

    *   CALL proc4(@s);

    *   select * from test.t1;

    *   [图片上传失败...(image-a8c216-1543978607039)]

    *   --------

    *   利用存储过程,循环添加大量数据

        [图片上传失败...(image-d08b49-1543978607039)]

    *   *   #创建测试表
        *   DROP TABLE IF EXISTS test.t4;

        *   CREATE TABLE test.t4(
        *   id int(10),
        *   name varchar(20)
        *   )ENGINE INNODB DEFAULT CHARSET utf8 COMMENT '测试表';

        *   select * from test.t4;

        *   #清空数据
        *   TRUNCATE table test.t4;

        *   DROP PROCEDURE IF EXISTS myproc;

        *   ##循环添加大量数据
        *   delimiter //

        *   create procedure myproc()
            *   begin
                *   declare num int;
                *   set num=10;
                *   while num < 20 do
                    *   insert into t4(id, name) values(num,concat("tag", num));
                    *   set num=num+1;
                *   end while;
            *   end
        *   //

        *   delimiter ;

        *   #调用存储过程
        *   call myproc();
            *   *   select * from t4;
    *   存储过程,while 循环

        [图片上传失败...(image-675a9c-1543978607039)]

    *   存储过程 while 循环,if 条件判断

        [图片上传失败...(image-8423eb-1543978607039)]

    *   存储过程,case

        [图片上传失败...(image-cdf194-1543978607039)]

        [图片上传失败...(image-fa9fcd-1543978607039)]

        *   DELIMITER //

        *   CREATE OR REPLACE PROCEDURE p5(IN p_id INT)
        *   BEGIN
            *   DECLARE pp_id INT ;
            *   SET pp_id=p_id+1;
            *   CASE pp_id
                *   WHEN 1 THEN
                    *   INSERT INTO test.t3(id) VALUE ('11') ;
                *   WHEN 2 THEN
                    *   INSERT INTO test.t3(id) VALUE ('12') ;
                *   ELSE
                    *   INSERT INTO test.t3(id) VALUE ('13') ;
            *   END CASE;
        *   END;
        *   //

        *   DELIMITER ;

        *   CALL p5(0);

        *   SELECT * FROM test.t3 ;
    *   循环 loop-leave loop_lable

        [图片上传失败...(image-16264-1543978607039)]

        *   DELIMITER //

        *   CREATE OR REPLACE PROCEDURE p8()
        *   BEGIN
            *   DECLARE X INT ;
            *   SET X=60 ;
            *   lo:LOOP
                *   INSERT INTO test.t3(id) VALUE (X) ;
                *   SET X=X+1 ;
                *   IF X>=70 THEN
                    *   LEAVE lo ;
                *   END IF;
            *   END LOOP;
        *   END;
        *   //

        *   DELIMITER ;

        *   CALL p8();

        *   SELECT * FROM test.t3 ;
    *   循环 repeat until end repeat;
        *   DELIMITER //

        *   CREATE OR REPLACE PROCEDURE p9()
        *   BEGIN
            *   DECLARE v INT DEFAULT 80;
            *   REPEAT
                *   INSERT INTO test.t3(id) VALUE (v) ;
                *   SET v=v+1 ;
                *   UNTIL v>=85
            *   END REPEAT;
        *   END;
        *   //

        *   DELIMITER ;

        *   CALL p9();

        *   SELECT * FROM test.t3 ;
    *   复制整张表
        *   DELIMITER //

        *   CREATE OR REPLACE PROCEDURE p3()
        *   BEGIN
            *   CREATE TABLE test.t3 AS SELECT * FROM ranzhi.sys_user;
        *   END//

        *   DELIMITER ;

        *   CALL p3();

        *   SELECT * FROM test.t3 ;
    *   存储过程,传参 in

        [图片上传失败...(image-61d251-1543978607039)]

        *   INSERT INTO test.t3(id,account) VALUE ('2','zhangsan2');
        *   INSERT INTO test.t3(id,account) VALUE ('3','zhangsan3');
        *   INSERT INTO test.t3(id,account) VALUE ('4','zhangsan4');
        *   INSERT INTO test.t3(id,account) VALUE ('5','zhangsan5');
        *   INSERT INTO test.t3(id,account) VALUE ('6','zhangsan6');

        *   DELIMITER $$

        *   CREATE OR REPLACE PROCEDURE p4(IN p_id INT)
        *   BEGIN
        *   DELETE FROM test.t3 WHERE id = p_id ;
        *   END$$

        *   DELIMITER ;

        *   CALL p4(3);

        *   SELECT * FROM test.t3 ;
    *   变量
        *   1\. 变量定义
            *   局部变量声明一定要放在存储过程体的开始:
            *   DECLAREvariable_name [,variable_name...] datatype [DEFAULT value];
                *   DECLARE l_int int unsigned default 4000000;
                *   DECLARE l_numeric number(8,2) DEFAULT 9.95; DECLARE l_date date DEFAULT '1999-12-31';
                *   DECLARE l_datetime datetime DEFAULT '1999-12-31 23:59:59';
                *   DECLARE l_varchar varchar(255) DEFAULT 'This will not be padded';
        *   2\. 变量赋值
            *   SET 变量名 = 表达式值 [,variable_name = expression ...]
        *   3\. 用户变量
            *   在MySQL客户端使用用户变量:

                [图片上传失败...(image-abbf05-1543978607037)]


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容