存儲過程

存儲過程
6.1.    創建無參數存儲過程
Sql代碼 複製代碼
  1. IF EXISTS (SELECT name FROM sysobjects   
  2. WHERE name = 'au_info_all' AND type = 'P')   
  3. DROP PROCEDURE au_info_all –判斷如果存在XXX過程就刪除   
  4.   
  5. CREATE PROCEDURE au_info_all –創建存儲過程   
  6. AS  
  7. SELECT pub_name FROM authors  
 


SQLSERVER 調用方法:
Sql代碼 複製代碼
  1. EXECUTE au_info_all/ EXEC au_info_all  
 
ORACLE 調用方法:
6.2.    創建有參數存儲過程
Sql代碼 複製代碼
  1. IF EXISTS (SELECT name FROM sysobjects   
  2. WHERE name = 'au_info' AND type = 'P')   
  3. DROP PROCEDURE au_info   
  4.   
  5. CREATE PROCEDURE au_info   
  6.    @lastname varchar(40),   
  7.    @firstname varchar(20)   
  8. AS  
  9. SELECT au_lname, au_fname, title, pub_name   
  10.    FROM authors   
  11.    WHERE  au_fname = @firstname   
  12.       AND au_lname = @lastname  
 


SQLSERVER 調用方法:
Sql代碼 複製代碼
  1. EXECUTE au_info 'Dull''Ann'  
  2. EXECUTE au_info @lastname = 'Dull', @firstname = 'Ann'  
 


6.3.    創建有通配符參數存儲過程
從四個表的聯接中只返回指定的作者(提供了姓名)、出版的書籍以及出版社。該存儲過程對傳遞的參數進行模式匹配,如果沒有提供參數,則使用預設的默認值.
Sql代碼 複製代碼
  1. IF EXISTS (SELECT name FROM sysobjects   
  2.       WHERE name = 'au_info2' AND type = 'P')   
  3.    DROP PROCEDURE au_info2   
  4.   
  5. CREATE PROCEDURE au_info2   
  6.    @lastname varchar(30) = 'D%',   
  7.    @firstname varchar(18) = '%'  
  8. AS  
  9. SELECT au_lname, au_fname, title, pub_name   
  10. FROM authors   
  11. WHERE au_fname LIKE @firstname   
  12.    AND au_lname LIKE @lastname  
 

SQLSERVER 調用方法:
Sql代碼 複製代碼
  1. EXECUTE au_info2   
  2. EXECUTE au_info2 'Wh%'  
  3. EXECUTE au_info2 @firstname = 'A%'  
  4. EXECUTE au_info2 'Hunter''Sheryl'  
  5. EXECUTE au_info2 'H%''S%'  
 


6.4.    創建有Output參數存儲過程
Sql代碼 複製代碼
  1. IF EXISTS(SELECT name FROM sysobjects   
  2.       WHERE name = 'titles_sum' AND type = 'P')   
  3.    DROP PROCEDURE titles_sum   
  4.   
  5. CREATE PROCEDURE  
  6. titles_sum   
  7. @@TITLE varchar(40) = '%',   
  8. @@SUM money OUTPUT  
  9. AS  
  10. SELECT 'Title Name' = title   
  11. FROM titles   
  12. WHERE title LIKE @@TITLE   
  13. SELECT @@SUM = SUM(price)   
  14. FROM titles WHERE title LIKE @@TITLE  
 

SQLSERVER 調用方法:
Java代碼 複製代碼
  1. DECLARE @@TOTALCOST money   
  2. EXECUTE titles_sum 'The%', @@TOTALCOST OUTPUT   
  3. IF @@TOTALCOST < 200  
  4. BEGIN   
  5.    PRINT 'All of these titles can be purchased for less than $200.'  
  6. END   
  7. ELSE   
  8. SELECT 'The total cost of these titles is $' + RTRIM(CAST(@@TOTALCOST AS varchar(20)))  
 

6.5.    創建有Output遊標參數存儲過程
Sql代碼 複製代碼
  1. IF EXISTS (SELECT name FROM sysobjects   
  2. WHERE name = 'titles_cursor' and type = 'P')   
  3. DROP PROCEDURE titles_cursor   
  4. CREATE PROCEDURE titles_cursor @titles_cursor CURSOR VARYING OUTPUT  
  5. AS  
  6. SET @titles_cursor = CURSOR  
  7. FORWARD_ONLY STATIC FOR  
  8. SELECT *   
  9. FROM titles   
  10. OPEN @titles_cursor  
 


SQLSERVER 調用方法:
Sql代碼 複製代碼
  1. DECLARE @MyCursor CURSOR  
  2. EXEC titles_cursor @titles_cursor = @MyCursor OUTPUT  
  3. WHILE (@@FETCH_STATUS = 0)   
  4. BEGIN  
  5.    FETCH NEXT FROM @MyCursor   
  6. END  
  7. CLOSE @MyCursor   
  8. DEALLOCATE @MyCursor  
 

6.6.    創建有WITH RECOMPILE存儲過程
當每次調用存儲過程時都重新編譯存儲過程,目前尚未發現這個參數的用處
Sql代碼 複製代碼
  1. CREATE PROCEDURE titles_by_author   
  2. @@LNAME_PATTERN varchar(30) = '%'  
  3. WITH RECOMPILE   
  4. AS  
  5. SELECT RTRIM(au_fname) + ' ' + RTRIM(au_lname) AS 'Authors full name',   
  6.    title AS Title   
  7. FROM authors a INNER JOIN titleauthor ta   
  8.    ON a.au_id = ta.au_id INNER JOIN titles t   
  9.    ON ta.title_id = t.title_id   
  10. WHERE au_lname LIKE @@LNAME_PATTERN  
 


6.7.    創建有WITH ENCRYPTION存儲過程
對存儲過程進行加密,用於隱藏存儲過程的文本,有編程私心的很重要噢!
Sql代碼 複製代碼
  1. CREATE PROCEDURE encrypt_this   
  2. WITH ENCRYPTION   
  3. AS SELECT * FROM authors  
 

6.8.    調用用戶定義的系統存儲過程

6.9.    刪除存儲過程
Sql代碼 複製代碼
  1. DROP PROCEDURE procecureName  
 

6.10.    在SQL中存儲過程的調用
?    無參數存儲過程調用
Sql代碼 複製代碼
  1. EXECUTE au_info_all  
 

?    有參數存儲過程調用
Sql代碼 複製代碼
  1. EXECUTE au_info 'Dull''Ann'  
  2. EXECUTE au_info @lastname = 'Dull', @firstname = 'Ann'  
 

?    通配符存儲過程調用
Sql代碼 複製代碼
  1. EXECUTE au_info2   
  2. EXECUTE au_info2 'Wh%'  
  3. EXECUTE au_info2 @firstname = 'A%'  
  4. EXECUTE au_info2 'Hunter''Sheryl'  
  5. EXECUTE au_info2 'H%''S%'  
 

?    Output參數存儲過程調用
Sql代碼 複製代碼
  1. DECLARE @@TOTALCOST money   
  2. EXECUTE titles_sum 'The%', @@TOTALCOST OUTPUT  
  3. IF @@TOTALCOST < 200   
  4. BEGIN  
  5.        PRINT ' '  
  6. END  
  7. ELSE  
  8. SELECT 'The total cost of these titles is $' + RTRIM(CAST(@@TOTALCOST AS varchar(20)))  
 


?    Output遊標參數存儲過程調用
Sql代碼
  1. DECLARE @MyCursor CURSOR  
  2. EXEC titles_cursor @titles_cursor = @MyCursor OUTPUT  
  3. WHILE (@@FETCH_STATUS = 0)   
  4. BEGIN  
  5.    FETCH NEXT FROM @MyCursor   
  6. END  
  7. CLOSE @MyCursor   
  8. DEALLOCATE @MyCursor  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章