全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:3867
推到 Plurk!
推到 Facebook!

SQL中,關於cursor的函意??

答題得分者是:timhuang
uuujjj
一般會員


發表:31
回覆:59
積分:18
註冊:2002-09-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-02-02 16:13:03 IP:61.218.xxx.xxx 未訂閱
想請教一下關於cursor的句意以及其用法… 希望前輩面能指點迷津~@@ 發表人 - uuujjj 於 2003/02/08 13:52:33
a6475
高階會員


發表:67
回覆:230
積分:154
註冊:2002-09-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-02-04 14:12:46 IP:61.229.xxx.xxx 未訂閱
在實踐SQL一書 p202頁說到: 指標(cursor)是一個暫時用儲存查詢結果集的虛擬作業空間,由於是無法 直接以列為單位來處理八料的,所以它必須先整批地從資料表中取出資料 ,然後將此結果集儲存在「指標」這個物件當中,最後再利用迴圈處理一 列一列地取出儲存的資料來進行處理。 月夜 光明 藍更愁
------
月夜 光明 藍更愁
uuujjj
一般會員


發表:31
回覆:59
積分:18
註冊:2002-09-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-02-04 16:53:18 IP:61.218.xxx.xxx 未訂閱
感謝您的資訊解說~^________^ 那不知道有沒有大大應用過這類型的語法~ 呵…
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-02-04 22:00:48 IP:61.221.xxx.xxx 未訂閱
cursor 的目地是用來取得你的資料集中的以 row (record) 為單位的資料結果, 一般用來針對一筆一筆的資料作處理或是判斷來使用的, 簡單的用法其是就像是 在 TQuery (TADOQuery) 中的目前所指向資料列的意義相同    請問你使用的資料庫為何, 若是使用 MSSQL 的話, 舉一個 sample 給你看: 這段 sample code 取自 SQL 2000 online help 的資料, 是一個巢狀 CURSOR 的使用, 其中第一個 cursor (authors_cursor )的資料集為: SELECT au_id, au_fname, au_lname FROM authors WHERE state = "UT" ORDER BY au_id 就是找出所有在 UT 州的作者資料, 第二個 cursor (titles_cursor) 的資料集為:    SELECT t.title    FROM titleauthor ta, titles t    WHERE ta.title_id = t.title_id AND    ta.au_id = @au_id 是利用第一層 cursor 的變數 @au_id 來找出所有該作者的作品資料, 使用 cursor 的 方法為 --宣告 Declare cursor_name cursor for select xxxxxxxxx --開啟 cursor open cursor_name  --關閉釋放 cursor close cursor_name  deallocate cursor_name     
DECLARE @au_id varchar(11), @au_fname varchar(20), @au_lname varchar(40),
   @message varchar(80), @title varchar(80)    PRINT "-------- Utah Authors report --------"    DECLARE authors_cursor CURSOR FOR 
SELECT au_id, au_fname, au_lname
FROM authors
WHERE state = "UT"
ORDER BY au_id    OPEN authors_cursor    FETCH NEXT FROM authors_cursor 
INTO @au_id, @au_fname, @au_lname    WHILE @@FETCH_STATUS = 0
BEGIN
   PRINT " "
   SELECT @message = "----- Books by Author: "   
      @au_fname   " "   @au_lname       PRINT @message       -- Declare an inner cursor based   
   -- on au_id from the outer cursor.       DECLARE titles_cursor CURSOR FOR 
   SELECT t.title
   FROM titleauthor ta, titles t
   WHERE ta.title_id = t.title_id AND
   ta.au_id = @au_id   -- Variable value from the outer cursor       OPEN titles_cursor
   FETCH NEXT FROM titles_cursor INTO @title       IF @@FETCH_STATUS <> 0 
      PRINT "         <>"            WHILE @@FETCH_STATUS = 0
   BEGIN
      
      SELECT @message = "         "   @title
      PRINT @message
      FETCH NEXT FROM titles_cursor INTO @title
   
   END       CLOSE titles_cursor
   DEALLOCATE titles_cursor
   
   -- Get the next author.
   FETCH NEXT FROM authors_cursor 
   INTO @au_id, @au_fname, @au_lname
END    CLOSE authors_cursor
DEALLOCATE authors_cursor
GO    
uuujjj
一般會員


發表:31
回覆:59
積分:18
註冊:2002-09-28

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-02-05 20:22:11 IP:61.218.xxx.xxx 未訂閱
引言: DECLARE titles_cursor CURSOR FOR SELECT t.title FROM titleauthor ta, titles t WHERE ta.title_id = t.title_id AND ta.au_id = @au_id
謝謝timhuang的指導… 我的資料庫是用Oracle Sql的…^^ 不過,雖然資料庫不同,但還是想瞭解一下… 標誌小老鼠「@」的原意是不是就像「超連結」一樣…@@? 能夠依照第一層的cursor所搜尋出來的該州作者們, 來進行第二層搜尋所有該州作者的作品資料?? 是不是這個原理呢??^^" 如果是的話,那我大概&稍微能理解您提供的範例了~ 加油、加油~^^y FETCH NEXT FROM authors_cursor ^^^^^^^^^^→這是什麼意思呢??不好意思…^^" 遇到了就想多瞭解一下~呵…^_^
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-02-06 00:21:25 IP:61.221.xxx.xxx 未訂閱
@xxx 在 sql server 中就是變數的意思, 開頭用 @ 表示, 所以在前頭要用 declare 宣告, 例如: DECLARE @au_id varchar(11) 就是宣告一個 varchar 長度 11 的變數, 名稱為 @au_id. FETCH NEXT FROM authors_cursor INTO @au_id, @au_fname, @au_lname 要連後面的一起看, fetch next from cursor_name into 變數1, 變數2, .. etc... 代表著由此 cursor 所傳回的結果集中, 取回下一列資料並傳入 變數1, 變數2, ... , 另外還要知道的是 @@FETCH_STATUS 這個變數的意義, 在 sql server 中, @@ 開頭的變數是 global variable, @@FETCH_STATUS 是代表 fetch next 後的結果, 其分別的意義如下: 0 FETCH 陳述式順利執行。 -1 FETCH 陳述式失敗,或資料列超出結果集。 -2 擷取的資料列已遺漏。 在 oracle 中可能變數和 syntax 會有不同, 但是 cursor 的基本原理都是一樣的!!
uuujjj
一般會員


發表:31
回覆:59
積分:18
註冊:2002-09-28

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-02-08 13:54:29 IP:61.218.xxx.xxx 未訂閱
感謝timhuang不厭其煩的教導… 謝謝~^^ 大致上都已具體瞭解了~ 謝謝…^____________^y
系統時間:2024-06-16 15:07:06
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!