比如建立个测试表
create table test
(id int,
name varchar2(10),
counts int)
insert into test values (1,'张三',100)
insert into test values (2,'李四',200)
commit
现在给你出个题目是
查询所有人加在一起的counts是多少
创建存储过程
create or replace p_test --创建存储过程,
as
v_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)
as
v_name varchar2(10)
begin
select name into v_name from test where id=v_id
DBMS_OUTPUT.PUT_LINE(v_name)
end
执行时这样
begin
p_test1(1)
end
第2个我没给你写注释,你看你自己应该能理解吧
补充一下,存储过程不一定只是执行查询,也可以做删除或者修改等sql语句,总体来说就是几个或N个sql语句的集合,来完成系统内某些特定的需求,这些需求可以是一个sql搞定的,也可以是多个sql组合的
首先,需要在数据库端写好存储过程其次,使用C#编写通用访问类,代码如下:
//procedureName,存储过程名称;para,参数数组
public int UpdateByProcedure(string procedureName,sqlparameters[] para)
{
sqlconnection conn=new sqlconnection(connString)//connString,连接字符串
sqlcommand cmd=new sqlcommand()
try
{
conn.open()
cmd.commandtype=commandtype.storedprocedure
cmd.commandtext=procedureName
cmd.parameters.addrange(param)
return cmd.excutenonquery()
}
catch(exceptio ex)
{
throw new exception (ex.message)
}
}
接着,写数据访问类
public int AddStudentByProcedure(Student objStu)
{
//定义参数数组,这些是存储过程的输入或输出参数
sqlparameters inputStudentName =new parameters
(
"@StudentName",objStu
)
inputStudentName.direction =direction.input
try
{
return UpdateByProcedure("存储过程名称",param)
}
catch
{
throw new exception("执行方法AddStudentByProcedure出现错误,错误信息:"+ex.message)
}
}
----创建过程/*
表:对应你数据库的工资表
工号:工资表里员工编号字段
日期:工资表里日期字段(不能只要月份,得带上年)
工资:工资表里工资字段
*/
create
proc
[dbo].[pr_qgz](@rq
datetime,@id
varchar(10))
as
begin
--如果工号不为空,则带上工号条件
if(@id
>
'')
begin
select
工号,日期,工资
from
表
where
工号=@id
and
日期=@rq
end
else
begin
select
工号,日期,工资
from
表
where
日期=@rq
end
end
go
----调用过程
exec
pr_qgz
'2015-01','001'
---有日期和工号
go
exec
pr_qgz
'2015-01',''
---只有日期
go
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)