精华内容
下载资源
问答
  • 修改用户自定义存储过程的命令是
    2021-01-19 03:27:44

    语法:

    创建存储过程:

    CREATE[definer = {user|current_user}] PROCEDURE sp_name ([ proc_parameter [,proc_parameter ...]]) [ characteristics..] routime_body

    其中:

    proc_parameter : [IN|OUT|INOUT] parameter_name type

    其中IN表示输入参数,OUT表示输出参数,INOUT表示既可以输入也可以输出;param_name表示参数名称;type表示参数的类型

    存储过程体中可以使用自定义函数(UDF)中使用的复合结构/流程控制/SQL语句/自定义变量等等内容,详情参阅MySQL自定义函数用法详解-复合结构自定义变量/流程控制

    调用存储过程:

    CALLsp_name ([ proc_parameter [,proc_parameter ...]])

    CALL sp_name

    说明:当无参时,可以省略"()",当有参数时,不可省略"()"

    存储过程修改:

    ALTER语句修改存储过程只能修改存储过程的注释等无关紧要的东西,不能修改存储过程体,所以要修改存储过程,方法就是删除重建!

    删除存储过程:

    DROP PROCEDURE [IF EXISTS] sp_name

    示例:

    创建无参存储过程:

    delimiter //

    CREATE PROCEDURE showTime()

    BEGIN

    SELECT now();

    END//

    delimiter ;

    CALL showTime;

    作用:显示当前时间,没什么实际意义

    创建含参存储过程:

    只有一个IN参数

    delimiter //

    CREATE PROCEDURE seleById(IN uid SMALLINT UNSIGNED)

    BEGIN

    SELECT * FROM son WHERE id = uid;

    END//

    delimiter ;

    call seleById(2);

    包含IN参数和OUT参数

    delimiter //

    CREATE PROCEDURE deleteById(IN uid SMALLINT UNSIGNED, OUT num SMALLINT UNSIGNED)

    BEGIN

    DELETE FROM son WHERE id = uid;

    SELETE row_count() into num;

    END//

    delimiter ;

    call seleById(2,@changeLine);

    SELETE @changeLine;

    说明:创建存储过程deleteById,包含一个IN参数和一个OUT参数.调用时,传入删除的ID和保存被修改的行数值的用户变量@changeLine,select @changeLine;输出被影响行数.

    存储过程与自定义函数的区别:

    存储过程实现的过程要复杂一些,而函数的针对性较强;

    存储过程可以有多个返回值,而自定义函数只有一个返回值;

    存储过程一般独立的来执行,而函数往往是作为其他SQL语句的一部分来使用;

    存储过程存在的必要性(好处):

    存储过程说白了就是把经常使用的SQL语句或业务逻辑封装起来,预编译保存在数据库中,当需要的时候从数据库中直接调用,省去了编译的过程.

    提高了运行速度;

    同时降低网络数据传输量(你觉得传一堆SQL代码快,还是传一个存储过程名字和几个参数快???)

    (转)MySQL存储过程/存储过程与自定义函数的区别

    转自:http://www.cnblogs.com/caoruiy/p/4486249.html 语法: 创建存储过程: CREATE [definer = {user|current_user}]  ...

    【存储过程】MySQL存储过程/存储过程与自定义函数的区别

    ---------------------------存储过程-------------------- 语法: 创建存储过程: CREATE [definer = {user|current_user ...

    基本开题的感觉是了-MySQL继续继续(自定义函数&存储过程)

    hi 感觉论文开题基本确定了,凯森 1.MySQL -----自定义函数----- ----基本 两个必要条件:参数和返回值(两者没有必然联系,参数不一定有,返回一定有) 函数体:合法的SQL语句:以 ...

    MYSQL数据库重点:自定义函数、存储过程、触发器、事件、视图

    一.自定义函数 mysql自定义函数就是实现程序员需要sql逻辑处理,参数是IN参数,含有RETURNS字句用来指定函数的返回类型,而且函数体必须包含一个RETURN value语句. 语法: 创建: ...

    mysql 总结二(自定义函数)

    本质:mysql内置函数的一种扩展,本质上与mysql内置函数一样. 函数必要条件: @1:参数(非必备): @2:返回值: 模板: create function function_name ret ...

    MySQL(10)---自定义函数

    MySQL(10)---自定义函数 之前讲过存储过程,存储过程和自定义函数还是非常相似的,其它的可以认为和存储过程是一样的,比如含义,优点都可以按存储过程的优点来理解. 存储过程相关博客: 1.MyS ...

    SQL中存储过程和自定义函数的区别

    存储过程:     存储过程可以使得对数据库的管理.以及显示关于数据库及其用户信息的工作容易得多.存储过程是 SQL 语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理.存储过程存储在 ...

    SQL中存储过程和自定义函数的区别(转载)

    存储过程:     存储过程可以使得对数据库的管理.以及显示关于数据库及其用户信息的工作容易得多.存储过程是 SQL 语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理.存储过程存储在 ...

    Oracle自定义函数和存储过程示例,自定义函数与存储过程区别

    参考资料:http://www.newbooks.com.cn/info/60861.html oracle自定义函数学习和连接运算符(||) 贴一段中文文档示例,应该就可以开始工作了: --过程(P ...

    随机推荐

    Javascript:是你的高阶函数

    在通常的编程语言中,函数的参数只能是基本类型或者对象引用,返回值也只是基本数据类型或对象引用.但在Javascript中函数作为一等公民,既可以当做参数传递,也可以被当做返回值返回.所谓高阶函数就是可 ...

    Ext.NET-布局篇

    概述 前一篇介绍了Ext.NET基础知识,并对Ext.NET布局进行了简要的说明,本文中我们用一个完整的示例代码来看看Ext.NET的布局. 示例代码下载地址>>>>> ...

    python 加密解密

    1. 使用base64 s1 = base64.encodestring('hello world') s2 = base64.decodestring(s1) print s1, s2 结果 1 2 ...

    unity博文搜集

    一.综合篇 1. 脚本 unity3d脚本编程基础 2.Mecanim 使用Mecanim实现连击 3. 数学图形学 U3D需要用到的数学基础  2 4. shader 猫都能学会的Unity3D S ...

    Java语言基础(四) String和StringBuffer的区别

    Java提供了两个字符串类:String和StringBuffer. String提供了数值不可变的字符串,而StringBuffer提供的字符串对象可以进行修改. 当知道字符数据要改变的时候就可以使 ...

    SharePoint 2013 InfoPath 无法保存下列表单

    转载自:http://www.cnblogs.com/jianyus/p/3470121.html 在使用InfoPath发布表单,发布到SharePoint服务器报错,如下介绍: 环境:Window ...

    Sping Boot入门到实战之入门篇(三):Spring Boot属性配置

    该篇为Sping Boot入门到实战系列入门篇的第三篇.介绍Spring Boot的属性配置.   传统的Spring Web应用自定义属性一般是通过添加一个demo.properties配置文件(文 ...

    javascript简单介绍(二)

    晨读单词: onmouseover:鼠标移入 onmouseout:鼠标移出 attribute:属性 node:节点 document:文档 element:元素 textNode:文本节点 app ...

    Mysq登陆后执行命令提示You must SET PASSWORD before executing this statement

    mysql  安装完成后,在输入命令行时,提示:You must SET PASSWORD before executing this statement 提示必须设置密码,我想不是已经设置了密码吗? ...

    pageObject+selenium

    新发现的设计模式,很好用. 参考:https://www.cnblogs.com/xiaofeifei-wang/p/6733753.html

    更多相关内容
  • 一、存储过程概述存储过程(Stored Procedure)是一组为了完成特定功能的 SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来...

    一、存储过程概述

    存储过程(Stored Procedure)是一组为了完成特定功能的 SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。类似于 Java 中的方法,定义好之后可以多次调用。

    存储过程由以下几个优点

    通常存储过程有助于提高应用程序的性能。当创建,存储过程被编译之后,就存储在数据库中

    可用于提高代码的重用性,简化操作

    存储的程序是安全的

    二、存储过程语法结构

    创建存储过程的语法结构

    DROP PROCEDURE IF EXISTS [存储过程名];

    DELIMITER [结束标记]

    CREATE PROCEDURE [存储过程名]([参数1], [参数2] ...)

    BEGIN

    [存储过程体(一组合法的SQL语句)]

    END [结束标记]

    DELIMITER ;

    当存储过程有且仅有一条 SQL 语句时,BEGIN 和 END 可以省略。 存储过程中的参数可分为 3 部分,分别是 [参数模式] [参数名] [参数类型] ,比如 IN name VARCHAR[20]。

    参数模式也分为 3 种,如下

    IN:输入参数

    OUT:可以作为返回值的参数

    INOUT:既可以作为输入参数,也可以作为返回值参数

    DELIMITER [存储过程名] 本身与存储过程的语法无关,用于表示存储过程的结束。最后一个命令(DELIMITER ;)将分隔符更改回分号(;)。

    调用存储过程使用CALL [存储过程名]([参数1], [参数2] ...);语句。

    删除存储过程使用DROP PROCEDURE IF EXISTS [存储过程名];。

    三、存储过程的简单使用

    创建测试表

    DROP TABLE IF EXISTS `t_user`;

    CREATE TABLE `t_user` (

    `id` int(11) NOT NULL AUTO_INCREMENT,

    `name` varchar(20) NOT NULL,

    PRIMARY KEY (`id`)

    ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

    3.1创建无参的存储过程

    创建存储过程(向 t_user 数据表中插入两条数据)

    DROP PROCEDURE IF EXISTS myp1;

    DELIMITER $

    CREATE PROCEDURE myp1()

    BEGIN

    INSERT INTO t_user VALUES(NULL, 'Jas'),(NULL, 'Joy');

    END $

    DELIMITER ;

    调用存储过程并查看结果

    a68aecb4cd5735e7a68f6f078209ba84.png

    3.2创建IN模式参数的存储过程

    创建存储过程(根据传入的 id 获取用户名)

    DROP PROCEDURE IF EXISTS myp2;

    DELIMITER $

    CREATE PROCEDURE myp2(IN userId INT)

    BEGIN

    SELECT name FROM t_user WHERE id = userId;

    END $

    DELIMITER ;

    调用存储过程并查看结果

    ddb2bdb92f066afa4b6b8eef8481a8e9.png

    3.3创建OUT模式参数的存储过程

    创建存储过程(根据传入的 id 获取用户名赋值给输出变量)

    DROP PROCEDURE IF EXISTS myp3;

    DELIMITER $

    CREATE PROCEDURE myp3(IN userId INT, OUT username VARCHAR(20))

    BEGIN

    SELECT name INTO username # 将查询到的用户名赋值给 username

    FROM t_user WHERE id = userId;

    END $

    DELIMITER ;

    调用存储过程并查看结果

    ec61596a404908b94b35cf7b639bbd18.png

    3.4创建INOUT模式参数的存储过程

    创建存储过程(传入一个整数参数,值扩大 2 倍后返回)

    DROP PROCEDURE IF EXISTS myp4;

    DELIMITER $

    CREATE PROCEDURE myp4(INOUT a INT)

    BEGIN

    SET a = a * 2;

    END $

    DELIMITER ;

    调用存储过程并查看结果

    c26e61e6f2432662d9d4d57a80cf4a5f.png

    四、自定义函数概述

    自定义函数的使用方法与存储过程类似,只不过自定义函数必须要有返回值,返回值有且只有一个。

    自定义函数语法

    DROP FUNCTION IF EXISTS [函数名];

    DELIMITER [结束标记]

    CREATE FUNCTION [函数名]([参数1], [参数2] ...) RETURNS [返回值类型]

    BEGIN

    [方法体]

    RETURN [返回值];

    END [结束标记]

    DELIMITER ;

    自定义函数中的变量只有两部分,分别是[变量名] [变量类型],比如username VARCHAR[20]。通过上面的语法对比,不知道大家能不能发现MySql 中的自定义函数与 Java 中的有返回值函数很像。

    调用自定义函数的语法是SELECT [函数名]([参数1], [参数2] ...);。

    删除自定义函数的语法是 DROP FUNCTION IF EXISTS [函数名];。

    五、自定义函数的简单使用

    5.1创建无参的自定义函数

    创建自定义函数(查询 t_user 中的所有记录数,并返回)

    DROP FUNCTION IF EXISTS myf1;

    DELIMITER $

    CREATE FUNCTION myf1() RETURNS INT

    BEGIN

    DECLARE sum INT DEFAULT 0; # 定义局部变量 sum,默认值为 0

    SELECT COUNT(*) INTO sum # 将查询的结果赋值给 sum

    FROM t_user;

    RETURN sum;

    END $

    DELIMITER ;

    调用自定义函数并查看结果

    a220104a987e6787df45a97506f91e87.png

    5.2创建有参的自定义函数

    创建自定义函数(根据用户 id 获取用户名,赋值后返回)

    DROP FUNCTION IF EXISTS myf2;

    DELIMITER $

    CREATE FUNCTION myf2(userId INT) RETURNS VARCHAR(20)

    BEGIN

    SET @username=''; # 定义系统会话变量

    SELECT name INTO @username # 将用户名赋值给 username

    FROM t_user

    WHERE id = userId;

    RETURN @username;

    END $

    DELIMITER ;

    调用自定义函数并查看结果

    b719c5c928484866f7ea28ee8d5d6176.png

    六、总结

    自定义函数与存储过程有很多相似的地方,下面是一些主要的区别对比

    一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强

    存储过程可以有返回值也可以没有返回值,而自定义函数必须要返回值,且返回值有且只有一个

    存储过程一般是作为一个独立的部分来执行,而函数可以作为查询语句的一个部分来调用,因此它可以在查询语句中位于 FROM 关键字的后面。 SQL 语句中不可用存储过程,而可以使用函数

    展开全文
  • 自定义git checkout命令可自动管理每个分支的存储,因此您可以轻松地在分支之间切换,而不必每次都进行WIP提交或手动存储和弹出更改。 如果您经常发现自己在多个分支上工作并在它们之间切换,那么您可能熟悉以下...
  • 自定义函数:概念:用户自定义函数(user-defined function,UDF)是一种对 MySQL 扩展的途径,其用法与内置函数相同。创建自定义函数语法结构:CREATE FUNCTION function_nameRETURNS{ STRING | INTEGER | REAL | ...

    自定义函数:

    概念:用户自定义函数(user-defined function,UDF)是一种对 MySQL 扩展的途径,其用法与内置函数相同。

    创建自定义函数语法结构:

    CREATE FUNCTION function_name

    RETURNS

    { STRING | INTEGER | REAL | DECIMAL}

    routine_body

    函数体(routine_body):

    ⑴ 函数体由合法的 SQL 语句构成

    ⑵ 函数体可以是简单的 SELECT 或 INSERT 语句

    ⑶ 函数体如果为复合结构则使用 BEGIN ... END 语句

    ⑷ 复合结构可以包含声明,循环,控制结构

    删除自定义函数语法结构:

    DROP FUNCTION [ IF EXISTS ] function_name

    案例:

    无参函数:

    将系统默认返回的日期格式化为年月月时分表

    c83848278086

    把这个返回格式封装成一个自定义函数,返回类型为 VARCHAR,返回的函数体为 DATE_FORMAT():

    c83848278086

    带参函数:

    创建一个函数 f2,传入 num1 和 num2 返回它们的平均值

    c83848278086

    调用该函数:

    c83848278086

    带有复合结构函数体的自定义函数:

    首先查看下表 tb_user5 的记录:

    c83848278086

    如果每次插入记录都需要写 INSERT 语句,会有点麻烦。现在把 INSERT 语句封装成一个函数,并返回当前插入的记录的 ID:

    c83848278086

    分号 “;” 和系统默认的结束符冲突,所以通过 DELIMITER $$ 将分隔符修改为 “$$”。由于有多个语句要执行,所以需要用 BEGIN ... END 构成一个聚合体。

    调用函数 adduser:

    c83848278086

    返回该条记录的 ID,再查询一下表 tb_user5 的记录:

    c83848278086

    定义局部变量:

    DECLARE var_name [,varname] ... date_type [DEFAULT VALUE]

    局部变量的作用范围是在 BEGIN...END 语句中,而且定义局部变量语句必须在 BEGIN...END语句中的第一行定义

    为变量赋值:

    SET parameter_name = value [,parameter_name = value...]

    c83848278086

    SELECT ... INTO parameter_name

    c83848278086

    用户变量语法(可以理解为全局变量):

    SET @param_name = value

    c83848278086

    流程控制语句:

    ⑴ IF 语句

    语法结构:

    IF search_condition THEN statement_list

    [ELSEIF search_condition THEN statement_list] ...

    [ELSE statement_list]

    END IF

    其中,search_condition 表示条件判断语句,statement_list 表示执行语句。

    案例:

    c83848278086

    传入一个参数,根据数值判断返回指定的数值。

    c83848278086

    ⑵ CASE 语句

    语法结构:

    CASE case_value

    WHEN when_value THEN statement_list

    [WHEN when_value THEN statement_list] ...

    [ELSE statement_list]

    END CASE

    其中,case_value 表示条件判断的变量,when_value 表示变量的取值,

    statement_list 表示执行语句

    案例:

    c83848278086

    CASE

    WHEN search_condition THEN statement_list

    [WHEN search_condition THEN statement_list] ...

    [ELSE statement_list]

    END CASE

    其中,search_condition 表示条件判断,statement_list 表示执行语句

    案例:

    c83848278086

    ⑶ LOOP 语句

    概念:

    实现一个简单的循环,没有结束循环语句,需要通过 LEAVE 来停止循环

    语法结构:

    [begin_label:] LOOP

    statement_list

    END LOOP [end_label]

    其中,begin_label 和 end_label 表示开始和结束的标志可以随意命名,

    statement_list 执行语句。

    ⑷ LEAVE 语句

    概念:

    结束本次循环

    语法结构:

    LEAVE label

    案例:

    c83848278086

    声明局部变量 a 循环累加至 10 打印出来。

    ⑸ ITERATE 语句

    概念:

    跳出本次循环,重新执行循环,只能出现在 LOOP,REPEATE,WHILE 循环中。

    语法结构:

    ITERATE label

    案例:

    c83848278086

    执行结果:

    c83848278086

    由图,声明两个局部变量 x,y,循环 x+1 当 x>10 时结束本次循环;当 x=5 时,y = x*2,

    所以 y = 10 ,接着 ITERATE lp 重新执行 LOOP 循环,直到循环结束。

    ⑹ REPEAT 语句

    概念:

    含有条件控制的循环语句,满足条件跳出循环

    语法结构:

    [begin_label:] REPEAT

    statement_list

    UNTIL search_conditionEND REPEAT [end_label]

    案例:

    c83848278086

    由图,声明局部变量 x 循环加1,大于10时结束循环。

    ⑺ WHILE 语句

    概念:

    含有条件控制的循环语句,满足条件进入循环

    语法结构:

    [begin_label:] WHILE search_condition DO

    statement_list

    END WHILE [end_label]

    案例:

    c83848278086

    由图,当 x < 10 时,循环加1,x >= 10 时跳出循环。

    存储过程:

    MySQL命令的执行流程:

    c83848278086

    如果把流程里的语法分析和编译的环节省略掉,那么 MySQL 的执行效率就会提高。所以这就需要存储过程来完成。

    概念:

    存储过程是 SQL 语句和控制语句的预编译集合,以一个名词存储并作为一个单元处理,它存储在数据库里面,可以由应用程序调用执行,允许用户声明变量和进行流程控制,而且可以接收参数,不仅可以接收输入类型的参数,也可以接收输出类型的参数,同时可以存在多个返回值。

    存储过程的效率比单一的 SQL 执行效率要高,假设有两个 SQL 语句,MySQL 引擎会对这个两个 SQL 语句进行逐一的语法分析,再编译,再执行,而有了存储过程后,只有第一次才进行语法分析和编译流程,后续调用只需调用结果即可。

    优点:

    ⑴ 增强 SQL 语句的功能和灵活性

    ⑵ 实现较快的执行速度

    如果某个操作包含大量 SQL 语句,那么这些语句都将被 MySQL 引擎进行逐一的语法分析,编译和执行的过程,所以效率相对较低,而存储过程是预编译的,当客户端第一次调用存储过程的时候,MySQL 引擎将对它语法分析和编译等操作,然后把编译的结果存储到内存中,后续调用直接从内存里面调用结果。所以效率大量提高。

    ⑶ 减少网络流量

    语法结构:

    CREATE

    [ DEFINER = { user | CURRENT_USER } ]

    PROCEDURE sp_name ( [ proc_parameter [,...] ] )

    [ characteristic ...] routine_body

    proc_parameter:

    [ IN | OUT | INOUT ] param_name_type

    其中,

    IN 表示该参数的值必须在调用存储过程时指定

    OUT 表示该参数的值可以被存储过程改变,并且可以返回

    INOUT 表示该参数的调用时指定,并且可以被改变和返回

    修改存储过程:

    注:只能修改简单的特性,不能修改过程体,若要修改,只能先把存储过程删了,重新创建

    语法结构:

    ALTER PROCEDURE sp_name [characteristic ...]

    COMMENT 'string'

    | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }

    | SQL SECURITY { DEFINER | INVOKER }

    COMMENT:注释

    CONTAINS SQL:包含 SQL 语句,但不包含读或写数据的语句

    NO SQL:不包含 SQL 语句

    READS SQL DATA:包含读数据的语句

    MODIFIES SQL DATA:包含写数据的语句

    SQL SECURITY { DEFINER | INVOKER }:指明谁有权限来执行

    过程体:

    ⑴ 过程体由合法的 SQL 语句构成

    ⑵ 过程体可以是任意的(增、删、改、查、多表连接)SQL 语句

    ⑶ 过程体如果为复合结构则使用 BEGIN ... END 语句

    ⑷ 复合结构可以包含声明,循环,控制结构

    调用存储过程:

    ⑴ CALL sp_name ([ parameter [,...]])

    ⑵ CALL sp_name [()]

    删除存储过程:

    DROP PROCEDURE [IF EXISTS] sp_name

    案例:

    创建不带参数的存储过程:

    c83848278086

    存储体 sp1() 不带参数,过程体获取当前版本号,调用该存储体:

    c83848278086

    创建带有 IN 类型参数的存储过程:

    查询下表 tb_goods_cate 的记录:

    c83848278086

    再创建一个根据 cate_id 删除记录的存储过程:

    c83848278086

    注:参数的变量名不能和表里的字段名一样

    调用:

    c83848278086

    删除 cate_id = 2 的记录,再查询下记录:

    c83848278086

    cate_id = 2 已删除。

    创建带有 IN 和 OUT 类型参数的存储类型:

    c83848278086

    由图,创建存储过程 test,传入类目 id,然后查询对应的类目名称。调用的时候,传入 id 等于1,并把返回的名称赋给全局变量 @name,再通过 SELECT 查询该变量的值。

    创建带有多个 OUT 类型参数的存储类型:

    c83848278086

    由图,创建一个存储过程 test,传入类型 id,输出类型该类型的名称和表里的记录总数。

    总结:

    ⑴ 存储过程实现的功能比较复杂,而函数针对性更强,一般情况下,存储过程主要针对表做操作

    ⑵ 存储过程可以返回多个值,而函数只能有一个返回值

    ⑶ 存储过程一般独立的来执行,而函数可以作为 SQL 语句中的组成部分

    以上为本人的一些学习笔记,如有出错欢迎指正,陆续更新!!!

    展开全文
  • 自定义函数和存储过程 Oracle中支持用户自定义函数以能够处理更加复杂的数据业务;在Oracle数据库系统中函数和存储过程都是预编译的PLSQL代码块的封装,它们具有高效性及重用性。 在Oracle中函数必须有一个返回值...

    自定义函数和存储过程

    Oracle中支持用户自定义函数以能够处理更加复杂的数据业务;在Oracle数据库系统中函数和存储过程都是预编译的PLSQL代码块的封装,它们具有高效性及重用性。

    在Oracle中函数必须有一个返回值,存储过程没有返回值;函数和存储过程都支持参数定义从而接收外部调用的数据传递到函数或存储过程中。

    自定义函数——无参函数

    自定义函数——有参函数(输入型参数,输出型参数,输入输出型参数)

    函数定义语法结构

    create[or replace]function function_name [()]

    return date_type is/as

    begin

    return data;

    end[function_name]

    无参函数

    create or replace function fun_sayhello return varchar2

    is

    begin

    return’你好’;

    end fun_sayhello;

    PL SQL块中调用无参数存储过程

    begin

    dbms_output.put_line( fun_sayhello );

    end;

    普通SQL语句中调用存储过程

    Update information set info = fun_sayhello();

    有参函数

    IN 输入类型,只接收调用时输入,此类型可以省略

    OUT 输出类型,不接收调用输入,此类型函数返回后必须使用变量接收

    IN OUT 输入输出型,可接收输入也可以输出,函数内可对此类型赋值

    IN类型案例

    create or replace function fun_hello(nameIN varchar2)

    return varchar2 is

    begin

    name:=’你好’||name;

    return name;

    end;

    begin

    dbms_output.put_line(fun_hello(‘张三丰’));

    end;

    OUT类型案例

    create or replace function fun_hello(name OUT varchar2)

    return varchar2 is

    begin

    name:=’你好’||name;

    return ‘已经说你好’;

    end;

    declare

    name varchar2(24);

    begin

    dbms_output.put_line(fun_hello(name)); --输出返回值

    dbms_output.put_line(name);--输出out参数值

    end;

    IN OUT类型案例

    create or replace function f_one(name IN OUT varchar2)

    return varchar2 is

    begin

    name:=name||’king’;

    return’你好’||name;

    end;

    declare

    name varchar2(24);

    begin

    dbms_output.put_line(f_one(name)); --输出函数返回值

    dbms_output.put_line(name); --输出in out参数变量值

    end;

    函数实践

    编写一个用户自定义函数带有一个in类型的值类型参数用来表示年龄和一个带out类型的varchar2类型参数,判断年龄是否大于等于18,如果大于等于18则为输出参数赋值为“成年人”并返回字符串“大于等于18岁”否则赋值为“未成年”并返回字符串“小于18岁”。编写PL/SQL块调用测试此函数。

    create or replace function fun_adult(age IN number)

    return string as

    message string(64):='是成年人';

    message2 string(31):='是未成年人';

    begin

      if age >= 18 then

              return message;

          else

              return message2;

       end if;

    end fun_adult;

    declare

        res number:=17;

    begin

        dbms_output.put_line(fun_adult(res));

    end;

    存储过程

    l Oracle中存储过程与函数的最大区别在于函数必须有返回值,而存储过程没有返回值。

    l 存储过程在Oracle数据库中使用procedure关键字定义。

    l 存储过程与函数一样也支持IN、OUT、IN OUT三种形式的参数。

    存储过程定义

    create or replace procedure proc_name[(参数列表...)]is/as

    begin

    PL/SQL语句块......

    end[proc_name];

    触发器

    触发器(trigger)在Oracle中是功能强大的功能代码执行单元,定义格式通常像存储过程和函数,较函数或存储过程复杂;不同的是触发器不允许用户显示调用也不带返回值和参数,它是在满足某种条件时自动触发执行的。触发器通常在需要时由专门数据库开发人员或DBA开发制定。

    其一 是约束数据功能(触发器是一种复杂的约束定义);

    其二 是根据触发动作完成复杂的业务数据处理和记录。

    DML触发器,最常用的触发器,通常在执行insert、delete和update时自动触发

    instead of触发器,建立在视图上的触发器对象,不提倡使用

    DDL触发器,当发生CREATE、ALTER、DROP、TRUNCATE命令时触发此类型触发器

    DB触发器,当数据库系统发生Startup、Shutdown、Logon、Logoff时触发DB触发器

    启用、禁用、删除触发器

    ALTER TRIGGER trig_emp_delete DISABLE;

    ALTER TRIGGER trig_emp_delete ENABLE;

    DROP TRIGGER trig_emp_delete;

    数据库事务

    数据库事务(Database Transaction),是指作为独立的逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。

    事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。

    原子性

    事务必须是原子工作单元,是不可分割的;对于其数据修改,要么全都执行,要么全都不执行

    隔离性

    由并发事务所作的修改必须与任何其它并发事务所作的修改互相隔离。事务查看数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据(事务间是不透明的)。这称为隔离性

    一致性

    交易双方修改后的数据保持一致。

    持久性

    事务在执行完成之后,对于系统的影响是永久性的。事务中所做的任何修改即使出现致命的系统故障也将一直保持

    事务执行控制

    commit 提交事务处理

    rollback 撤销/回滚事务处理

    savepoint 事务保存点

    rollback to savepoint 回滚到事务保存点  

    展开全文
  • MySQL 自定义函数和存储过程的区别

    千次阅读 2019-04-17 18:25:22
    1.MySQL自定义函数简介  在MySQL中使用自定义函数也需要相应的要求,语法如下, 创建新函数: Create function function_name(参数列表) returns返回值类型 函数体内容 相关说明, 函数名:应该合法的标识符,并且...
  • GBase 8a 支持存储过程自定义函数的定义和使用
  • -- ORACLE如何使用存储过程实现添加、修改、删除、查询?--现在我以scott用户中的EMP表给大家详细讲解。SELECT * FROM EMP;------------------------------------- * 添加 *--------------------------------------- ...
  • Mysql系列的目标是:通过这个系列从入门到全面掌握一个高级开发所需要的全部技能。...需求背景介绍线上程序有时候出现问题导致数据错误的时候,如果比较紧急,我们可以写一个存储来快速修复这块的数据,然后再去...
  • Splunk自定义命令开发

    2021-02-05 11:26:29
    自定义命令如何运作的? 使用什么语言开发自定义命令? 内置Python所在位置 如何在后台使用内置Python 内置Python版本 内置Python使用的包和库所在位置 是否有现成的SDK等? SDK下载 SDK存放位置 开发的...
  • MySQL自定义函数与存储过程

    千次阅读 2017-04-11 11:22:58
    自定义函数 自定义函数 (user-defined function UDF)是一种对mysql扩展的途径,其用法和内置函数相同。 自定义函数的两个必要条件:1、参数(不是必有的,例如select version())2返回值 (必有的)。函数可以...
  • 数据库 用户自定义函数

    千次阅读 2020-02-04 19:03:19
    文章目录用户自定义函数用户自定义函数和存储过程比较创建用户自定义函数管理用户自定义函数 用户自定义函数 用户自定义函数和存储过程比较 比较项 存储过程 用户自定义函数 参数 允许有多个输入输出参数 ...
  • 当我们在控制台的时候,输入boot可以启动Linux内核,那么我们以boot为例子来解析一下uboot命令的执行过程,为下一步分析uboot怎样启动Linux来做准备。一、我们搜索boot命令grep -wnR "boot" common 得到:common/...
  • 本博文源于mysql基础,主要对自定义函数和存储过程进行学习与练习。涉及自定义函数的创建使用与存储过程的创建使用。
  • 在这里,您可以找到我的自定义命令的更新,社区中的其他GitHub存储库以及一个小的支持/讨论频道。 因此,如果您正在寻找新的自定义命令,请看一看;) 介绍: 您好,我是黑狼,我今年18岁。 我住在德国,喜欢编码和...
  • 二者本质上没有什么区别。当存储过程和函数被执行的时候,SQL Manager会到procedure cache中去取相应的查询语句,如果在procedure cache里没有相应的查询语句,SQL Manager就会对存储过程和函数进行编译。
  • Git监控器监视Git存储库中是否有新的注释,标签和分支,然后触发自定义命令。怎么运行的使用git fectch并解析其输出以获取新提交,分支和标签的更改。当检测到任何更改时,它将触发带有某些参数的所有*.nofity脚本,...
  • 由于项目需要,需要在存储过程中调用java类,特在此进行总结。环境: centos764bit jdk7 oracle10g64bit先编写java代码 Demo.java,代码如下:package com.longshine.procedure;import java.io.FileInputStream;...
  • MySQL用户自定义变量

    2021-01-18 18:00:13
    如下:用户自定义变量局部变量会话变量系统变量会话变量全局变量局部变量局部变量一般用于SQL的语句块中,比如存储过程中的begin和end语句块。其作用域仅限于该语句块内。生命周期也仅限于该存储过程的调用期间。...
  • Oracle存储过程自定义函数

    万次阅读 2016-06-03 23:29:09
    概述PL/SQL中的过程和函数(通常称为子程序)是PL/SQL块的一种特殊的类型,这种类型的子程序可以以编译的形式存放在数据库中,并为后续的程序块调用。相同点: 完成特定功能的程序 不同点:是否用return语句返回值...
  • 一、前言在前段工作中,曾几次收到超级话题积分漏记的用户反馈。通过源码的阅读分析后,发现问题出在高并发分布式场景下的计数器上。计数器的值会影响用户当前行为所获得积分的大小。比如,当用户在某超级话题下连续...
  • 在使用db2数据库的时候,一般会使用dbvisualizer客户端来进行操作,但是执行函数和存储过程的时候,要是按照Oracle或者Mysql的客户端则会报错,无法创建函数。在创建函数/存储过程的时候,需要在创建存储过程或函数...
  • 在显示芯片不可知计数器的Juniper MX路由器上创建自定义CLI命令(请参阅chip_agnostic_command / docs) 要求: MX平台 朱诺斯> = 17.3R1 此自定义命令只能在主RE上运行 设置: 在本地设备上下载docker: 将...
  • 自定义SQL函数(UDF)创建自定义函数CREATE FUNCTION function_nameRETURNSroutime_body{#函数体#可以带有(任意类型)多个参数、一个返回值#参数数量理论上不能超过1024#函数体由合法SQL语句构成#也可以是简单的select/...
  • 存储过程是一组预编译的SQL语句,它可以包含数据操纵语句、变量、逻辑控制语句等。 存储过程允许带参数: 输入参数:可以在调用时向存储过程传递参数,此类参数可用来向存储过程中传入值(可以有默认值) 输出参数...
  • Mysql高级之存储过程原文:Mysql高级之存储过程概念类似于函数,就是把一段代码封装起来,当要执行这一段代码的时候,可以通过调用该存储过程来实现.在封装的语句体里面,可以用if/else,case,while等控制结构.可以进行sql...
  • 向Linux添加自定义命令 Linux是一个有高度自由度的系统,并且开源,因此,我们就可以根据自己的方便、喜好等去自定义一些功能、命令。 那么今天,我就将我们之前编写过的more.py变成可在终端使用的命令。 终端的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 211,388
精华内容 84,555
热门标签
关键字:

修改用户自定义存储过程的命令是