mysql存储过程语法学习

mysql存储过程语法学习
mysql存储过程语法学习

mysql存储过程语法学习

2008-12-23 19:50

一个存储过程包括名字,参数列表,以及可以包括很多SQL语句的SQL语句集。创建存储过程:

调用存储过程的方法是:

删除存储过程的方法是:

创建带参数的存储过程:

调用带参数的存储过程:

另一个带IN和OUT参数的存储过程:

数据库实验报告六_存储过程

HUNAN UNIVERSITY 数据库 实验报告 学生姓名 学生学号 专业班级 指导老师 2017 年5月24日

SELECT COUNT(*)INTO more90 FROM sc WHERE cno = countcno AND grade >= 90; /*将结果存入新表sumScore中*/ create table sumScore( scorestage char(10), number smallint); insert into sumScore values('x<60', less60); insert into sumScore values('60<=x<70', b60a70); insert into sumScore values('70<=x<80', b70a80); insert into sumScore values('80<=x<90', b80a90); insert into sumScore values('x>=90', more90); END$$ call sumScore(); /*调用上述存储过程*/ 首先创建存储过程,然后再调用存储过程。结果如下: (上述结果图截自Navicat软件) 可以看到,在stuinfo中新建了一个基本表sumscore,表中内容是数学课程成绩的各分数段的人数。 2、统计任意一门课的平均成绩。 代码如下: DELIMITER $$ CREATE PROCEDURE `scoreAvg`() BEGIN declare curname char(40) default null; /*临时存放课程名*/ declare curcno char(4) default null; /*临时存放课程号*/ declare curavg float; /*临时存放平均成绩*/ declare mycursor cursor for /*定义游标*/ select cno, cname from course;

sql数据库试验九:T-SQL语言存储过程及数据库的安全性

实验九:T-SQL语言、存储过程及数据库的安全性 一、实验目的 1.掌握数据变量的使用; 2.掌握各种控制语句及系统函数的使用; 3.掌握存储过程的实现; 4.掌握混合模式下数据库用户帐号的建立与取消方法; 5.掌握数据库用户权限的设置方法; 6.掌握在企业管理器中进行备份、恢复操作的步骤; 二、实验学时 2学时 三、实验要求 1.了解T-SQL支持的各种基本数据类型及变量的使用; 2.了解T-SQL各种运算符、控制语句及函数的功能及使用方法; 3.掌握存储过程的编写和运行方法 4.熟悉数据库完全备份及恢复的方法; 5.了解SQL Server 2008系统安全; 6.熟悉数据库用户、服务器角色及数据库角色的用法 7.完成实验报告。 四、实验内容 以student数据库为基础数据,完成以下内容 1.变量及函数的使用: 1)创建局部变量@xh(学号)并赋值,然后输出数据表student中所有等于该值的学生的学号、姓名、性别、所属院系及年龄等信息; 2)将学号为200515008的学生的姓名赋值给变量@name; 3)计算学生信息表student中学生最高年龄和最低年龄之差,并将结果付给@cz;4)定义一函数,按系别统计当前所有学生的平均年龄,并调用该函数。 5)定义一函数,通过姓名查询某学生的学号、性别、年龄、系别、选修课程名及成绩。 2.编写并执行存储过程 ,查询以下信息:班级、学号、姓名、pr_StuScore创建一个无参存储过程(1).性别、课程名称、考试成绩。 (2)创建一个带参数的存储过程stu_info,该存储过程根据传入的学生编号在student表中查询此学生的选修课程及成绩信息。 (3)创建一个带参数的存储过程StuScoreInfo2,该存储过程根据传入的学生编号和课程名称查询以下信息:班级、学号、姓名、性别、课程名称、考试成绩。

利用存储过程创建数据库及表

/* 利用存储过程来创建数据库 */ use master go --判断存储过程PRC_create_LX是否存在 if exists(select*from sys.procedures where name='PRC_create_LX') drop proc PRC_create_LX go --创建存储过程PRC_create_LX create proc PRC_create_LX as --判断数据库P_LX是否存在 if(exists(select*from sys.databases where name='P_LX')) begin print'存在' --数据库存在就删除 drop database P_LX --判断数据库是否删除成功 if(exists(select*from sys.databases where name='P_LX')) begin print'请先删除数据库' end else begin print'恭喜你删除数据库成功' end end else begin print'不存在' --数据库 create database P_LX --日志文件 on primary ( name='P_LX_data', filename='c:\cs\P_LX_data.mdf', size=3MB ) log on

( name='P_LX_log', filename='c:\cs\P_LX_log.ldf', size=3MB ) if(exists(select*from sys.databases where name='P_LX')) begin print'恭喜你新建数据库成功' end else begin print'数据库不存在请先创建数据库' end end go --判断表格是否存在(存在就删除) if exists(select*from sys.objects where name='department') drop table department if exists(select*from sys.objects where name='education') drop table education if exists(select*from sys.objects where name='crew') drop table crew print'创建表如下' --创建表格 create table crew ( C_ID int identity(1,1)primary key, C_name varchar(100), C_dept int, C_age int, C_set bit, C_workage int, C_hiredate date, C_education int, C_remark varchar(500) ) go create table department ( D_ID int references crew(C_ID),

数据库系统原理与开发-数据库存储过程

6.3 数据库存储过程

【本节的主要内容】 ?了解存储过程的概念 ?掌握存储过程创建、删除的方法?掌握存储过程的执行方法 ?掌握PostgreSQL的PL/SQL基本语法?理解存储过程的优缺点

一、什么是存储过程 ?存储过程(Stored Procedure)是一种数据库的对象; ?由一组能完成特定功能的SQL 语句集构成; ?是把经常会被重复使用的SQL语句逻辑块封装起来,经编译后,存储在数据库服务器端; ?当被再次调用时,而不需要再次编译; ?当客户端连接到数据库时,用户通过指定存储过程的名字并给出参数,数据库就可以找到相应的存储过程予以调用。

二、创建存储过程 ?不同的数据库系统创建存储过程的语法存在差异; ?许多数据库为创建存储过程和函数提供不同命令; ?如ORACLE、MySQL、SQL SERVER等数据库,使用CREATE PRECEDURE命令创建存储过程,使用CREATE FUNCTION命令创建函数。 ?PostgreSQL使用CREATE FUNCTION命令创建存储过程。

4 三、创建存储过程的语法 CREATE [ OR REPLACE ] FUNCTION name ( [ [ argmode ] [ argname ] argtype [ { DEFAULT | = } default_expr ] [, ...] ] ) [ RETURNS retype | RETURNS TABLE ( column_name column_type [, ...] ) ]AS $$ //$$用于声明存储过程的实际代码的开始DECLARE -- 声明段BEGIN --函数体语句END; $$ LANGUAGE lang_name; //$$ 表明代码的结束, LANGUAGE 后面指明所用的编程语言 (1)name :要创建的存储过程名;(3)argmode :存储过程参数的模式可以为IN 、OUT 或INOUT ,缺省值是IN 。(4)argname :形式参数的名字。 (5)RETURNS :返回值;RETURNS TABLE :返回二维表 (2)OR REPLACE :覆盖同名的存储过程;

MySQL存储过程实例教程

MySQL存储过程实例教程 MySQL 5.0以后的版本开始支持存储过程,存储过程具有一致性、高效性、安全性和体系结构等特点,本节将通过具体的实例讲解PHP是如何操纵MySQL存储过程的。 实例261:存储过程的创建 这是一个创建存储过程的实例 录像位置:光盘mingrisoft9?lt;/p> 实例说明 为了保证数据的完整性、一致性,提高应用的性能,常采用存储过程技术。MySQL 5.0之前的版本并不支持存储过程,随着MySQL技术的日趋完善,存储过程将在以后的项目中得到广泛的应用。本实例将介绍在MySQL 5.0以后的版本中创建存储过程。 技术要点 一个存储过程包括名字、参数列表,以及可以包括很多SQL语句的SQL语句集。下面为一个存储过程的定义过程: create procedure proc_name (in parameter integer)begindeclare variable varchar(20);if parameter=1 thenset variable='MySQL';elseset variable='PHP';end if;insert into tb (name) values (variable);end; MySQL中存储过程的建立以关键字create procedure开始,后面紧跟存储过程的名称和参数。MySQL的存储过程名称不区分大小写,例如PROCE1()和proce1()代表同一个存储过程名。存储过程名不能与MySQL数据库中的内建函数重名。 存储过程的参数一般由3部分组成。第一部分可以是in、out或inout。in表示向存储过程中传入参数;out表示向外传出参数;inout表示定义的参数可传入存储过程,并可以被存储过程修改后传出存储过程,存储过程默认为传入参数,所以参数in可以省略。第二部分为参数名。第三部分为参数的类型,该类型为MySQL数据库中所有可用的字段类型,如果有多个参数,参数之间可以用逗号进行分割。 MySQL存储过程的语句块以begin开始,以end结束。语句体中可以包含变量的声明、控制语句、SQL查询语句等。由于存储过程内部语句要以分号结束,所以在定义存储过程前应将语句结束标志“;”更改为其他字符,并且该字符在存储过程中出现的几率也应该较低,可以用关键字delimiter更改。例如: mysql>delimiter // 存储过程创建之后,可用如下语句进行删除,参数proc_name指存储过程名。 drop procedure proc_name 实现过程

如何备份数据库表结构含存储过程

如何备份数据库表结构含存储过程 --以下生成整个数据库的SQL脚本,相当好用。 --(scptxfr.exe的路径要正确,在安装目录下) declare @cMd varchar(1000) set @cmd = 'master.dbo.xp_cmdshell ' + '''c:/"Microsoft ' + 'SQL Server"' + '/MSSQL/Upgrade/scptxfr.exe ' + ' /s Y ourServerName /p Y ourSAPassword /I /d Y ourDBName /f ' + 'c:/Y ourDBName.sql''' exec (@cmd) 命令行语法: SCPTXFR /s <服务器> /d <数据库> {[/I] | [/P <密码>]} {[/F <脚本文件目录>] | [/f <单个脚本文件>]} /q /r /O /T /A /E /C /N /X /H /G /Y /? /s —指示要连接到的源服务器。 /d —指示要为之编写脚本的源数据库。 /I —使用集成安全性。 /P —sa 要用的密码。请注意登录ID 始终为sa。 若/P不使用或标志后面没有密码, 则将使用空密码。不与/I 兼容。 /F —脚本文件应生成到的目录。 这意味着为每个对象分类生成一个文件。 /f —所有脚本将保存到的单个文件。 不与/F 兼容。 /q —在所生成的脚本中使用被引用的标识符。 /r —为脚本中的对象包括drop 语句。 /O —生成OEM 脚本文件。无法用于/A或/T。 这是默认的行为。 /T —生成UNICODE 脚本文件。无法用于/A或/O。 /A—生成ANSI 脚本文件。无法用于/T 或/O。 /? —命令行帮助。 /E —发生错误时停止脚本编写。 默认行为是记录该错误而后继续。 /C —指示替代服务器CodePage(代码页)的CodePage。/N —生成ANSI PADDING。 /X —编写SP和XP 脚本以分隔文件。 /H —生成不带首部的脚本文件。(默认: 带首部)。 /G —使用指定的服务器名称作为所生成的输出文件的前缀(中的划线)。 /Y—为“扩展属性”生成脚本(仅对8.x 服务器有效)。

MySQL存储过程简单入门

MySQL存储过程语法 1、概念 存储过程就是能完成一定操作的一组SQL语句。 2、作用 大大提高效率(存储过程本身执行速度非常快,而且,调用存储过程大大减少数据库交互次数);提高重用性。 3、使用方法 1、创建: create procedure sp_name() begin …… end 注意:可能有参数。 2、调用: call sp_name() 注意:括号不能省略。 3、删除: drop procedure sp_name 注意:没有括号,不能在一个存储过程中删除另一个存储过程,只能调用。 4、语句: 条件语句, if 条件then statement else statement end if while循环语句, [label:] while expression do statement end while [label]; loop循环语句, [label:] loop statement end loop [label];

repeat until循环语句, [label] repeat statement until expression end repeat [label]; 5、常用命令: show procedure status:显示数据库所有存储过程基本信息。 show create procedure sp_name:显示一个存储过程详细信息。 关于运算符和基本函数与Java有些区别,用时注意就行。 4、实例 1、创建: create procedure proc_name (in parameter integer) begin declare variable varchar(20); if parameter=1 then set variable='MySQL'; else set variable='PHP'; end if; insert into tb (name) values (variable); end; 注意:代码不区分大小写;存储过程之间以及存储过程与内建函数不能同名; 存储过程参数(in传入,out传出,inout可传入,修改后传出,缺省是in); 由于存储过程内部要以分号结束,需要delimiter进行更改。 2、实现: ⑴、mysql –u用户名–p用户密码 ⑵、delimiter //(将结束符号“;”改成“//”,避免与存储过程冲突) ⑶、use 数据库名 ⑷、……(创建存储过程) ⑸、call proc_name(5)//(调用存储过程) -------------------------------------------- call proc_name(@para)//(对应存储过程定义中out的输出) select @para// ⑹、show procedure status//与show create procedure proc_name// 3、程序代码调用:(out型的部分代码) try{ //调取out型的存储过程P(计算记录总数) stmt = conn.prepareCall("{call p(?)}"); //读取所有OUT型的存储过程的返回参数数据 stmt.registerOutParameter(1, Types.INTEGER); stmt.execute(); int i= stmt.getInt(1);

实验六 MySql存储过程

实验六MySql存储过程 一、实验目的 1、熟悉MySql的存储过程 二、实验内容 1、建立一张学生表,属性有学号、姓名、年龄三个字段。 2、建立一个存储过程,实现学生的全查询 3、分别用IN 和OUT实现姓名的调用 4、声明一个变量,把变量加1,再把变量加入到学生表的学号字段中。 5、建立一个存储过程,外部调用这个存储过程,当外部传入的值是0时,则在学生表中插入一个学号是17的学生,如果是1时,则在学生表中插入一个学号是18的学生,如果都不是,则在学生表中插入一个学号是19的学生. 6、建立一个存储过程,做一个循环语句,循环插入5个学生。(至少用三种循环的存储过程方法) 三、试验结果截图 1.建立一张学生表,属性有学号、姓名、年龄三个字段。 2.建立一个存储过程,实现学生的全查询

3.分别用IN 和OUT实现姓名的调用 4.声明一个变量,把变量加1,再把变量加入到学生表的学号字段中。

5.建立一个存储过程,外部调用这个存储过程,当外部传入的值是0时,则在学生表中插入一个学号是17的学生,如果是1时,则在学生表中插入一个学号是18的学生,如果都不是,则在学生表中插入一个学号是19的学生.

6建立一个存储过程,做一个循环语句,循环插入5个学生。(至少用三种循环的存储过程方法) 所有代码: 1. create table stu( stuno int, stuna varchar(20), stuage int ); insert into stu values(001,'zhangsan',22);

insert into stu values(002,'lisi',23); insert into stu values(003,'wangwu',23); insert into stu values(004,'maliu',24); insert into stu values(005,'zhaoqi',25); insert into stu values(006,'gaoba',23); insert into stu values(007,'ddddd',22); insert into stu values(008,'ttttt',21); 2. create procedure select_all() select * from stu; 3. delimiter // create procedure searchno( in no int, out na varchar(20), out age int ) begin select stuna from stu where stuno=no into na; select stuage from stu where stuno=no into age; end // delimiter ; call searchno(n,@na,@age); select @na,@age; 4. delimiter // create procedure noupdate( in n int) begin update stu set stuno=stuno+n; end // delimiter ; 5. delimiter // create procedure addstu( in sno int ) begin case sno when 0 then insert into stu values(17,'no17',20); when 1 then insert into stu values(18,'no18',20); else insert into stu values(19,'no19',20); end case; end //

MySql_数据库用java程序创建表以及存储过程

MySql 数据库用java程序创建表以及存储过程 1.同一般的数据库操作基本一样。 2.Statement.executeUpdate(String sql); 这个方法可以用来执行DDL语句,以及执行更新操作。 3.需要注意CallableStatement 接口的用法。 用于执行SQL 存储过程的接口。JDBC API 提供了一个存储过程SQL 转义语法,该语法允许对所有RDBMS 使用标准方式调用存储过程。此转义语法有一个包含结果参数的形式和一个不包含结果参数的形式。如果使用结果参数,则必须将其注册为OUT 型参数。其他参数可用于输入、输出或同时用于二者。参数是根据编号按顺序引用的,第一个参数的编号是1。 {?= call [,, ...]} {call [,, ...]} IN 参数值是使用从PreparedStatement 中继承的set 方法设置的。在执行存储过程之前,必须注册所有OUT 参数的类型;它们的值是在执行后通过此类提供的get 方法检索的。 4.需要注意存储过程调用的方法。 5.registerOutParameter 的使用方法。 void registerOutParameter(int parameterIndex, int sqlType) throws SQLException 按顺序位置parameterIndex 将OUT 参数注册为JDBC 类型sqlType。所有OUT 参数都必须在执行存储过程前注册。由sqlType 指定的OUT 参数的JDBC 类型确定必须用于get 方法来读取该参数值的Java 类型。如果预期返回给此输出参数的JDBC 类型是取决于此特定数据库的,则sqlType 应该是java.sql.Types.OTHER。 方法getObject(int) 检索该值。 参数: parameterIndex - 第一个参数是1,第二个参数是2,依此类推。 sqlType - java.sql.Types 定义的JDBC 类型代码。如果参数是JDBC 类型NUMERIC 或DECIMAL,则应使用接受标度值的那种。 下面是一个具体的程序实例: /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package gui.database; import java.sql.*; import java.util.logging.Level; import java.util.logging.Logger; /** * * @author zhfdai */ public class DBManager {

MySQL存储过程练习

存储过程实验 一、实验要求: 1.理解存储过程的概念 2.掌握存储过程的语法格式、使用方法 3.掌握存储过程的创建、执行 二、实验内容: (注意:做一下实验需要首先建立数据及其相应的表,并输入一些记录) 1.实验1:创建一个存储过程,实现查询表student中的记录信息,并执行存储过 程 (1)创建存储过程: begin select * from student end (2)执行存储过程:运行 sp_liststudent (3)执行结果如下:

2.实验2.创建一个存储过程,根据给定的学生学号返回该学生的姓名(1)创建存储过程:

CREATE PROCEDURE test5( IN id int) BEGIN SELECT * from student s WHERE s.id=id; END (2)执行存储过程:CALL test5(2) 执行结果如下: 3.实验3. 创建一个存储过程,根据班级的编号,统计该班人数,并将人数以输出 变量返回给用户。 (1)创建存储过程: CREATE PROCEDURE test00( IN roomidint) BEGIN SELECT COUNT(*) from student s WHERE s.roomid=9; END (2)执行存储过程:CALL test00(2) (3)执行结果如下:

4.实验4:创建一个存储过程查询学号为“020101”的学生的平均分是否超过了85 分,若超过则输出“ X X考出了高分”,否则输出“XX 考的一般”。 (1)创建存储过程: CREATE PROCEDURE test05() BEGIN IF (SELECT score from student WHERE id=1)>85 THEN SELECT '考得好'; ELSE SELECT '考得不好'; END IF; END

数据库原理课程设计报告报告实验创建存储过程与触发器

存储过程与触发器实验日期和时间: 2016 年 5 月13 日、星 期 五第节 实验室:DJ2-信息管理实验室 班级:学号:姓名: 实验环境: 1.硬件:笔记本电脑 2.软件:SQL Server 2012 实验原理: 存储过程概念:存储过程是事先编好的,存储在数据库中的一组被编译了的T-SQL命令集合,这些命令用来完成对数据库的指定操作。存储过程可以接受用户的输入参数、向客户端返回表格或标量结果和消息、调用数据定义语言(DDL)和数据操作语言(DML)语句,然后返回输入参数。 触发器概念:触发器(trigger)是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。 实验任务: 此作业成绩得分根据你完成的任务的难度和数量评分,完成后在实验室给老师演示验收,课后提交电子版报告。如额外完成自拟题目应当事先将所拟题目提交给老师或在报告中明确标注题意。 假定有学校的图书馆管理信息系统,可以用于日常管理书库和同学们的借还书工作。 以下列出参考的库表情况: 根据管理的业务需求来分析,该管理信息系统的数据库应至少包括如下数据表:(打★号的是必须有的表) 1.★图书现有库存表。作用:记录图书的现有库存情况。至少包括:书号、书名、 作者、简介、类别、价格、出版社、出版日期、现有库存数量、最小库存量、库 存总量、库存位置等。 2.★读者信息表。作用:记录读者信息。至少包括:读者编号、证件类型、证件号 码、姓名、性别、职业(可填写教师、学生、教工、其它……)、所属单位、地址、 联系电话等。 3.★借书记录表。作用:记录借书情况,以及是否归还。至少包括:借阅ID(主键, 可设置为自动编号)、书号、读者编号、借阅数量、借阅日期、是否归还、管理员 编号……等。 4.★还书记录表。作用:记录还书情况。至少包括:还书ID(主键,可设置为自动 编号)、书号、读者编号、归还数量、归还日期、是否超期(超过假设45天为超 期)、超期天数、管理员编号……等。(附:为简化操作,续借可视为归还后再借)。 5.管理员信息表。作用:记录负责管理书库和借书还书工作的管理员信息。至少包 括:管理员编号、职工编号(在职工档案表中的职工编号)、用户名、密码、管理

mysql存储过程.详细说明,java代码调用过程

Mysql存储过程调用 说明: 由括号包围的参数列必须总是存在。如果没有参数,也该使用一个空参数列()。每个参数默认都是一个IN参数。要指定为其它参数,可在参数名之前使用关键词OUT或INOUT 在mysql客户端定义存储过程的时候使用delimiter命令来把语句定界符从;变为//。 当使用delimiter命令时,你应该避免使用反斜杠(‘"’)字符,因为那是MySQL的转义字符。 1、创建过程格式: Mysql> drop procedure if exists user_findById; Mysql> delimiter // Create procedure user_findById(in n int) Begin Select * from user where id= n; End // 调用过程: Mysql> set @n=1; --定义变量 Call user_findById(@n);--调用过程 // --显示结果 ======================================================

例2: Mysql> drop procedure if exists user_count; Mysql> delimiter // Create procedure user_count(out count int) Begin Select count(*) into count from user; End // --结束 注意: MySQL存储过程 “in”参数: 跟 C语言的函数参数的值传递类似, MySQL存储过程内部可能会修改此,参数,但对 in类型参数的修改,对调用者(caller)来说是不可见的(not visible)。 “out”参数: 从存储过程内部传值给调用者。在存储过程内部,该参数初始值为 null,无论调用者是否给存储过程参数设置值inout参数跟 out类似,都可以从存储过程内部传值给调用者。不同的是:调用者还可以通过 inout参数传递值给存储过程。 总结:如果仅仅想把数据传给MySQL存储过程,那就使用“in”类型 参数;如果仅仅从MySQL存储过程返回值,那就使用“out”类型参数;如果需要把数据传给MySQL存储过程,还要经过一些计算后再传回给我们,

MySQL的存储过程导出和导入

MySQL的存储过程导出和导入 表结构等已经在目标数据库中存在,不想拷贝数据库过去,MySQL的存储过程导出和导入,Mysqldump工具可以实现,具体用法为: [root@localhost bin]# mysqldump -uroot -p -hlocalhost -P3306 -n -d -t -R DBName > procedure_name.sql 参数说明: -n: --no-create-db -d: --no-data -t: --no-create-info -R: --routines Dump stored routines (functions and procedures) Mysqldump是客户端工具用来备份数据库或在不同数据库之间进行数据迁移。备份内容包含创建活装载表的SQL语句: 主要参数介绍: 1.连接选项 -u,--user=name -p,--password=name -h,--host=name -P,--port=# 2.输出内容选项 --add-drop-database --add-drop-table -n;--no-create-db -d;--no-data -t;--no-create-info 3.输出格式选项 --compact -c --complete-insert -T(指定数据表中的数据备份为单纯的数据文件和建表SQL两个文件) 注意:xx.sql建表文件是以linux的root用户创建,而xx.txt文件则是一linux的mysql 用户创建,因此这两个文件的存放路径一定要保证mysql用户有读写创建文件的权限。 --fields-terminated-by=name(域分隔符) --fields-enclosed-by=name(域引用符) --fields-optionally-enclosed-by=name(域引用可选字符) --fields-escaped-by=name(转义字符) 4.字符集选项 --default--character-set=xx 5.其他选项

存储过程_将图片存入数据库

一、写一个存储过程,将图片存入数据库中 基本情况介绍: 数据库版本:oracle 11g 数据库用户:scott 数据库密码:tiger JDK:1.6 要导入的图片:D:\picture\1.jpg --创建存储图片的表 CREATE TABLE IMAGE_LOB (T_ID V ARCHAR2 (5) NOT NULL,T_IMAGE BLOB NOT NULL); --创建存储图片的目录 CREATE OR REPLACE DIRECTORY IMAGES AS 'D:\picture'; 存储过程如下: CREATE OR REPLACE PROCEDURE IMG_INSERT (TID V ARCHAR2,FILENAME V ARCHAR2) AS F_LOB BFILE;--文件类型 B_LOB BLOB; BEGIN iNSERT INTO IMAGE_LOB (T_ID, T_IMAGE) V ALUES (TID,EMPTY_BLOB ()) RETURN T_IMAGE INTO B_LOB; --插入空的blob F_LOB:= BFILENAME ('IMAGES', FILENAME); --获取指定目录下的文件 DBMS_LOB.FILEOPEN(F_LOB, DBMS_LOB.FILE_READONL Y); --以只读的方式打开文件 DBMS_LOB.LOADFROMFILE (B_LOB, F_LOB,DBMS_LOB.GETLENGTH (F_LOB)); --传递对象 DBMS_LOB.FILECLOSE (F_LOB); --关闭原始文件 COMMIT; END;

MySQL存储过程实例教程2

MySQL存储过程详解 1.存储过程简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。 一个存储过程是一个可编程的函数,它在数据库中创建并保存。它可以有SQL语句和一些特殊的控制结构组成。当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。数据库中的存储过程可以看做是对编程中面向对象方法的模拟。它允许控制数据的访问方式。 存储过程通常有以下优点: (1).存储过程增强了SQL语言的功能和灵活性。存储过程可以用流控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算。 (2).存储过程允许标准组件是编程。存储过程被创建后,可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句。而且数据库专业人员可以随时对存储过程进行修改,对应用程序源代码毫无影响。 (3).存储过程能实现较快的执行速度。如果某一操作包含大量的Transaction-SQL代码或分别被多次执行,那么存储过程要比批处理的执行速度快很多。因为存储过程是预编译的。在首次运行一个存储过程时查询,优化器对其进行分析优化,并且给出最终被存储在系统表中的执行计划。而批处理的Transaction-SQL语句在每次运行时都要进行编译和优化,速度相对要慢一些。 (4).存储过程能过减少网络流量。针对同一个数据库对象的操作(如查询、修改),如果这一操作所涉及的Transaction-SQL语句被组织程存储过程,那么当在客户计算机上调用该存储过程时,网络中传送的只是该调用语句,从而大大增加了网络流量并降低了网络负载。 (5).存储过程可被作为一种安全机制来充分利用。系统管理员通过执行某一存储过程的权限进行限制,能够实现对相应的数据的访问权限的限制,避免了非授权用户对数据的访问,保证了数据的安全。 2.关于MySQL的存储过程 存储过程是数据库存储的一个重要的功能,但是MySQL在5.0以前并不支持存储过程,这使得MySQL在应用上大打折扣。好在MySQL 5.0终于开始已经支持存储过程,这样即可以大大提高数据库的处理速度,同时也可以提高数据库编程的灵活性。 3.MySQL存储过程的创建 (1). 格式

教学:数据库-存储过程资料

教学三:存储过程 一、教学目的 (1)掌握T-SQL流控制语句; (2)掌握创建存储过程的方法; (3)掌握存储过程的执行方法; (4)掌握存储过程的管理和维护。 二、教学内容 1、创建简单存储过程 (1)创建一个名为stu_pr的存储过程,该存储过程能查询出051班学生的所有资料,包括学生的基本信息、学生的选课信息(含未选课同学的信息)。要求在创建存储过程前请判断该存储过程是否已创建,若已创建则先删除,并给出“已删除!”信息,否则就给出“不存在,可创建!”的信息。 if exists(select name from sysobjects where name='stu_pr'and type='p') begin print'已删除!' drop procedure stu_pr end else print'不存在,可创建!' go create procedure stu_pr as select* from Student_20103322left outer join SC_20103322 on (Student_20103322.Sno=SC_20103322.Sno)left outer join Course_20103322 on (Course_https://www.360docs.net/doc/7217095246.html,o=SC_https://www.360docs.net/doc/7217095246.html,o) where classno='051'

exec stu_pr 2、创建带参数的存储过程 (1)创建一个名为stu_proc1的存储过程,查询某系、某姓名的学生的学号、姓名、年龄,选修课程名、成绩。系名和姓名在调用该存储过程时输入,其默认值分别为“%”与“林%”。执行该存储过程,用多种参数加以测试。 if exists(select name from sysobjects where name='stu_proc1'and type='p') begin print'已删除!' drop procedure stu_proc1 end else print'不存在,可创建!' go create procedure stu_proc1

C++调用SQL存储过程实例

c/c++调用mysql存储过程 mysql5.0以后就支持存储过程了,目前mysql的6.0Alpha版也已经推出。6.0不仅支持大型数据库如oracle等的绝大部分功能,如存储过程、视图、触发器、job等等,而且修正了这些功能所存在的bug,其中6.0.1还支持64位windows,以及表空间。 在c/c++中访问mysql,常见的只是一些简单的业务,使用c中嵌入简单的查询、插入、更新等操作即可。随着业务的复杂化,完成一个业务功能需要非常多的sql操作环节,把这些语句都嵌入c代码中会导致c代码越来越繁琐、不清晰,这时候,自然就想到了存储过程来封装所有的数据库逻辑,通过c简单调用mysql存储过程接口即可达到目的,极大地减轻了c程序员的工作量,也便于前端业务处理逻辑与数据库处理逻辑的分离。下面就介绍c 语言调用存储过程的简单的方法。 1、首先创建一张表 用于存放用户信息 Create table student( id int auto_increment, name varchar(20), age tinyint, remark varchar(50), primary key(id) ); 2、插入几条信息 Insert into student values(1,"zhouys",90, ""); commit; 3、查看用户信息 mysql> select * from student;

+------+-----------+------+----------+ | id | name | age | remark | +------+-----------+------+----------+ | 1 | zhouys | 90 | | +------+-----------+------+-----------+ 1 row in set (0.00 sec) mysql> 4、创建存储过程 如下: delimiter // create procedure querystudent( in in_id int , #0-字符id 1-数字id # out out_ret int, #返回结果 out out_name varchar(20), #名字 out out_age int #年龄) label_a:begin declare v_name varchar(20) ; declare v_age tinyint ; #参数判断 if (in_id<=0) then set out_ret=-1; #id error

数据库存储过程练习附答案

存储过程、触发器练习 1、在学生选课数据库中,创建一存储过程deptmale,查询指定系的男生人数,其中系为输入参数,人数为输出参数。 create proc p_dept @dept char(20),@mannum int output as select @allcre=count(sno) from student where sdept=@dept and ssex='男' declare @num int exec p_dept '计算机系',@num output print @num 2、在s_c数据库中,创建一个存储过程totalcredit,根据输入的学生姓名,计算其总学分。(使用输出参数)。并执行该存储过程。 create proc p_cou @name char(10),@allcre int output as select @allcre=sum(ccredit)from student,course,sc where student.sno=sc.sno and https://www.360docs.net/doc/7217095246.html,o=https://www.360docs.net/doc/7217095246.html,o and sname=@name group by sc.sno declare @asum int exec p_cou '刘晨',@asum output print @asum 3、创建一更新触发器upd_grade,设置sc表的grade字段不能被更新,并显示信息“学生成绩不能被修改,请与教务处联系”。 CREATE TRIGGER mes_sc ON sc FOR UPDATE AS IF UPDATE(grade) BEGIN ROLLBACK TRAN PRINT '学生成绩不能被修改,请与教务处联系' END

相关文档
最新文档