存储过程

【Oracle_Package】Oracle的Package的作用及用法 【20140612】

心不动则不痛 提交于 2019-12-06 08:27:23
Oracle的Package的作用 简化应用设计、提高应用性能、实现信息隐藏、子程序重载。 1、Oracle的Package除 了把存储过程放到一堆儿以外还有没有其他的作用(好处)? 你不觉得把存储过程分门别类是很重要的么,而且不同的package的存储过程可以重 名。 用package不仅能把存储过程分门别类,而且在package里可以定义公共的变量/类型,既方便了编程,又减少了服务器的编译开销。 2、如何把现有的存储过程加入到Package中? copy and pasty,不过调用的时候要带包名了。 3、除了使用SQL Plus,还有没有什么工具做Package? 也有方便的第三方工具了,不过得自己找了。 用第三方工具吧,比如sql navigator。www.quest.com 4、使用SQL Plus编译Package,是否每次都是编译Package中所有的存储过程? 是 包也是一种命名pl/sql块,和存储过程、函数一下,都是在数据库启动的时候就载入内存的。开销的大小很难判断,因为你不用包,但是要完成包的功能的话,还是要用PL/SQL来完成的,服务器一样有开销。相对来说,用包少了SQL的语法分析、解释过程,开销还少一点。 “过程一般都不超过20行”那我倒很少遇到。用不用子过程关键要看是不是能定义可重用的子过程,用子过程效率不会低。 包的作用 :

数据库之存储过程

浪子不回头ぞ 提交于 2019-12-06 08:20:27
什么是存储过程?使用存储过程的优缺点? 存储过程(Stored Procedure)是一组为了完成特定功能的SQL 语句集,经编译后存储在数据库(经过第一次编译后再次调用不需要再次编译)。 注意:用户通过 指定存储过程的名字并给出参数(如果该存储过程带有参数) 来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。 如下为ASP.NET更新事件处理,使用Command对象修改数据库中的数据,展示指定存储过程及给参数。 1 protected void btn_Update_Click(object sender, EventArgs e) 2 { 3 int intUpdateCount; //记录修改次数 4 5 SqlCommand sqlCommand = new SqlCommand(); 6 SqlConnection conn = CreateConnection(); 7 sqlCommand.Connection = conn; 8 sqlCommand.CommandText = "update_student"; //将存储过程名称赋给Command对象的CommandText属性 9 10 /*---------说明命令类型为存储过程--------*/ 11 sqlCommand.CommandType =

mysql-常用组件之触发器

六月ゝ 毕业季﹏ 提交于 2019-12-06 06:39:40
基本概念 触发器是一种特殊的存储过程,不像存储过程需要显示调用,触发器通过监控表事件(增删改操作)自动触发某条 sql 的执行,可以用于购物车加购后库存减少等场景。 触发器基本操作 1. 创建触发器 DELIMITER $$ CREATE /*[DEFINER = { user | CURRENT_USER }]*/ TRIGGER `dbname`.`trigger` BEFORE/AFTER INSERT/UPDATE/DELETE ON `dbname`.`<Table Name>` FOR EACH ROW BEGIN -- 触发的 sql 动作 END$$ DELIMITER ; 触发时间: before:表中数据发生改变前的状态 after:表中数据发生改变后的状态 PS:如果 before 触发器失败或者语句本身失败,将不执行 after 触发器(如果有的话) 触发事件: INSERT DELETE UPDATE old/new 关键字 触发器针对的是数据库中的每一行记录,每行数据在操作前后都会有一个对应的状态,触发器将没有操作之前的状态保存到 old 关键字中,将操作后的状态保存到 new 中,不同类型的触发事件拥有不同的关键字类型: 触发事件类型 new/old使用 INSERT事件 没有 old,只有 new,new 表示将要(插入前)或者已经增加(插入后

Oracle存储过程(包:PACK_KPI_KERNEL For YS三度评价体系)

拈花ヽ惹草 提交于 2019-12-06 03:24:31
1 CREATE OR REPLACE PACKAGE PACK_KPI_KERNEL IS 2 --定义多级数组 字符串 3 TYPE TSTRARRY IS TABLE OF VARCHAR2(4000) INDEX BY BINARY_INTEGER; 4 5 TYPE TSTRARRYARRY IS TABLE OF TSTRARRY INDEX BY BINARY_INTEGER; 6 7 TYPE TSTRARRYARRYARRY IS TABLE OF TSTRARRYARRY INDEX BY BINARY_INTEGER; 8 9 -- Author : D 10 -- Created : 2011 11 -- Purpose : KPI模块 绩效考核核心算法包 12 13 --核心 调用接口 as_KEY是关键值 as_flag 是调用标记 14 PROCEDURE KERNEL_MASTER_CONTROL; 15 16 --自动获取绩效考核月份参数 默认为 本月上月的月份 17 FUNCTION GET_KPI_DATE RETURN VARCHAR2; 18 19 --核心 调用接口 as_KEY是关键值 as_flag 是调用标记 20 PROCEDURE KT_MAIN_MASTER_CONTROL(as_KEY IN VARCHAR2, as

MySQL 行列转换变化各种方法实现总结(行变列报表统计、列变行数据记录统计等)

女生的网名这么多〃 提交于 2019-12-06 02:02:04
前言: mysql行列变化,最难的就是将多个列变成多行,使用的比较多的是统计学中行变列,列变行,没有找到现成的函数或者语句,所以自己写了存储过程,使用动态sql来实现,应用业务场景,用户每个月都有使用记录数录入一张表,一个月一个字段,所以表的字段是动态增长的,现在需要实时统计当前用户使用的总数量,如果你知道有多少个字段,那么可以用select c1+c2+c3+…. From tbname where tid=’111’;来实现,但是关键是这个都是动态的,所以在应用程序端来实现确实不适宜,可以放在数据库后台在存储过程里实现。 而且在行变成列中,如果要写单个sql来实现,列的数目就需要写死,因为如果不知道要展示成多少列的话,就需要用动态变量,而一条sql里面无法使用动态变量。但是可以使用sql块来实现动态的效果。 一,列变成行例子演示 1,准备测试数据 这是基础数据表,里面有多个字段wm201403……,现在需要把N个这样的列变成行数据。 USE csdn; DROP TABLE IF EXISTS flow_table; CREATE TABLE `flow_table` ( `ID` INT(11) NOT NULL AUTO_INCREMENT, `Number` BIGINT(11) NOT NULL, `City` VARCHAR(10) NOT NULL,

[mysql]存储过程DECLARE ... HANDLER语法

泪湿孤枕 提交于 2019-12-05 23:21:22
###语法 DECLARE handler_action HANDLER FOR condition_value [, condition_value] ... statement ###解释 当发生 condition_value 的时候,执行 statement 语句,然后触发 handler_action 动作。 ###参数 handler_action: CONTINUE 继续 EXIT 退出 UNDO 目前不支持 condition_value: mysql_error_code mysql错误码,如1051,所有的错误码都可以在这里找到 错误码大全 SQLSTATE [VALUE] sql语句状态码,同样可以在 错误码大全 这里找到 condition_name 事先声明的条件名称,详细请参考 DECLARE ... CONDITION SQLWARNING 匹配所有以 01 开头的 SQLSTATE NOT FOUND 匹配所有以 02 开头的 SQLSTATE ,常和游标CURSOR结合,当获取不到下一条数据的时候会触发 SQLEXCEPTION 所有不是以 '00', '01', 或 '02' 开头的 SQLSTATE,基本表示sql错误,事务回滚可以利用这个事件。 默认行为 如果触发SQLEXCEPTION,但没有相应的action,那么默认调用 EXIT

27-SQLServer系统扩展存储过程

限于喜欢 提交于 2019-12-05 23:17:28
一、注意点 1、在SQLServer中,有些系统扩展存储过程,是有风险,需要取消public角色的执行权限。 2、从SQLServer2005开始就不能通过sp_dropextendedproc 删除系统扩展存储过程。 3、系统扩展存储过程是不能被删掉的,也没办法禁用(sysadmin角色的用户肯定拥有执行的权限),所以如果有公司基线要求,我们要做的是拒绝public角色拥有这些扩展存储过程的执行权限。 4、一些高风险的存储过程如下:   xp_cmdshell:以操作系统命令行解释器的方式执行给定的命令字符串,并以文本行的形式返回所有输出;   xp_readerrorlog:读取SQLServer的错误日志;   xp_snmp_getstate:获取snmp状态信息;   xp_sprintf:格式化数据;   xp_sqlinventory:查询SQLServer清单;   xp_sqlregister:对注册表的读取和编辑;   xp_sqltrace:SQL跟踪记录;   xp_servicecontrol:服务管理控制,该存储过程允许用户启动、停止、暂停或运行服务;   xp_sscanf:从字符串中读取数据数据到每个格式参数给出的参数位置;   xp_availablemedia:该存储过程可以查看系统上可用的磁盘驱动器的空间信息;   xp_subdirs

使用存储过程批量造数

梦想的初衷 提交于 2019-12-05 23:04:44
DROP PROCEDURE addSuchData; DELIMITER $$ CREATE PROCEDURE addSuchData(in i int) BEGIN DECLARE id int unsigned default 1; DECLARE trade_order_id int unsigned default 10; WHILE i < 2000 DO INSERT INTO `T_EIPO_STOCK_SUBSCRIBE_ORDER`(`id`, `trade_order_id`, `account_id`, `account_name`, `account_type`, `ae_code`, `ae_name`, `stock_code`, `stock_name`, `subscribe_type`, `subscribe_qty`, `subscribe_price`, `subscribe_fee`, `subscribe_total_amount`, `currency`, `actual_qty`, `actual_amount`, `refund_amount`, `bourse_refund_amount`, `apply_channel`, `trade_status`, `call_abc_eipo_no`, `remark`,

009-MySQL循环while、repeat、loop使用

房东的猫 提交于 2019-12-05 23:01:55
1、由于测试需要   需要将数据插入到百万级别,故需要使用循环语句,循环参看: 009-MySQL循环while、repeat、loop使用 方式三、使用values批量插入 【【推荐答案】】 基础格式 INSERT INTO test_table (modelid, modelname, `desc`) VALUES (1, CONCAT('name', 1), 'desc1'), (2, CONCAT('name', 2), 'desc2'); 接下来主要是sql语句的拼装, delimiter // #定义标识符为双斜杠 DROP PROCEDURE IF EXISTS my_procedure ; #如果存在 my_procedure 存储过程则删除 CREATE PROCEDURE my_procedure () #创建无参存储过程 BEGIN DECLARE n INT DEFAULT 1 ; # 申明变量 set @execSql='insert into test_table (modelid,modelname,`desc`) values'; set @execdata = ''; WHILE n <= 10001 DO set @execdata=concat(@execdata,"(",n,",","'name",n,"',","'desc'",")");