資料庫存儲函數里能用游標嗎
一、定義游標
二、打開游標
三、提取數據
四、關閉游標
具體語法:你可以自行網路。
B. oracle資料庫的存儲過程中可以用到隱形游標。但是我不太明白為什麼可以用 for in loop來完成對數據的處理。
這是游標的for循環。用游標的for循環,可以簡化游標的操作步驟。使用時系統隱式地定義了一個游標名%ROWTYPE類型的記錄變數,作為循環的計數器。使用游標的for循環,必須按正常方式先定義游標,然後在塊的主體內使用for循環代替顯示第打開游標和關閉游標。循環自動地處理查詢返回的所有行。當最後一行被取出後,循環會自動終止。它會自動完成下列三步:
1.打開游標
2.取數據
3.關閉游標
C. 資料庫在什麼情況下使用游標
當需要在存儲過程中遍歷所查得的結果集時用游標
D. 資料庫 存儲過程 游標
存儲過程相當於在資料庫中定義的的小程序,基本上在所有直接寫sql語句的地方書寫,如ORACLE在它的客戶端工具SQL PLUS ,通過瀏覽器訪問的sql,還有其他第三方工具。網上存在很多相關的資料,基本上裡面沒有強調是通過××編程語言的,都是跟一般的SQL語句相似的用法。具體用法網路一下吧,呵呵。
E. MySql資料庫的存儲過程能返回遊標么
不知道mysql這個跟oracle裡面,是不是一致的,下面是我學習的時候總結的
如果一個過程要返回一個結果集,那麼要引用游標來處理這個結果集。
create or replace procere Test
(
varEmpName emp.ename%type
)
As
begin ------會報錯.錯誤原因沒有into子句.
select * from emp where ename like '%'||varEmpName||'%';
end;
這個程序我們無法用into,因為在Oracle裡面沒有一個類型去接受一個結果集.這個時候我們可以聲明游標對象去接受他.
有倆種方法:
一種是聲明系統游標,一種是聲明自定義游標,然後後面操作一樣,參數類型為
in out 或out
(1)聲明個人系統游標.(推薦)
create or replace p_temp_procere
(
cur_arg out sys_refcursor; --方法1
)
begin
open cur_arg for select * from tablename;
end
調用
declare
cur_calling sys_refcursor;
begin
p_temp_procere(cur_calling); --這樣這個游標就有值了
for rec_next in cur_calling loop
....
end loop;
end;
(2)在包頭中申明一個游表類型,然後調用者申明一個這個類型的游標變數,傳給返回遊標的存儲過程 ,存儲過程out這個結果集,這種方法很麻煩.游標類型不能像索引表一樣使用create or replace type方法來創建,所以只能在包中申明,並且需要使用/來執行,後面的存儲過程才認這個游標類型.(不推薦,但是建議要知道並且要會這種方式,畢竟它有它存在的道理)
--定義全局變數
create or replace package pkg_package
as
type type_cursor is ref cursor;
type type_record is record
(
test01 varchar2(32),
test02 varchar2(32),
test03 varchar2(32)
);
end;
/
--創建返回遊標的存儲過程
create or replace procere p_temp_procere
(
cur_out_arg out pkg_package.type_cursor
)
is
begin
open cur_out_arg for select * from test;
end;
/
--調用
declare
cur_out_arg pkg_package.type_cursor;
rec_arg pkg_package.type_record;
begin
p_temp_procere(cur_out_arg);
fetch cur_out_arg into rec_arg;
dbms_output.put_line(rec_arg.test01);
dbms_output.put_line(rec_arg.test02);
dbms_output.put_line(rec_arg.test03);
end;
F. MYSQL存儲過程的輸出參數可以是游標嗎
你是用ado連接資料庫的吧,我在VC下也同樣出現這樣的問題,使用游標的時候獲取不到輸出值,且還會導致連接中斷。估計是mysql存儲過程還不夠完善,在oracle使用就沒有任何問題。 你可以用Mysql Api直接連接mysql,應該沒有這樣的問題.
G. 資料庫中什麼時候會用到游標
資料庫用到游標的時候多,一般來說是要逐一對查詢結果集進行處理的時候用到,比如存儲過程,一般就是用游標來做循環,這個就是一個指針的作用。
H. db2資料庫,自定義函數是否支持游標在函數中是否有其他方法代替游標的功能
自定義函數支持游標,游標可以在函數中嵌套使用,游標只要你學好了它將很好用,如果沒學好可以根據具體情況用別的方法取代它,甚至用不到,你可以把具體情況告訴我們,也許有更好的解決方法
I. 資料庫中游標的作用是什麼
游標在處理數據中提供了在結果集中一次一行或者多行前進或向後瀏覽數據的能力,可以把游標當作一個指針,它可以指定結果中的任何位置,然後允許用戶對指定位置的數據進行處理。
游標實際上是一種能從包括多條數據記錄的結果集中每次提取一條記錄的機制。游標可以被看作是一個查詢結果集和結果集中指向特定記錄的游標位置組成的一個臨時文件,提供了在查詢結果集中向前或向後瀏覽數據、處理結果集中數據的能力。
有了游標,用戶就可以訪問結果集中任意一行數據,在將游標放置到某行之後,可以在該行或從該位置的行塊上執行操作。
(9)資料庫存儲函數里能用游標嗎擴展閱讀
游標的類型
MS SQL SERVER 支持三種類型的游標:Transact_SQL 游標,API伺服器游標和客戶游標。
1、Transact_SQL 游標
Transact_SQL 游標由DECLARE CURSOR 語法定義、主要用在Transact_SQL腳本、存儲過程和觸發器中。Transact_SQL 游標主要用在伺服器上,由從客戶端發送給伺服器的Transact_SQL 語句或是批處理、存儲過程、觸發器中的Transact_SQL 進行管理。
2、API游標
API 游標支持在OLE DB, ODBC 以及DB_library 中使用游標函數,主要用在伺服器上。每一次客戶端應用程序調用API 游標函數,MS SQL SEVER 的OLE DB 提供者、ODBC驅動器或DB_library 的動態鏈接庫都會將這些客戶請求傳送給伺服器以對API游標進行處理。
3、客戶游標
客戶游標主要是當在客戶機上緩存結果集時才使用。在客戶游標中,有一個預設的結果集被用來在客戶機上緩存整個結果集。客戶游標僅支持靜態游標而非動態游標。由於API 游標和Transact-SQL 游標使用在伺服器端,所以被稱為伺服器游標,也被稱為後台游標,而客戶端游標被稱為前台游標。
J. 資料庫的游標的含義以及作用等,優勢方面
游標是系統為用戶開設的一個數據緩沖區,存放SQL語句的執行結果。每個游標區都有一個名字。用戶可以用SQL語句逐一從游標中獲取記錄,並賦給主變數,交由主語言進一步處理。主語言是面向記錄的,一組主變數一次只能存放一條記錄。僅使用主變數並不能完全滿足SQL語句向應用程序輸出數據的要求。嵌入式SQL引入了游標的概念,用來協調這兩種不同的處理方式。在資料庫開發過程中,當你檢索的數據只是一條記錄時,你所編寫的事務語句代碼往往使用SELECT INSERT 語句。但是我們常常會遇到這樣情況,即從某一結果集中逐一地讀取一條記錄。那麼如何解決這種問題呢?游標為我們提供了一種極為優秀的解決方案。
游標的優點
在資料庫中,游標是一個十分重要的概念。游標提供了一種對從表中檢索出的數據進行操作的靈活手段,就本質而言,游標實際上是一種能從包括多條數據記錄的結果集中每次提取一條記錄的機制。游標總是與一條SQL 選擇語句相關聯因為游標由結果集(可以是零條、一條或由相關的選擇語句檢索出的多條記錄)和結果集中指向特定記錄的游標位置組成。當決定對結果集進行處理時,必須聲明一個指向該結果集的游標。如果曾經用 C 語言寫過對文件進行處理的程序,那麼游標就像您打開文件所得到的文件句柄一樣,只要文件打開成功,該文件句柄就可代表該文件。對於游標而言,其道理是相同的。可見游標能夠實現按與傳統程序讀取平面文件類似的方式處理來自基礎表的結果集,從而把表中數據以平面文件的形式呈現給程序。
我們知道關系資料庫管理系統實質是面向集合的,在MS SQL SERVER 中並沒有一種描述表中單一記錄的表達形式,除非使用where 子句來限制只有一條記錄被選中。因此我們必須藉助於游標來進行面向單條記錄的數據處理。由此可見,游標允許應用程序對查詢語句select 返回的行結果集中每一行進行相同或不同的操作,而不是一次對整個結果集進行同一種操作;它還提供對基於游標位置而對表中數據進行刪除或更新的能力;而且,正是游標把作為面向集合的資料庫管理系統和面向行的程序設計兩者聯系起來,使兩個數據處理方式能夠進行溝通