存储过程

Oracle : PL/SQL数据块存储过程与函数练习

寵の児 提交于 2020-01-07 20:50:54
1.定义一个存储过程,用来查询指定部门的员工的人数和平均工资,如果部门不存在,就引发一个自定义异常,显示“部门编号不存在!”(部门编号作为存储过程的输入参数,在调用存储过程前由用户输入,该部门员工的人数和平均工资需要返回) create or REPLACE PROCEDURE pro_emp(dept number) as avgSal number(10,2); sumDept number; begin select avg(sal),count(deptno) into avgSal,sumDept from emp where deptno=dept; if dept>20 then raise_application_error(-20202,'输入错误!'); elsif dept<=0 then raise_application_error(-20202,'输入错误!'); else dbms_output.put_line('平均工资:'||avgSal); dbms_output.put_line('人数:'||sumDept); end if; end; 调用存储过程 declare deptno number := &deptno; begin pro_emp(deptno); end; 2. 定义一个函数,用来求一个数的N次幂的结果并返回

oracle存储过程创建-调试-调用-删除(一)

元气小坏坏 提交于 2020-01-07 19:03:35
存储过程(Stored Procedure)是一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。 优点:效率高,复用性强,安全性高 存储过程的结构:oracle的存储过程包含三部分:过程声明,执行过程部分,存储过程异常(可省略)。 接下来我们来详细讲述一下存储过程 存储过程的语法 create:创建 关键字 or replace: 如果此名称的存储过程已经创建了,那么用这两个关键字可以替换同名的存储过程,不用会报错,可以省略。 procedure:存储过程 意思是创建的是一个存储过程 pro_name: 存储过程的名称。 (参数): 存储过程的参数,可以省略,有参的存储过程在写参数的时候要指定参数的数据类型。 as: 也可以写成is。 plsql_sentences: pl/sql语句,他是存储过程功能实现的主体。 dowith_sentences: 异常处理语句,也是pl/sql语句,可以省略。 1 create [or replace] procedure pro_name (参数) as 2 begin 3 plsql_sentences; 4 [exception] 5 [dowith_sentences;

postgres 存储过程

99封情书 提交于 2020-01-07 14:25:30
创建表 DROP TABLE IF EXISTS "public"."ipm_model_history_data"; CREATE TABLE "public"."ipm_model_history_data" ( "res_model" varchar(255) COLLATE "pg_catalog"."default", "res_id" varchar COLLATE "pg_catalog"."default" ) 执行存储过程插入数据1000w create or replace function creatData2() returns boolean AS $BODY$ declare ii integer; begin II:=1; FOR ii IN 1..10000000 LOOP INSERT INTO ipm_model_history_data (res_model, res_id) VALUES (116, ii); end loop; return true; end; $BODY$ LANGUAGE plpgsql; select * from creatData2() as tab; 来源: CSDN 作者: houjibofa2050 链接: https://blog.csdn.net/u011243684/article/details

多条件存储过程分页

|▌冷眼眸甩不掉的悲伤 提交于 2020-01-07 11:46:02
create database Exam_Week3 GO USE Exam_Week3 GO create table Classs ( ClaID int identity(1001,1), ClassName varchar(100), Counts int ) go insert into Classs values ('1706B',5), ('1706A',5), ('1705B',5), ('1705A',5), ('1704B',5) go create table Student ( SID int identity(2001,1), ClaID int, --班级id Sname varchar(100), --学生姓名 Sage datetime, Ssex bit ) go insert into Student values (1001,'张三1',2013-10-02,1), (1001,'张三2',2013-10-02,1), (1001,'张三3',2013-10-02,1), (1001,'张三4',2013-10-02,1), (1001,'张三5',2013-10-02,1), (1002,'李四1',2013-10-02,1), (1002,'李四2',2013-10-02,1), (1002,'李四3',2013-10-02,1),

提高数据库查询性能浅谈

谁说胖子不能爱 提交于 2020-01-07 10:41:39
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 1)数据库设计方面: a. 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 b. 应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 可以在num上设置默认值0,确保表中num列没有null值,然后这样查询: select id from t where num=0 c. 并不是所有索引对查询都有效,SQL是根据表中数据来进行查询优化的,当索引列有大量数据重复时,查询可能不会去利用索引,如一表中有字段sex,male、female几乎各一半,那么即使在sex上建了索引也对查询效率起不了作用。 d. 索引并不是越多越好,索引固然可以提高相应的 select 的效率,但同时也降低了 insert 及 update 的效率,因为 insert 或 update 时有可能会重建索引,所以怎样建索引需要慎重考虑,视具体情况而定。一个表的索引数最好不要超过6个,若太多则应考虑一些不常使用到的列上建的索引是否有必要。 e. 应尽可能的避免更新索引数据列,因为索引数据列的顺序就是表记录的物理存储顺序,一旦该列值改变将导致整个表记录的顺序的调整

oracle存储过程创建-调试-调用-删除(二)

喜欢而已 提交于 2020-01-07 08:54:57
上一篇文章已经介绍了存储过程简单的创建,调用,调试和删除。这篇文章将会主要讨论一下存储过程中选择循环判断等的用法。 存储过程中变量的定义和赋值 在存储过程里,我们除了可以使用参数,还可以定义一些变量来进行操作。 第一种赋值方式 ::= 1. 定义的变量要写在as或is关键字后面,begin前面。 2. 定义的变量区别于参数的是,需要指定长度。 3. 定义完的参数可以在begin中对其进行赋值,oracle中赋值的动作不是 = 而是 := 。 4. 参数为in类型的不允许再次赋值了。 5. 下面的参数num虽然存在,但是下面的代码中没有地方引用,所以编译的时候会提醒 ‘已编译但有警告’。 6. commit提交一定要写,否则无法成功完成insert操作。 7. 为字符类型的变量赋值的时候两边要用单引号,数值型则不用。 1 create or replace procedure test3(num number) as 2 age integer;--integer不需要指定长度 3 names varchar2(20);--varchar2 需要指定长度 4 sex integer; 5 begin 6 age:=0;--为上面定义的变量赋值不是用 = 而是用 := 7 names:='张三';-- 为字符型数据赋值两边要加上单引号 8 sex:=1; 9 --num:=1;

MySQL基础篇(04):存储过程和视图,用法和特性详解

China☆狼群 提交于 2020-01-07 01:35:34
本文源码: GitHub·点这里 || GitEE·点这里 一、存储过程 1、概念简介 存储程序是被存储在服务器中的组合SQL语句,经编译创建并保存在数据库中,用户可通过存储过程的名字调用执行。存储过程核心思想就是数据库SQL语言层面的封装与重用性。使用存储过程可以较少应用系统的业务复杂性,但是会增加数据库服务器系统的负荷,所以在使用时需要综合业务考虑。 2、基本语法格式 CREATE PROCEDURE sp_name ([proc_parameter[,...]]) [characteristic ...] routine_body 案例一:计算消费折扣 -- 创建存储过程 DROP PROCEDURE IF EXISTS p01_discount ; CREATE PROCEDURE p01_discount(IN consume NUMERIC(5,2),OUT payfee NUMERIC(5,2)) BEGIN -- 判断收费方式 IF(consume>100.00 AND consume<=300.00) THEN SET payfee=consume*0.8; ELSEIF (consume>300.00) THEN SET payfee=consume*0.6; ELSE SET payfee = consume; END IF; SELECT payfee AS

MySQL基础篇(04):存储过程和视图,用法和特性详解

偶尔善良 提交于 2020-01-06 21:06:45
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 本文源码: GitHub·点这里 || GitEE·点这里 一、存储过程 1、概念简介 存储程序是被存储在服务器中的组合SQL语句,经编译创建并保存在数据库中,用户可通过存储过程的名字调用执行。存储过程核心思想就是数据库SQL语言层面的封装与重用性。使用存储过程可以较少应用系统的业务复杂性,但是会增加数据库服务器系统的负荷,所以在使用时需要综合业务考虑。 2、基本语法格式 CREATE PROCEDURE sp_name ([proc_parameter[,...]]) [characteristic ...] routine_body 案例一:计算消费折扣 -- 创建存储过程 DROP PROCEDURE IF EXISTS p01_discount ; CREATE PROCEDURE p01_discount(IN consume NUMERIC(5,2),OUT payfee NUMERIC(5,2)) BEGIN -- 判断收费方式 IF(consume>100.00 AND consume<=300.00) THEN SET payfee=consume*0.8; ELSEIF (consume>300.00) THEN SET payfee=consume*0.6; ELSE SET payfee

数据库:存储引擎+InnoDB+TokuDB+ MyIASM +Memory+索引+三范式等

余生长醉 提交于 2020-01-06 20:11:10
存储引擎 概念 数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以 获得特定的功能。现在许多不同的数据库管理系统都支持多种不同的数据引擎。 存储引擎主要有: 1. MyIsam , 2. InnoDB, 3. Memory, 4. Archive, 5. Federated 。 InnoDB(B+树) InnoDB 底层存储结构为B+树, B树的每个节点对应innodb的一个page,page大小是固定的,一般设为 16k。其中非叶子节点只有键值,叶子节点包含完成数据。 数据库:存储引擎+InnoDB+TokuDB+ MyIASM +Memory+索引+三范式等 适用场景 : 1)经常更新的表,适合处理多重并发的更新请求。 2)支持事务。 3)可以从灾难中恢复(通过 bin-log 日志等)。 4)外键约束。只有他支持外键。 5)支持自动增加列属性 auto_increment。 TokuDB(Fractal Tree-节点带数据) TokuDB 底层存储结构为 Fractal Tree,Fractal Tree 的结构与 B+树有些类似, 在 Fractal Tree中,每一个 child 指针除了需要指向一个 child 节点外

java调用存储过程(stored procedures)的HelloWorld例子

╄→尐↘猪︶ㄣ 提交于 2020-01-06 17:03:33
1.java调用存储过程(stored procedures)的HelloWorld程序 有点数据 库基础的人都知道。存储过程(stored procedures)和java没什么关系。它是一段纯粹的数据库sql语言的程序,事先存储在数据库中。没有java程序调用,人家自己独立运行的也 挺好。现在的问题就是,你有一个java程序,你想调用现有的一段存储过程,如何做这件事儿?我们底下的实验就是先向数据库存进去一个名为p4的存储过 程,然后再编一段java程序去调用它。 以下就是我向我的数据库中,插入一个叫做p4的存储过程的截图。 下 面解释一下:delimiter是定义边界的意思。delimiter $就是定义$为边界。一个$和下一个$之间就像一个区域一样,在这个区域之间的东西才会被执行。mysql缺省默认来讲见到 ;就执行,但看到delimiter $ 以后,就只会忍饥挨饿盯着直到下一个$出现,才会执行两个$之间的命令。 最后的delimiter ; 就把分隔符从$换回到默认的 ;(注意 delimiter后边一定有一个空格) create procedure p4(OUT cnt int) --创建MySQL存储过程p4 --此存储过程的过程名是p4,该过程包含1个参数, --是输出类型的(以OUT标示),参数名是cnt,类型是int select count(*) into