例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