怎么使用存储过程

如题所述

第1个回答  2022-11-10
问题一:SQL 中存储过程怎么使用? sql存储过程及应用
一、简介:
存储过程(Stored Procedure), 是一组为了完成特定功能的SQL 语句,集经编译后
存储在数据库中,用户通过指定存储过程的名字并给出参数,如果该存储过程带有参数来执行
它,
在SQL Server 的系列版本中,存储过程分为两类:系统提供的存储过程和用户自定义存储过程

系统SP,主要存储master 数据库中,并以sp_为前缀并且系统存储过程主要是从系统表中获取
信息,从而为系统管理员管理SQL Server。用户自定义存储过程是由用户创建,并能完成
某一特定功能,如:查询用户所需数据信息的存储过程。
存储过程具有以下优点
1.存储过程允许标准组件式编程(模块化设计)
存储过程在被创建以后,可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句,而
且数
据库专业人员可随时对存储过程进行修改,但对应用程序源代码毫无影响。因为应用程序源代
码只包含存
储过程的调用语句,从而极大地提高了程序的可移植性。
2.存储过程能够实现快速的执行速度
如果某一操作包含大量的Transaction-SQL 代码,,或分别被多次执行,那么存储过程要比批处理

执行速度快很多,因为存储过程是预编译的,在首次运行一个存储过程时,查询优化器对其进
行分析优
化,并给出最终被存在系统表中的执行计划,而批处理的Transaction-SQL 语句在每次运行时
都要进行
编译和优化,因此速度相对要慢一些。
3.存储过程能够减少网络流量
对于同一个针对数据数据库对象的操作,如查询修改,如果这一操作所涉及到的Transaction-SQL
语句被组织成一存储过程,那么当在客户计算机上调用该存储过程时,网络中传送的只是该调
用语句,否
则将是多条SQL 语句从而大大增加了网络流量降低网络负载。
4.存储过程可被作为一种安全机制来充分利用
系统管理员通过,对执行某一存储过程的权限进行限制,从而能够实现对相应的数据访问权限的

制。
二、变量
@I
三、流程控制语句(if else | select case | while )
Select ... CASE 实例
DECLARE @iRet INT, @PKDisp VARCHAR(20)
SET @iRet = '1'
Select @iRet =
CASE
WHEN @PKDisp = '一' THEN 1
WHEN @PKDisp = '二' THEN 2
WHEN @PKDisp = '三' THEN 3
WHEN @PKDisp = '四' THEN 4
WHEN @PKDisp = '五' THEN 5
ELSE 100
END
四、存储过程格式
创建存储过程
Create Proc dbo.存储过程名
存储过程参数
AS
执行语句
RETURN
执行存储过程
GO
*********************************************************/
-- 变量的声明,sql里面声明变量时必须在变量前加@符号
DECLARE @I INT
-- 变量的赋值,变量赋值时变量前必须加set
SET @I = 30
-- 声明多个变量
DECLARE @s varchar(10),@a INT
-- Sql 里if语句
IF 条件 BEGIN
执行语句
END
ELSE BEGIN
......>>

问题二:SQL存储过程如何调用存储过程? 在存储过程里用exec 执行另一存储过程名及它需要的参数就可以了
如 exec抚abc '1', '2'(abc 是存储过程的名字, '1','2' 是它的参数

问题三:oracle中的存储过程,有什么作用,以及怎么在代码中使用? 楼上也不知道从哪扒下来的,一看LZ就是初学,举点例子不行吗?

比如建立个测试表
create table test(id int,name varchar2(10),counts int); insert into test values (1,'张三',100);insert into test values (2,'李四',200); mit;
现在给你出个题目是
查询所有人加在一起的counts是多少

创建存储过程
create or replace p_test --创建存储过程,asv_counts int;--定义变量begin --开始select sum(counts) into v_counts from test;--将得到的结果放到变量里DBMS_OUTPUT.PUT_LINE(v_counts);--将结果打印输出end;--结束
执行这种不带输入参数的
begin p_test;end;
然后你检查下结果
再给你创建一个带输入参数的
题目是,查询id为1的人名是什么
create or replace p_test1(v_id int)asv_name varchar2(10);beginselect name into v_name from test where id=v_id;DBMS_OUTPUT.PUT_LINE(v_name);end;
执行时这样
beginp_test1(1);end;
第2个我没给你写注释,你看你自己应该能理解吧
补充一下,存储过程不一定只是执行查询,也可以做删除或者修改等sql语句,总体来说就是几个或N个sql语句的 *** ,来完成系统内某些特定的需求,这些需求可以是一个sql搞定的,也可以是多个sql组合的

问题四:sql server怎么调用存储过程 在SQL Server数据库的维护或者Web开发中,有时需要在存储过程或者作业等其他数据库操作中调用其它的存储过程,下面介绍其调用的方法
在SQL Server数据库的维护或者Web开发中,有时需要在存储过程或者作业等其他数据库操作中调用其它的存储过程,下面介绍其调用的方法
一、SQL SERVER中调用不带输出参数的存储过程
SQL 代码

--存储过程的定义
create procedure [sys].[sp_add_product]
(
@m_viewcount int = 0
,@m_hotcount int = 0
)
as
go
--存储过程的调用
declare @m_viewcount int
declare @m_hotcount int
exec sp_add_product @m_viewcount,@m_hotcount
二、SQL SERVER中调用带输出参数的存储过程
SQL 代码
--定义存储过程
create procedure [sys].[sp_add_product]
(
@m_viewcount int = 0
,@m_hotcount int output
)
--存储过程的调用
declare @m_viewcount int =0
declare @m_hotcount int
exec dbo.sp_add_product @m_viewcount,@m_hotcount output

问题五:怎样调用存储过程里面的存储过程 这里一定要用Closed,因为其他非Closed状态再执行Open时会引发不能重复开启的异常
if (sqlConn.State != ConnectionState.Closed)
sqlConn.Open();
Sqlmand sqlCmd = new Sqlmand();
sqlCmd.Connection = sqlConn;
sqlCmd.mandText = proc_history;
sqlCmd.mandType = mandType.StoredProcedure;sqlCmd.Parameters.Add(new SqlParameter(@like, NewTitle));
如果要返回数据集,则不要调用sqlCmd.ExecuteNonQuery();,直接调用下面的方法
SqlDataAdapter sqlDA = new SqlDataAdapter(sqlCmd);
DataSet ds = new DataSet();
sqlDA.Fill(ds);
return ds;
如果是执行DML语句,就直接调用如下
sqlCmd.ExecuteNonQuery();
/* 以上两种情况不可同时存在 */

问题六:怎么在PL/SQL Developer 中调用存储过程呢? 看你存储过程里是否有参数了

正常的话,在左边列表找到procedure里找到你写的那存储过程名,看上边有红叉没,没红叉就是编译成功,有红叉就是还有问题,需要改

然后右键点这个存储过程,(中文版选择测试按钮,英文版选择test按钮),然后下边有输入参数的地方,输入,点上边的齿轮即可
还有种方法,就是开一个sql窗口,写以下代码
begin
存储过程名;
end;

然后点齿轮运行,注意两个分号不可少

问题七:数据库中的存储过程怎么用 啊!!求解..... 10分 关键字:procedure
例子:
SQL> create [or replace] procedure procedure_name is
begin
--开始执行
insert into test('10001','Visket');
end;
/
以上操作就能为test表添加一条信息
执行存储过程procedure用的命令是exec
记住存储过程中,语句结尾一定要有分号

问题八:ORACLE存储过程怎么调用? PL/SQL SQL窗口 输入存储过程名,右键测试(英文版为test唬,出现测试界面,输入对应参数后F8,如果没有参数直接F8.

问题九:存储过程中怎么使用row 一般分为十种情况,每种语法各不相同: 1、 创建语法create proc | procedure pro_name [{@参数数据类型} [=默认值] [output], {@参数数据类型} [=默认值] [output], .... ]as SQL_statements2、 创建不带参数存储过程--创建存储过程if (exists (select * from sys.objects where name = 'proc_get_student')) drop proc proc_get_studentgocreate proc proc_get_studentas select * 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)as select * 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) = '%')as select * from student where name like @name and name like @nextName;goexec proc_findStudentByName;exec proc_findStudentByName '%o%', 't%';6、 带输出参数存储过程if (object_id('proc_getStudentRecord', 'P') is not null) drop proc proc_getStudentRecordgocreate proc proc_getStudentRecord( @id int, --默认输入参数 @name varchar(20) out, --输出参数 @age varchar(20) output--输入输出参数)as select @name = name, @age = age from student where id = @id and sex = @age;go-- declare @id int, @name varchar(20), @temp varchar(20)......>>

问题十:如何使用sql语句查看存储过程 --下面这条语句可以查看存储过程具体代码exec sp_helptext 存储过程名--下面这条语句查看数据库中有哪些存储过程select * from sysobjects where type='P'
相似回答