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
相關文章
相關標籤/搜索