存储过程

数据库实验十一

|▌冷眼眸甩不掉的悲伤 提交于 2020-01-27 00:17:02
–【问题11.1】在Xk数据库中创建存储过程p_Student,该存储过程返回Student表中班级编号为“20000001”的所有行数据 CREATE PROCEDURE p_Student AS SELECT * FROM Student WHERE ClassNo = '20000001' ; –【问题11.2】执行存储过程p_Student p_Student –【问题11.3】创建存储过程p_StudengtPara,能根据给定的班级编号,返回该班级编号对应的所有学生信息 create procedure p_StudentPara @classno varchar ( 8 ) as select * from student where ClassNo = @ClassNo –【问题11.4】使用参数名传递参数值的方法执行存储过程p_StudentPara,分别查找班级编号为 “20000001”“20000002”的所有学生信息 exec p_StudentPara @ClassNo = '20000001' go exec p_StudentPara @ClassNo = '20000002' go –【问题11.6】创建存储过程p_ClassNum,根据用户指定的班级编号统计该班的学生人数,并将学生人数返回给用户 create procedure p

MySQL存储过程和游标

夙愿已清 提交于 2020-01-26 20:16:23
一、存储过程 什么是存储过程,为什么要使用存储过程以及如何使用存储过程,并且介绍创建和使用存储过程的基本语法。 什么是存储过程: 存储过程可以说是一个记录集,它是由一些T-SQL语句组成的代码块,这些T-SQL语句代码像一个方法一样 实现一些功能(对单表或多表的增删改查),然后再给这个代码块取一个名字,在用到这个功能的时候调用 他就行了。 存储过程的好处: 由于数据库执行动作时,是先编译后执行的。然而存储过程是一个编译过的代码块,所以执行效率要比 T-SQL语句高。 一个存储过程在程序在网络中交互时可以替代大堆的T-SQL语句,所以也能降低网络的通信量,提高通信速率。 通过存储过程能够使没有权限的用户在控制之下间接地存取数据库,从而确保数据的安全 存储过程的基本语法: --------------------创建存储过程------------------------------------ CREATE PROCEDURE procedure_name( IN|OUT variable data_type) BENGIN sql_statement; ...... END; -- MySQL支持IN(传递给存储过程)、OUT(从存储过程传出) -- variable 变量 -- data_type 参数的数据类型 -- sql_statement 中 INTO parameter

使用Oracle的问题--主键自增

牧云@^-^@ 提交于 2020-01-26 18:59:23
主键自增的方法 Oracle中数据表的主键在jsp中的使用一般是在sql语句中的主键位置使用序列让其自增或者使用触发器的特殊存储过程。 触发器 触发器是一中特殊的存储过程,主要是通过事件来触发而被执行的。它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。可以联级运算。如,某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发。 使用触发器 首先正对主键创建一个序列,然后创建触发器,然后在触发器中输入以下代码 CREATE OR REPLACE TRIGGER 创建的触发器名 BEFORE INSERT ON 表名 FOR EACH ROW WHEN ( new . 主键id is null ) begin select 创建的序列名 . nextval into :new . 主键id from dual ; end ; 在sql语句中只需正常输入各字段即可。 触发器优缺点 在一般的逻辑简单的系统中,多使用触发器可使性能提升,但是在偏大的系统,逻辑复杂的项目中不考虑用触发器的存储过程,因为复杂的逻辑会导致触发器的多层嵌套,代码聚合度降低,容易出现死锁情况,调试系统时,触发器的级联关系也会造成一定的烦乱。所以根据系统的实用性选用较好的方法可以事半功倍。 来源: CSDN 作者: 空气里血腥味道 链接: https:/

SQL Server——存储过程

不打扰是莪最后的温柔 提交于 2020-01-26 02:54:13
我想从下面几个方面大概的讲述下存储过程,可能有些知识点是你没有注意的,也可能有些知识点我不知道,欢迎大家指点指点。如有不足,欢迎指教! 存储过程概念 存储过程优点 存储过程的接口 存储过程的解析、编译过程 存储过程安全性 查看存储过程 加密、解密存储过程 存储过程概念 存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(带参存储过程)来执行它。 存储过程优点 开发过程中使用存储过程的优点, 概括起来大体有下面一些: 1: 速度快、性能好。存储过程是一组已经编译过的SQL脚本,它已经进过解析、编译、优化器优化。调用存储过程可以 重复使用它的缓存执行计划。这样节省了解析、分析等所 需消耗的CPU资源。时间 2: 存储过程存储在数据库服务器,可以减少网络通信,减少网络阻塞。 调用存储过程只需存储过程名字和参数,从而避免了 把长串的SQL语句传送到SQL 服务器,可以大大减 轻网络负担。 3: 业务逻辑封装,可以把相当一部分业务逻辑封装到存储过程中,当业务逻辑变更的时候,只要接口不变,只需修改存储过程内部逻辑就OK了,避免了业务逻辑放在代码层,业务 逻辑变动改动大的痛苦。 4: 安全性 参数化的存储过程可以减少SQL Injiection攻击,而且可以通过检验参数、授予对象执行权限提高了安全性。

JAVA调用数据库存储过程

。_饼干妹妹 提交于 2020-01-25 11:51:56
下面将举出JAVA对ORACLE数据库存储过程的调用 ConnUtils连接工具类:用来获取连接、释放资源 复制代码 package com.ljq.test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; /** * 连接工具类 * * ConnUtils类声明为final类说明此类不可以被继承 * * @author jiqinlin * */ public final class ConnUtils { private static String url = "jdbc:oracle:thin:@localhost:1521:orcl"; private static String user = "test"; private static String password = "test"; /** * 说明要访问此类只能通过static或单例模式 */ private ConnUtils() { } // 注册驱动 (只做一次) static { try { Class.forName("oracle.jdbc.driver

SQL Server中 sysobjects、sysolumns、systypes

北战南征 提交于 2020-01-25 10:49:57
1、sysobjects    系统对象表。 保存当前数据库的对象,如约束、默认值、日志、规则、存储过程等 在大多数情况下,对你最有用的两个列是Sysobjects.name和Sysobjects.xtype。前面一个用来列出待考察对象的名字,而后一个用来定义对象的类型 列名 数据类型 描述 name sysname 对象名。 Id int 对象标识号。 xtype char(2) 对象类型。可以是下列对象类型中的一种: C = CHECK 约束 D = 默认值或 DEFAULT 约束 F = FOREIGN KEY 约束 L = 日志 FN = 标量函数 IF = 内嵌表函数 P = 存储过程 PK = PRIMARY KEY 约束(类型是 K) RF = 复制筛选存储过程 S = 系统表 TF = 表函数 TR = 触发器 U = 用户表 UQ = UNIQUE 约束(类型是 K) V = 视图 X = 扩展存储过程 uid smallint 所有者对象的用户 ID。 info smallint 保留。仅限内部使用。 status int 保留。仅限内部使用。 base_schema_ ver int 保留。仅限内部使用。 replinfo int 保留。供复制使用。 parent_obj int 父对象的对象标识号(例如,对于触发器或约束,该标识号为表 ID)。 crdate

sysobjects.Xtype

不羁的心 提交于 2020-01-25 10:48:17
SQL Server 数据库的一切信息都保存在它的系统表格里。 在大多数情况下,对你最有用的两个列是Sysobjects.name和Sysobjects.xtype。前面一个用来列出待考察对象的名字,而后一个用来定义对象的类型 sysobjects 在数据库内创建的每个对象(约束、默认值、日志、规则、存储过程等)在表中占一行。只有在 tempdb 内,每个临时对象才在该表中占一行。 列名 数据类型 描述 name sysname 对象名。 Id int 对象标识号。 xtype char(2) 对象类型。可以是下列对象类型中的一种: C = CHECK 约束 D = 默认值或 DEFAULT 约束 F = FOREIGN KEY 约束 L = 日志 FN = 标量函数 IF = 内嵌表函数 P = 存储过程 PK = PRIMARY KEY 约束(类型是 K) RF = 复制筛选存储过程 S = 系统表 TF = 表函数 TR = 触发器 U = 用户表 UQ = UNIQUE 约束(类型是 K) V = 视图 X = 扩展存储过程 uid smallint 所有者对象的用户 ID。 info smallint 保留。仅限内部使用。 status int 保留。仅限内部使用。 base_schema_ ver int 保留。仅限内部使用。 replinfo int 保留。供复制使用

oracle 存储过程 存储函数

断了今生、忘了曾经 提交于 2020-01-25 10:44:54
一: 定义:指存储在数据库中供所有用户程序调用的子程序,叫存储过程、存储函数。 相同点:完成特定功能的程序 不同点:是否用return语句返回值,存储过程无return返回值,存储函数有return返回值。 二:创建和调用存储过程 创建:create or replace procedure 命令 语法:create or replace procedure 过程名(参数列表) as PLSQL子程序体 调用:两种方式 1.exec 过程名(参数列表); 2.begin 过程名(参数列表); 过程名(参数列表); end; / 例子:1 无参存储过程,打印hellow world create or replace procedure sayhellowworld as begain dbms_output.put_line("hellowworld"); end; / commit; 调用: 1.exec sayhellowworld(); 2.begin sayhellowworld(); sayhellowworld(); end; / 2 有参in存储过程:给某个员工加100工资,应打印出涨前涨后薪水。 create or replace procedure raisesalary(eno in number) as --定义一个变量psal保存涨前薪水

sql 存储过程

馋奶兔 提交于 2020-01-25 07:16:17
一、SQL存储过程的概念,优点及语法   整理在学习程序过程之前,先了解下什么是存储过程?为什么要用存储过程,他有那些优点   定义:将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来, 那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execute,即可自动完成命令。   讲到这里,可能有人要问:这么说存储过程就是一堆SQL语句而已啊? Microsoft公司为什么还要添加这个技术呢?   那么存储过程与一般的SQL语句有什么区别呢?    存储过程的优点:   1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。   2.当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。   3.存储过程可以重复使用,可减少数据库开发人员的工作量   4.安全性高,可设定只有某此用户才具有对指定存储过程的使用权    存储过程的种类:   1.系统存储过程:以sp_开头,用来进行系统的各项设定.取得信息.相关管理工作,   如 sp_help就是取得指定对象的相关信息   2.扩展存储过程 以XP_开头,用来调用操作系统提供的功能  

mysql分页存储过程

流过昼夜 提交于 2020-01-25 03:47:58
CREATE PROCEDURE 'sp_page'( in _pagecurrent int,--/*当前页*/ in _pagesize int,--/*每页的记录数*/ in _ifelse varchar(1000),--/*显示字段*/ in _where varchar(1000),--/*条件*/ in _order varchar(1000)--/*排序*/ ) COMMENT '分页存储过程' BEGIN if _pagesize<=1 then set _pagesize=20; end if; if _pagecurrent < 1 then set _pagecurrent = 1; end if; set @strsql = concat('select ',_ifelse,' from ',_where,' ',_order,' limit ',_pagecurrent*_pagesize-_pagesize,',',_pagesize); prepare stmtsql from @strsql; execute stmtsql; deallocate prepare stmtsql; set @strsqlcount=concat('select count(1) as count from ',_where);--/*count(1)