存储过程

(学习笔记)Oracle存储过程、存储函数

为君一笑 提交于 2020-01-18 06:16:02
Oracle存储过程和存储函数都是数据库对象,他们都是一段可执行的程序,存储过程没有返回值,存储函数有返回值 存储过程——语法:     create or replace procedure 存储过程名(参数列表)  //创建或替换存储过程(已存在就替换,否则就新建,参数列表可以为空)     as         //说明或声明部分     brgin       //程序体     end;    执行上述代码会有一条以编译的提示,接下来就可以进行调用    调用方式: 1.执行 exec 存储过程名+();         2.begin           存储过程名+();   //调用一次           存储过程名+();    /在调用一次         end;  自行一个带参数的存储过程   建表 create table employee (in number(3,0) pormary key, name nvarchar2(3), salary number(7,2)); 插入一条测试数据 insert into employee (1,'大明',4500);   create or replace procedure raiseSalary(eno number)  //创建名为raiseSalary的储存过程,接受一个员工id参数   as   

赋予oracle执行存储过程权限和创建表权限

孤街醉人 提交于 2020-01-18 05:07:22
本文转载自: https://www.cnblogs.com/linn/p/4229338.html 作者:linn 转载请注明该声明。 grant create any table to username; grant create any procedure to username ; grant execute any procedure to username ; 创建执行JOB 权限 grant create job to 用户; grant manage scheduler to 用户; 给一个表的读取权限 grant select on 表名 to 用户名; 删除修改权限 alter是有truncate权限 GRANT SELECT,INSERT,UPDATE,DELETE GRANT SELECT,INSERT,UPDATE,DELETE,alter 删除读取所有表的权限 Revoke select any table from 用户名; 创建表权限 grant resource to common_user -- grant create table to common_user -- grant select any table to common_user; 获取某个用户下的全部表 select ' grant select on ' || tname ||

MybatisPlus中调用Oracle存储过程

安稳与你 提交于 2020-01-18 03:25:24
起因 由于需要将新数据同步到另外的数据库,所以需要使用 dblink 进行操作,但是 dblink不支持写入操作 ,因此需要调用写好的存储过程才能实现将新数据插入新数据的同时插入旧数据库。 准备工作 预先准备好新旧两个数据库 旧的数据库 create table OLD_USER ( USER_ID NUMBER ( 6 ) not null primary key , LOGIN_NAME VARCHAR2 ( 100 ) not null , REAL_NAME VARCHAR2 ( 300 ) , PASSWORD CHAR ( 64 ) ) 新的数据库 create table NEW_USER ( ID NUMBER(11) not null primary key, CREATE_TIME TIMESTAMP(6), UPDATE_TIME TIMESTAMP(6), DELETED NUMBER(1), ACCOUNT VARCHAR2(255), USERNAME VARCHAR2(255), PASSWORD VARCHAR2(255) ) 对应的实体为: package com . donlex . demo . entity ; import com . baomidou . mybatisplus . annotation . FieldFill ;

SQLServer异常捕获(Try Catch)

喜你入骨 提交于 2020-01-18 02:54:18
/* SQLServer异常捕获 在SQLserver数据库中,如果有很多存储过程的时候,我们会使用动态SQL进行存储过程调用存储过程,这时候,很可能在某个环节就出错了,但是出错了我们很难去跟踪到出错的存储过程,此时我们就可以使用异常处理,通过日志表来记录存储过程的执行情况,然而定位到错误的存储过程,以下是一个存储过程异常处理的小实例: */ /*===================================================== 相关错误消 息如下: ERROR_NUMBER() 返回错误号。 ERROR_SEVERITY() 返回严重性。 ERROR_STATE() 返回错误状态号。 ERROR_PROCEDURE() 返回出现错误的存储过程或 触发器的名称。 ERROR_LINE() 返回导致错误的例程中的行 号。 ERROR_MESSAGE() 返回错误消息的完整文本。 ========================================================*/ CREATE TABLE #LogTable /*可以建一个实体表来保存错误的信息*/ ( ID int identity(1,1),--错误序号 ErrorNumber int,--错误号 ErrorSeverity int,--严重性 ErrorState int,

触发器和存储过程简述

只愿长相守 提交于 2020-01-17 15:32:34
1 什么是触发器? 触发器就是某个表发生一个事件(增删改操作),自动执行预先编译好的sql语句,执行相关操作。触发器事件和sql语句是原子性的,保证了数据的完整性。 2 create trigger 触发器名称 before /after insert/update/delete on 表名 for each row(每行变动都触发) begin Sql语句 end; delimiter ;--此处必须有空格,表示语句的结束 3 new 代表触发器执行添加或者更新时的被操作的记录 4 old 代表触发器执行删除或者更新时的被操作的记录 5 什么是存储过程? 存储过程类似于函数,但是存储过程没有返回值,用call调用存储过程。 6 触发器和存储过程的比较? 触发器是自动调用,存储过程需要手动调用。 触发器适用于简单的sql事件, 存储过程适用于复杂的sql事件,存储过程可以在java中直接调用。 来源: https://www.cnblogs.com/fengfeng21/p/12205688.html

Oracle存储函数,存储过程

坚强是说给别人听的谎言 提交于 2020-01-17 05:48:48
一、Oracle存储函数:存储的PL/SQL语法块,完成特定的功能。 1、语法: 函数关键字: function (1)创建函数 CREATE [OR REPLACE] FUNCTION <function name> [(param1,param2)] RETURN <datatype> IS|AS [local declarations] declare ..... BEGIN Executable Statements; RETURN result; EXCEPTION Exception handlers; END; (2)调用函数 --调用 --1.写查询调用 select fun1 from dual; --2.PL/SQL语法块调用 declare my_name varchar2(20); begin my_name := fun1; dbms_output.put_line(my_name); end; 2、函数的参数模式 (1)输入参数 in: --有参的函数 create or replace function fun2(s_id number) return varchar2 as t_name varchar2(20); begin   select sname into t_name from stu where sid = s_id;   return

Mysql存储过程

爱⌒轻易说出口 提交于 2020-01-17 05:28:15
SQL语句需要先编译然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。 存储过程是可编程的函数,在数据库中创建并保存,可以由SQL语句和控制结构组成。当想要在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。数据库中的存储过程可以看做是对编程中面向对象方法的模拟,它允许控制数据的访问方式。 存储过程的优点: (1).增强SQL语言的功能和灵活性:存储过程可以用控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算。 (2).标准组件式编程:存储过程被创建后,可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句。而且数据库专业人员可以随时对存储过程进行修改,对应用程序源代码毫无影响。 (3).较快的执行速度:如果某一操作包含大量的Transaction-SQL代码或分别被多次执行,那么存储过程要比批处理的执行速度快很多。因为存储过程是预编译的。在首次运行一个存储过程时查询,优化器对其进行分析优化,并且给出最终被存储在系统表中的执行计划。而批处理的Transaction-SQL语句在每次运行时都要进行编译和优化,速度相对要慢一些。 (4).减少网络流量:针对同一个数据库对象的操作(如查询、修改)

sq:mysql:存储过程

一个人想着一个人 提交于 2020-01-16 19:59:12
存储过程简介 SQL语句需要先编译然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集, 经编译后存储在数据库中 ,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。 存储过程是可编程的函数,在数据库中创建并保存,可以由SQL语句和控制结构组成。 当想要在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。 数据库中的存储过程可以看做是对编程中面向对象方法的模拟,它允许控制数据的访问方式。 存储过程的优点: (1).增强SQL语言的功能和灵活性:存储过程可以用控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算。 (2).标准组件式编程:存储过程被创建后,可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句。而且数据库专业人员可以随时对存储过程进行修改,对应用程序源代码毫无影响。 (3).较快的执行速度:如果某一操作包含大量的Transaction-SQL代码或分别被多次执行,那么存储过程要比批处理的执行速度快很多。因为存储过程是预编译的。在首次运行一个存储过程时查询,优化器对其进行分析优化,并且给出最终被存储在系统表中的执行计划。而批处理的Transaction-SQL语句在每次运行时都要进行编译和优化,速度相对要慢一些。 (4).减少网络流量

Oracle存储过程

允我心安 提交于 2020-01-16 18:41:41
存储过程 存储过程就是一段在oracle中的业务逻辑,可以有输入参数和输出参数进行传值; 函数和存储过程的区别 声明所使用的标识符不一样 ,函数使用function ,存储过程procedure 1在oracle中方法必须有返回值(必须只能有一个返回值),存储过程没有返回值(但是可以通过返回参数地址引用赋值) 2函数用在sql语句中 (可以调用多个),存储过程用使用CallableStatement 对象调用(只能调用一个) 3函数计算并返回一个计算结果,存储过程一般是用来完成特定的数据操作(比如修改、插入数据库表或执行某些DDL语句等等),函数只有一个返回值,另外,存储过程和函数同样支持in,out,in out这三种类型的参数,游标类型也可以; 存储过程使用 编写存储过程后右键点击存储过程,点击测试,输入参数点击运行,即可测试存储过程 create or replace procedure myProcedure ( aa in varchar2 , bb out varchar2 , cc in out varchar2 ) is str varchar2 ( 20 ) ; begin dbms_output . put_line ( aa ) ; bb: = 'bb' ; cc: = 'cc' ; end ; 存储过程中返回游标 --创建包定义游标 create or

sql之T-SQL

此生再无相见时 提交于 2020-01-16 16:17:38
下面就T-SQL的几个方面来分别讲解一下。 1、变量 要动态的写sql语句,就不能没有变量。 声明变量并赋值: 1 declare @i as int;--定义一个 int 类型的 变量 (as可以省略) 2 print @i;--这注意:没有赋值之前,程序不会报错,而且输出一个 空 3 set @i=3; 4 print @i; 在sql server 2008之后就可以对变量 在声明的同时进行赋值 1 declare @a int=3; 2 print @a; 在变量的使用过程中,一定要注意nvarcahr 和nchar的区别。 1 declare @s nvarchar(20); 2 set @s='Hello'; 3 set @s=@s+' World!'; 4 print @s;--输出的是 Hello World! 5 6 declare @s2 nchar(20); 7 set @s2='Hello'; 8 set @s2=@s2+' World!'; 9 print @s2;--输出的是 Hello。 为什么使用nchar却是输出的 Hello,因为:nchar是固定长度,即使长度没有达到最大,但是其余长度用 空来代替了,所以 相当于是满的,所以在进行字符串的相加 是不会起作用的。 在查询中赋值: 1 declare @now datetime; 2 select