sql储存过程
Ⅰ 关于sql的临时表、自定义函数、储存过程的问题
如果你有编程基础的话
那么自定义函数和存储过程的区别,就是程序里面函数与过程的区别,函数只是为了实现某个功能,而过程是为了实现某个流程。
至于使用的时间
这个跟你的实际需求有关系的,一般系统带的函数就能满足需求。
存储过程这个看你项目的访问量,访问量小的话
如果是快速开发不会用到存储过程
直接在程序里面写SQL语句就OK。如果访问量大,那么必须使用存储过程。
临时表的好处是它可以是只对某个用户的表,而且不具有实际意义,并且可以定义自动销毁的临时表。跟视图在某种情况下有相同之处。
临时表的试用时间也是跟你的需求有关系的。
创建语句差不多
都是T-SQL语句。
最后一个问题你得搜索一下才知道,一般情况下定义的临时表都是自动销毁的,使用完毕会drop掉(节省资源,如果是#开头的临时表
系统会自动在使用完毕后销毁掉。)
Ⅱ mysql为四个表创建储存过程或者储存函数
“另一个存储过程”的名字是sp1,没有参数,返回的结果集共3列,全部为int型,那么“存储过程”里添加一个与结果集列数相同的临时表或表变量用于接收“另一个存储过程”的结果集
如下
CREATE
PROCEDURE
sp2
AS
DECLARE
@t
table(a
int,b
int,c
int)
INSERT
INTO
@t(a,b,c)
EXEC
sp1
SELECT
*
FROM
@t
使用SQLSERVER存储过程可以很大的提高程序运行速度,简化编程维护难度,现已得到广泛应用。
创建存储过程
和数据表一样,在使用之前需要创建存储过程,它的简明语法是:
引用:
Create
PROC
存储过程名称
[参数列表(多个以“,”分隔)]
AS
SQL
语句
例:
引用:
Create
PROC
upGetUserName
@intUserId
INT,
@ostrUserName
NVARCHAR(20)
OUTPUT
--
要输出的参数
AS
BEGIN
--
将uName的值赋给
@ostrUserName
变量,即要输出的参数
Select
@ostrUserName=uName
FROM
uUser
Where
uId=@intUserId
END
其中
Create
PROC
语句(完整语句为Create
PROCEDURE)的意思就是告诉SQL
SERVER,现在需要建立一个存储过程,upGetUserName
就是存储过程名称,@intUserId
和
@ostrUserName
分别是该存储过程的两个参数,注意,在SQL
SERVER中,所有用户定义的变量都以“@”开头,OUTPUT关键字表示这个参数是用来输出的,AS之后就是存储过程内容了。只要将以上代码在“查询分析器”里执行一次,SQL
SERVER就会在当前数据库中创建一个名为“upGetUserName”的存储过程。你可以打开“企业管理器”,选择当前操作的数据库,然后在左边的树型列表中选择“存储过程”,此时就可以在右边的列表中看到你刚刚创建的存储过程了(如果没有,刷新一下即可)。
Ⅲ SQL 中存储过程怎么使用
一、简单的储存过程:
1、创建一个存储过程
create procere GetUsers()
begin
select * from user;
end;12345
2、调用存储过程
call GetUsers();12
3、删除存储过程
drop procere if exists GetUsers;
二、带参数的存储过程
1、MySql 支持 IN (传递给存储过程) , OUT (从存储过程传出) 和 INOUT (对存储过程传入和传出) 类型的参数 , 存储过程的代码位于 BEGIN 和 END 语句内 , 它们是一系列 SQL 语句 , 用来检索值 , 然后保存到相应的变量 (通过指定INTO关键字) ;
2、下面的存储过程接受三个参数 , 分别用于获取用户表的最小 , 平均 , 最大分数 , 每个参数必须具有指定的类型 , 这里使用十进制值(decimal(8,2)) , 关键字 OUT 指出相应的参数用来从存储过程传出
create procere GetScores(
out minScore decimal(8,2),
out avgScore decimal(8,2),
out maxScore decimal(8,2)
)
begin
select min(score) into minScore from user;
select avg(score) into avgScore from user;
select max(score) into maxScore from user;
end;1234567891011
3、调用此存储过程 , 必须指定3个变量名(所有 MySql 变量都必须以@开始) , 如下所示 :
call GetScores(@minScore, @avgScore, @maxScore);12
4、该调用并没有任何输出 , 只是把调用的结果赋给了调用时传入的变量@minScore, @avgScore, @maxScore, 然后即可调用显示该变量的值 :
select @minScore, @avgScore, @maxScore;
5、使用 IN 参数 , 输入一个用户 id , 返回该用户的名字 :
create procere GetNameByID(
in userID int,
out userName varchar(200)
)
begin
select name from user
where id = userID
into userName;
end;12345678910
6、调用存储过程 :
call GetNameByID(1, @userName);
select @userName;123
Ⅳ SQL SERVER 中存储过程、视图、索引是什么概念
储存过程:简单说就是SQL代码的集合,和C语言里的函数类似,
储存过程把SQL语句写在一起,
调用储存过程时
SQLserver执行 这些语句。
它有参数,有返回值。
优点:
1.模块化设计
像其他程序语言的函数一样,单独出来,可以调用它n次,
并且可以独立于源代码,单独修改储存过程。
2.更快执行如果执行大量SQL代码或重复执行,储存过程比SQL批代码执行要快。
3.减少网络流量
一条SQL语句就可以执行上千条SQL代码,肯定视图:顾名思意,可以看的图形。
用图形来表示数据库中表,或表之间的关系
是虚拟表,是来自其一个表,或多个表的行或列 的子集。
临时表是暂时存在的,而视图是以文件存储的,只要不人为删除,
是永久存储的,所以视图不是临时表。
索引:举一个列子,你在学校要找一年级三班教室,但是你不知具体位置,
你只能按照顺序,一间教室一间教室的找,
但如果,你看学校地图(假设的),上面写有一年级三班教室在XX单元XX楼左边XX间,那你就可以直接到教室去了,
这里地图就相当于索引,指明具体地址,使查询更加的快捷。
SQL里就是这样,要查询某个数据,根据索引查找,比一个一个挨着查,更加的快捷。
Ⅳ sql存储过程的优点
1.存储过程可以使得程序执行效率更高、安全性更好,因为过程建立之后
已经编译并且储存到数据库,直接写sql就需要先分析再执行因此过程效率更高,直接写sql语句会带来安全性问题,如:sql注入
2.建立过程不会很耗系统资源,因为过程只是在调用才执行。
3.如果我表book更新了
存储过程是不是要重新遍历一下表?不会,如果有需要根据book表更新而更新可考虑建立触发器在特定条件触发,如:insert,update,delete语法如下:
create
trigger
tr_book
on
book
for
insert,update,delete
as
begin
...
end
补充回答:数据量越大执行过程越长.如是几十条几或几K可能看不出效果如果是上10W或者过100W你就会发现速度(查询、更新)会慢很多,,随着数据量增大你的存储过程执行时间会更长是一定的
Ⅵ oracle中的存储过程,有什么作用,以及怎么在代码中使用
定义:存储过程(Stored Procere )是一组为了完成特定功能的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)获取结果