1. 程式人生 > >建立五種儲存過程及遊標的使用

建立五種儲存過程及遊標的使用

--建立儲存過程


--A. 建立使用引數的儲存過程
CREATE PROC au_info
 @lastname varchar(40),
 @firstname varchar(20) 
AS 
SELECT au_lname, au_fname, title, pub_name
FROM table1
WHERE au_fname = @firstname
AND au_lname = @lastname
GO


--B. 建立使用引數預設值的儲存過程
CREATE PROC pub_info2 
@pubname varchar(40) = 'Algodata Infosystems'
AS 
SELECT au_lname, au_fname, pub_name
FROM table2
WHERE @pubname = p.pub_name




--C. 執行用顯式值替代引數預設值的儲存過程


--在下例中,儲存過程 showind2 的 @table 引數預設值是 titles。


CREATE PROC showind2 
@table varchar(30) = 'titles'
AS 
SELECT
TABLE_NAME = table2.name,
INDEX_NAME = table1.name, 
INDEX_ID = indid
FROM table1 INNER JOIN table2 
ON table2.id = table1.id
WHERE table2.name = @table




--D. 使用引數預設值 NULL 建立儲存過程


--引數預設值可以是 NULL 值。在這種情況下,如果未提供引數,則 SQL Server 將根據儲存過程的其它語句執行儲存過程。不會顯示錯誤資訊。


--過程定義還可指定當不給出引數時要採取的其它某種措施。例如:


CREATE PROC showind3 
@table varchar(30) = NULL
AS 
IF @table IS NULL
   PRINT 'Give a table name'
ELSE
   SELECT 
   TABLE_NAME = table1.name,
   INDEX_NAME = table2.name, 
   INDEX_ID = indid
   FROM table2 INNER JOIN table1
   ON table1.id = table2.id
   WHERE table1.name = @table


--E. 使用包含萬用字元的引數預設值建立儲存過程


--如果儲存過程將引數用於 LIKE 關鍵字,那麼預設值可包括萬用字元(%、_、[] 和 [^])。例如,可將 showind 修改為當不提供引數時顯示有關係統表的資訊:


CREATE PROC showind4 
@table varchar(30) = 'sys%'
AS 
SELECT 
TABLE_NAME = table1.name,
INDEX_NAME = table2.name, 
INDEX_ID = indid
FROM table2 INNER JOIN table1
ON table1.id = table2.id
WHERE table1.name LIKE @table






--建立遊標




--新建遊標
declare youbiao cursor 
for 
select SubID,SubType,SubMoney,SubYear,ChargeDep 
from table2 
where
[email protected]

--開啟遊標
open youbiao
--從遊標裡取出資料給 變數 賦值
fetch next from youbiao 
into @subID,@subType,@subMoney,@subYear,@chargeDep
begin
--判斷遊標的狀態
-- 0 fetch語句成功     
-- -1 fetch語句失敗或此行不在結果集中     
-- -2 被提取的行不存在
while @@fetch_status = 0


begin
set @stuPayData = (select isnull(count(*),0) from table1 where [email protected]
and [email protected] and [email protected] )
if(@stuPayData = 0)
begin
insert into table1(StuID, DepName, ClassName, FeeID, SubID, SubType, ShouldPayment, SubYear, ChargeDep, CUser, CTime)
select @studentID, DepName, ClassName, @feeStandard, @subID, @subType, @subMoney, @subYear, @chargeDep, @cuser, getdate() from StudentInfo where
[email protected]

end

--用遊標去取下一條記錄
fetch next from youbiao into @subID,@subType,@subMoney,@subYear,@chargeDep


end


end
--關閉遊標
close youbiao
--撤銷遊標
deallocate youbiao


END






--在儲存過程中使用遊標呼叫其他儲存過程


declare cur_name cursor for select type from table1;  --定義遊標
declare @type varchar(50);
open cur_name;
fetch next from cur_name into @type;
while @@fetch_status =0
begin
   if @type = '其他儲存過程'
   begin
      exec 其他儲存過程;
   end
   else if @type = 函式
   begin
       select dbo.函式();
   end
fetch next from cur_name into @type;
end
close cur_name;
deallocate cur_name;





相關推薦

建立儲存過程遊標的使用

--建立儲存過程 --A. 建立使用引數的儲存過程 CREATE PROC au_info  @lastname varchar(40),  @firstname varchar(20)  AS  SELECT au_lname, au_fname, title, pub_

Hive中建立和呼叫儲存過程自定義函式

前面的文章《在Hive中實現儲存過程–HQL/SQL》中介紹瞭如何使用HPL/SQL在Hive中實現儲存過程,執行類似Oracle PL/SQL的功能。 一般的業務場景是資料開發人員開發好一個儲存過程,然後週期性的呼叫,傳入不同的引數即可。 本文繼續介紹如何在Hive中利

MySQL 儲存過程遊標使用

一、儲存過程建立1.1、語法[DELIMITER $$ ]  --宣告結束符號,mysql預設;為語句結束符,這裡聲明後當儲存過程遇到$$才結束。CREATE PROCEDURE pro_name ([[ IN |OUT | INOUT ] 引數名 資料類形...])  --

MySQL 建立儲存過程定時任務

建立定時任務: 建立定時任務名為:event_csdn '2019-01-01 00:00:00'  起每10s 執行 CREATE event IF NOT EXISTS event_csdn ON SCHEDULE EVERY 10 second STARTS TIME

mysql 儲存過程遊標逐行處理的配合使用

1. 資料準備 +----+------+--------+ | id | name | price1 | +----+------+--------+ | 1 | 大米 | 5 | | 2 | 雞蛋 | 4.5 | | 3 | 蘋果 | 6

Mybaits結合Oracle呼叫儲存過程返回遊標的兩方法

首先你得有張測試表,無論什麼表有一兩個資料就可以,我本身瞭解的也不多,所以本文旨在用最簡單最明瞭的方式來介紹Mybaits結合Oracle呼叫儲存過程返回遊標結果集,幫助和我一樣新入門的同學,高手歡迎指出錯誤幫助我們成長。 然後你得了解Oracle遊標的概念及

SqlServer遊標儲存過程資料塊執行

資料塊遊標事例如下: begin declare @item_code varchar(32)--定義變數 declare @item_name varchar(32) declare @invest_money_sum float --定義遊標 declare

資料庫儲存過程儲存函式

儲存過程 在java中經常用封裝的思想來提高程式碼的重用性,在java中為什麼要定義方法?原因是有一個功能是需要在不同的地方多次使用的,如果在每一個需要呼叫的地方都寫一遍會造成程式碼量很大,所以我們把他抽取成單獨的方法,在需要使用的時候呼叫這個方法。同樣的道理,如果同一個資料庫操作需要被多次使用

mysql儲存過程拼接字串的用法

DROP PROCEDURE IF EXISTS insert_historytable;DELIMITER //CREATE PROCEDURE insert_historytable()BEGIN ##定義判斷變數 DECLARE 1_id varchar(50); DECLARE 1_dissolved

Oracle儲存過程以及遊標

一.儲存過程 1、儲存過程定義 所謂儲存過程(Stored Procedure),就是一組用於完成特定資料庫功能的SQL語句集,該SQL語句集經過 編譯後儲存在資料庫系統中。在使用時候,使用者通過指定已經定義的儲存過程名字並給出相應的儲存過程引數 來呼叫並執行它,從而完成一個或一系列的資料庫

redis資料型別必須掌握的指令

一、redis五種資料型別 1.string(字串) string是redis最基本的型別,你可以理解成與Memcached一模一樣的型別,一個key對應一個value。 string型別是二進位制安全的。意思是redis的string可以包含任何資料。比如jpg圖片或者序列化的物件 。 s

儲存過程 利用遊標 解決複製業務

需求: 根據同一表的某條件更新欄位 情況一: 以group by 作為條件的 select user a, (select count(*) as tj_num, s_id from user group by s_id) b set a.tuijian_num=b.tj_num where a.id=b

Oracle 儲存過程小結 遊標 ,隨機生成UUID(32位)

    業務需求:            今天領導要求後天批量插入修改資料,將A表中的資料一條條的插入到B表中,中間還夾雜這業務邏輯。  技術需求:      

MySql必知必會實戰練習(儲存過程

1. 為什麼使用儲存過程? (1) 通過把處理封裝在容易使用的單元中,簡化複雜操作 (2) 為了保證資料的完整性,不要求反覆建立一系列的處理操作,所有開發人員和應用程式都使用同一(試驗和測試)儲存過程,則所使用的程式碼否的相同的,這一點的延申就是為了防止錯誤,保證資料的一致性 (3)提高效能,因為使用儲

建立和呼叫儲存過程:查詢Stu資料庫中某個同學的選修課程的資訊,包括學號,姓名,課程名稱,成績

CREATE PROCEDURE proc_select--建立儲存過程 @Sno char(10) output,--輸入輸出引數 @Sname varchar(20) out,--輸出引數 @Cno char(4) out,--輸出引數 @grade tinyint

Oracle儲存過程遊標、函式

SQL99是什麼 (1)是操作所有關係型資料庫的規則 (2)是第四代語言 (3)是一種結構化查詢語言 (4)只需發出合法合理的命令,就有對應的結果顯示 SQL的特點 (1)互動性強,非過程化 (2)資料庫操縱能力強,只需傳送命令,無需關注如何實現 (3)多表操作時,自動導航簡單,例如

MYSQL的儲存過程遊標的使用

1、儲存過程 儲存過程是什麼,簡單來講,就像Java中的 方法(函式),不過它是SQL世界中的方法。 大部分時候,我們所使用都是單條SQL,用來針對一個或多表連線。但是也有情況,是據判斷先對錶A執行操作,變動後再結合表B進行操作。即SQL的執行可能需要 考慮

Oracle儲存過程函式的練習題

--儲存過程、函式練習題 --(1)建立一個儲存過程,以員工號為引數,輸出該員工的工資create or replace procedure p_sxt1(v_empno in emp.empno%type, v_sal out emp.sal%type) isbegin select sal into v_

Redis的儲存型別

常用的五種型別:string(字串),hash(雜湊),list(列表),set(集合),zset(有序集合) 1.String型別 String是最簡單的型別,一個key對應一個value String型別的資料最大512MB。 String型別的值可以被視作

C語言的儲存

五種儲存類 C Primer Plus 第十二章 儲存類、連結和記憶體管理 儲存類 時期 作用域 連結 宣告方式 自動 自動 程式碼塊 空