例1:html
create proc proc_stu
@sname varchar(20),
@pwd varchar(20)
as
select * from ren where sname=@sname and pwd=@pwd
gojava
查看结果:proc_stu 'admin','admin'sql
例2:数据库
下面的存储过程实现用户验证的功能,若是不成功,返回0,成功则返回1.oracle
CREATE PROCEDURE VALIDATE @USERNAME CHAR(20),@PASSWORD CHAR(20),@LEGAL BIT OUTPUT
AS学习
IF EXISTS(SELECT * FROM REN WHERE SNAME = @USERNAME AND PWD = @PASSWORD)
SELECT @LEGAL = 1
ELSE
SELECT @LEGAL = 0测试
在程序中调用该存储过程,并根据@LEGAL参数的值判断用户是否合法。spa
例3:一个高效的数据分页的存储过程 能够轻松应付百万数据.net
CREATE PROCEDURE pageTest --用于翻页的测试
--须要把排序字段放在第一列code
(
@FirstID nvarchar(20)=null, --当前页面里的第一条记录的排序字段的值
@LastID nvarchar(20)=null, --当前页面里的最后一条记录的排序字段的值
@isNext bit=null, --true 1 :下一页;false 0:上一页
@allCount int output, --返回总记录数
@pageSize int output, --返回一页的记录数
@CurPage int --页号(第几页)0:第一页;-1最后一页。
)
AS
if @CurPage=0--表示第一页
begin
--统计总记录数
select @allCount=count(ProductId) from Product_test
set @pageSize=10
--返回第一页的数据
select top 10
ProductId,
ProductName,
Introduction
from Product_test order by ProductId
end
else if @CurPage=-1--表示最后一页
select * from
(select top 10 ProductId,
ProductName,
Introduction
from Product_test order by ProductId desc ) as aa
order by ProductId
else
begin
if @isNext=1
--翻到下一页
select top 10 ProductId,
ProductName,
Introduction
from Product_test where ProductId > @LastID order by ProductId
else
--翻到上一页
select * from
(select top 10 ProductId,
ProductName,
Introduction
from Product_test where ProductId < @FirstID order by ProductId desc) as bb order by ProductId
end
上文中讲到的这三个例子都是sql存储过程比较典型的例子,但愿你们好好学习,都可以学到你们各自须要的东西。
原文出处:http://www.codesky.net/article/201103/144215.html
本身练习的:
create table tb_student ( id integer, name varchar(20), chinese number, math number ); insert into tb_student values(1,'小明',90,80); insert into tb_student values(2,'小王',60,70); insert into tb_student values(3,'小张',90,70); select * from tb_student; --无返回值的存储过程 create or replace procedure xs_proc_no is begin insert into tb_student values(4,'小李',70,80); commit; end xs_proc_no; --无参存储过程的调用 declare begin xs_proc_no; end; ---带参数的存储过程 create or replace procedure xs_proc(temp_name in varchar2, temp_num out number) is num_1 number; num_2 number; begin select chinese , math into num_1, num_2 from tb_student where name = temp_name; --dbms_output.put_line(num_1 + num_2); temp_num := num_1 + num_2; end; ---带参数的存储过程调用 declare temp_name varchar2(20);--参数1 temp_num number;--参数2 begin temp_name:='小李';--初始化参数值(第二个参数是返回的,能够不用初始化) xs_proc(temp_name=>temp_name,temp_num=>temp_num);--执行存储过程 --或者xs_proc(temp_name,temp_num); Dbms_Output.put_line(temp_num); end;
Ⅰ、不带输出参数状况
过程名称为pro1,参数个数1个,数据类型为整形数据
import java.sql. * ; public class ProcedureNoArgs { public static void main(String args[]) throws Exception { // 加载Oracle驱动 DriverManager.registerDriver( new oracle.jdbc.driver.OracleDriver()); // 得到Oracle数据库链接 Connection conn = DriverManager.getConnection( " jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCL", sUsr, sPwd " ); // 建立存储过程的对象 CallableStatement c = conn.divpareCall( " {call pro1(?)} " ); // 给Oracle存储过程的参数设置值 ,将第一个参数的值设置成188 c.setInt( 1 , 188 ); // 执行Oracle存储过程 c.execute(); conn.close(); } }
Ⅱ、带输出参数的状况
过程名称为pro2,参数个数2个,数据类型为整形数据,返回值为整形类型
import java.sql.*; public class ProcedureWithArgs { public static void main(String args[]) throws Exception { //加载Oracle驱动 DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); //得到Oracle数据库链接 Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCL", sUsr, sPwd "); //建立Oracle存储过程的对象,调用存储过程 CallableStatement c=conn.divpareCall("{call pro2(?,?)}"); //给Oracle存储过程的参数设置值 ,将第一个参数的值设置成188 c.setInt(1,188); //注册存储过程的第二个参数 c.registerOutParameter(2,java.sql.Types.INTEGER); //执行Oracle存储过程 c.execute(); //获得存储过程的输出参数值并打印出来 System.out.println (c.getInt(2)); conn.close(); } }原文出处:http://www.cnblogs.com/chinafine/articles/1776094.html 参考文章:http://www.cnblogs.com/liliu/archive/2011/06/22/2087546.html