SQL存储过程的几个简单例子

例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;

java中调用存储过程

Ⅰ、不带输出参数状况
      过程名称为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
相关文章
相关标签/搜索