存储过程语法

时间:2024-03-06 17:21:38编辑:奇事君

SQL 中存储过程怎么使用?

一、简单的储存过程:1、创建一个存储过程create procedure GetUsers()begin select * from user; end;123452、调用存储过程call GetUsers();123、删除存储过程drop procedure if exists GetUsers;二、带参数的存储过程1、MySql 支持 IN (传递给存储过程) , OUT (从存储过程传出) 和 INOUT (对存储过程传入和传出) 类型的参数 , 存储过程的代码位于 BEGIN 和 END 语句内 , 它们是一系列 SQL 语句 , 用来检索值 , 然后保存到相应的变量 (通过指定INTO关键字) ;2、下面的存储过程接受三个参数 , 分别用于获取用户表的最小 , 平均 , 最大分数 , 每个参数必须具有指定的类型 , 这里使用十进制值(decimal(8,2)) , 关键字 OUT 指出相应的参数用来从存储过程传出create procedure GetScores(out minScore decimal(8,2),out avgScore decimal(8,2),out maxScore decimal(8,2))beginselect min(score) into minScore from user;select avg(score) into avgScore from user;select max(score) into maxScore from user;end;12345678910113、调用此存储过程 , 必须指定3个变量名(所有 MySql 变量都必须以 @ 开始) , 如下所示 :call GetScores(@minScore, @avgScore, @maxScore);124、该调用并没有任何输出 , 只是把调用的结果赋给了调用时传入的变量 @minScore, @avgScore, @maxScore , 然后即可调用显示该变量的值 :select @minScore, @avgScore, @maxScore;5、使用 IN 参数 , 输入一个用户 id , 返回该用户的名字 :create procedure GetNameByID(in userID int,out userName varchar(200))beginselect name from userwhere id = userIDinto userName;end;123456789106、调用存储过程 :call GetNameByID(1, @userName);select @userName;123参考资料SQL存储过程使用介绍.csdn博客[引用时间2017-12-31]

SQL存储过程如何调用存储过程?

1、首先先创建一个存储过程,代码如图,存储过程主要的功能是为表JingYan插入新的数据。2、执行这几行代码,看到执行成功,数据库里现在已经有存储过程sp_JY。3、先看下JingYan表里目前的数组,如图,只有三行数据。4、在mysql里,调用存储过程,只需要用call关键字,带上存储过程的名称就行了,当然有参数时,需要带个参数。代码如图5、执行了这个存储过程的调用之后,再看下JingYan表里的数据,可以看到现在的数据已经是四条了,说明调用存储过程成功插入了一条新的数据。6、再添加一个存储过程,该存储过程用select语句,返回表数据。7、调用新的存储过程,可以看到结果里也是返回表数据。

在SQL中存储过程的一般语法是什么?

1、 创建语法create proc | procedure pro_name[{@参数数据类型} [=默认值] [output],{@参数数据类型} [=默认值] [output],....]asSQL_statements2、 创建不带参数存储过程--创建存储过程if (exists (select * from sys.objects where name = 'proc_get_student'))drop proc proc_get_studentgocreate proc proc_get_studentasselect * from student;--调用、执行存储过程exec proc_get_student;3、 修改存储过程--修改存储过程alter proc proc_get_studentasselect * from student;4、 带参存储过程--带参存储过程if (object_id('proc_find_stu', 'P') is not null)drop proc proc_find_stugocreate proc proc_find_stu(@startId int, @endId int)asselect * from student where id between @startId and @endIdgoexec proc_find_stu 2, 4;5、 带通配符参数存储过程--带通配符参数存储过程if (object_id('proc_findStudentByName', 'P') is not null)drop proc proc_findStudentByNamegocreate proc proc_findStudentByName(@name varchar(20) = '%j%', @nextName varchar(20) = '%')asselect * from student where name like @name and name like @nextName;goexec proc_findStudentByName;exec proc_findStudentByName '%o%', 't%';扩展资料:SQL存储过程优点:1、重复使用。存储过程可以重复使用,从而可以减少数据库开发人员的工作量。2、减少网络流量。存储过程位于服务器上,调用的时候只需要传递存储过程的名称以及参数就可以了,因此降低了网络传输的数据量。3、安全性。参数化的存储过程可以防止SQL注入式攻击,而且可以将Grant、Deny以及Revoke权限应用于存储过程。参考资料来源:百度百科—存储过程

在SQL中存储过程的一般语法是什么?

sql server存储过程语法
存储过程就是作为可执行对象存放在数据库中的一个或多个SQL命令。
定义总是很抽象。存储过程其实就是能完成一定操作的一组SQL语句,只不过这组语句是放在数据库中的(这里我们只谈SQL Server)。如果我们通过创建存储过程以及在ASP中调用存储过程,就可以避免将SQL语句同ASP代码混杂在一起。这样做的好处至少有三个:
第一、大大提高效率。存储过程本身的执行速度非常快,而且,调用存储过程可以大大减少同数据库的交互次数。
第二、提高安全性。假如将SQL语句混合在ASP代码中,一旦代码失密,同时也就意味着库结构失密。
第三、有利于SQL语句的重用。

在ASP中,一般通过command对象调用存储过程,根据不同情况,本文也介绍其它调用方法。为了方便说明,根据存储过程的输入输出,作以下简单分类:
1. 只返回单一记录集的存储过程
假设有以下存储过程(本文的目的不在于讲述T-SQL语法,所以存储过程只给出代码,不作说明):

/*SP1*/
CREATE PROCEDURE dbo.getUserList
as
set nocount on
begin
select * from dbo.[userinfo]
end
go

以上存储过程取得userinfo表中的所有记录,返回一个记录集。通过command对象调用该存储过程的ASP代码如下:

'**通过Command对象调用存储过程**
DIM MyComm,MyRst
Set MyComm = Server.CreateObject("ADODB.Command")
MyComm.ActiveConnection = MyConStr 'MyConStr是数据库连接字串
MyComm.CommandText = "getUserList" '指定存储过程名
MyComm.CommandType = 4 '表明这是一个存储过程
MyComm.Prepared = true '要求将SQL命令先行编译
Set MyRst = MyComm.Execute
Set MyComm = Nothing

存储过程取得的记录集赋给MyRst,接下来,可以对MyRst进行操作。
在以上代码中,CommandType属性表明请求的类型,取值及说明如下:
-1 表明CommandText参数的类型无法确定

1 表明CommandText是一般的命令类型
2 表明CommandText参数是一个存在的表名称
4 表明CommandText参数是一个存储过程的名称

还可以通过Connection对象或Recordset对象调用存储过程,方法分别如下:

'**通过Connection对象调用存储过程**
DIM MyConn,MyRst
Set MyConn = Server.CreateObject("ADODB.Connection")
MyConn.open MyConStr 'MyConStr是数据库连接字串
Set MyRst = MyConn.Execute("getUserList",0,4) '最后一个参断含义同CommandType
Set MyConn = Nothing

'**通过Recordset对象调用存储过程**
DIM MyRst
Set MyRst = Server.CreateObject("ADODB.Recordset")
MyRst.open "getUserList",MyConStr,0,1,4
'MyConStr是数据库连接字串,最后一个参断含义与CommandType相同


2. 没有输入输出的存储过程
请看以下存储过程:

/*SP2*/
CREATE PROCEDURE dbo.delUserAll
as
set nocount on
begin
delete from dbo.[userinfo]
end
go

该存储过程删去userinfo表中的所有记录,没有任何输入及输出,调用方法与上面讲过的基本相同,只是不用取得记录集:

'**通过Command对象调用存储过程**
DIM MyComm
Set MyComm = Server.CreateObject("ADODB.Command")
MyComm.ActiveConnection = MyConStr 'MyConStr是数据库连接字串
MyComm.CommandText = "delUserAll" '指定存储过程名
MyComm.CommandType = 4 '表明这是一个存储过程
MyComm.Prepared = true '要求将SQL命令先行编译
MyComm.Execute '此处不必再取得记录集

Set MyComm = Nothing

当然也可通过Connection对象或Recordset对象调用此类存储过程,不过建立Recordset对象是为了取得记录集,在没有返回记录集的情况下,还是利用Command对象吧。


3. 有返回值的存储过程
在进行类似SP2的操作时,应充分利用SQL Server强大的事务处理功能,以维护数据的一致性。并且,我们可能需要存储过程返回执行情况,为此,将SP2修改如下:

/*SP3*/
CREATE PROCEDURE dbo.delUserAll
as
set nocount on
begin
BEGIN TRANSACTION
delete from dbo.[userinfo]
IF @@error=0
begin
COMMIT TRANSACTION


有关Oracle存储过程的相关问题

  详细讲解有关Oracle存储过程的相关问题    在Oracle数据库中 数据表别名是不能加as的 例如   select a appname from appinfo a —— 正确   select a appname from appinfo as a —— 错误   注释 这可能是为了防止和Oracle数据库中的存储过程中的关键字as冲突的问题    在存储过程中 select某一字段时 后面必须紧跟into 假如select整个记录 利用游标的话就另当别论了      select af keynode into kn from APPFOUNDATION af where af appid=aid and af foundationid=fid; 有into 正确编译 select af keynode from APPFOUNDATION af where af appid=aid and af foundationid=fid; 没有into 编译报错 提示 Compilation Error: PLS : an INTO clause is expected in this SELECT statement    在我们利用select……into……语法时 必须先确保数据库中有该条记录 否则会报出 no data found 异常   可以在该语法之前 先利用select count(*) from 查看数据库中是否存在该记录 如果存在 再利用select……into……    请注意 在存储过程中 别名不能和字段名称相同 否则虽然编译可以通过 但在运行的阶段会报错      select keynode into kn from APPFOUNDATION where appid=aid and foundationid=fid; 正确运行 select af keynode into kn from APPFOUNDATION af where af appid=appid and af foundationid=foundationid; 运行阶段报错 提示 ORA :exact fetch returns more than requested number of rows    在存储过程中 关于出现null的问题   假如有一个表X 定义如下    create table X(id varchar ( ) primary key not null vcount number( ) not null bid varchar ( ) not null 外键 );   假如在存储过程中 使用如下语句   select sum(vcount) into fcount from X where bid= xxxxxx 如果X表中不存在bid= xxxxxx 的记录 则fcount=null(即使fcount定义时设置了默认值 例如 fcount number( ) = 依然无效 fcount还是会变成null) 这样以后使用fcount时就可能会出现问题 所以在这里我们最好先判断一下      if fcount is null then fcount:= ; end if;    Hibernate调用Oracle的存储过程      this pnumberManager getHibernateTemplate() execute( new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException SQLException { CallableStatement cs = nnection() prepareCall( {call modifyapppnumber_remain(?)} ); cs setString( foundationid); cs execute(); return null; } }); lishixinzhi/Article/program/Oracle/201311/17685


oracle中的存储过程,有什么作用,以及怎么在代码中使用?

定义:存储过程(Stored Procedure )是一组为了完成特定功能的SQL 语句
集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数
(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要
对象,任何一个设计良好的数据库应用程序都应该用到存储过程。
存储过程是由流控制和SQL 语句书写的过程,这个过程经编译和优化后
存储在数据库服务器中,应用程序使用时只要调用即可。在ORACLE 中,
若干个有联系的过程可以组合在一起构成程序包。

优点:存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
2.当对数据库进行复杂操作时(如对多个表进行Update、Insert、Query、Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。
3.存储过程可以重复使用,可减少数据库开发人员的工作量。
4.安全性高,可设定只有某用户才具有对指定存储过程的使用权。
proc = connection.prepareCall("{ call SIM_MEDICARE.P_Isinblacklist(?,?,?,?,?) }");
proc.setString(1, “”);设置传入参数
proc.registerOutParameter(4, Types.VARCHAR);注册传出参数
proc.execute();执行过程
proc.getString(4)获取结果


上一篇:环网

下一篇:佳能2900驱动