❶ sql游標的寫法
非要用游標嗎?
這個不用游標就可以搞定了。
update B set price = price + 1
from A,B
where A.id = B.id and a.prodate like '2012-6-12%';
commit;
❷ 資料庫的游標的作用是什麼,如何編寫
游標是系統為用戶開設的一個數據緩沖區,存放SQL語句的執行結果。每個游標區都有一個名字。用戶可以用SQL語句逐一從游標中獲取記錄,並賦給主變數,交由主語言進一步處理。主語言是面向記錄的,一組主變數一次只能存放一條記錄。僅使用主變數並不能完全滿足SQL語句向應用程序輸出數據的要求。嵌入式SQL引入了游標的概念,用來協調這兩種不同的處理方式。在資料庫開發過程中,當你檢索的數據只是一條記錄時,你所編寫的事務語句代碼往往使用SELECT INSERT 語句。但是我們常常會遇到這樣情況,即從某一結果集中逐一地讀取一條記錄。那麼如何解決這種問題呢?這時我們就會使用游標。
-----------------------------------------------------------
使用游標會降低執行效率,平時盡可能不要用
declare @column1 varchar(10)
declare @column2 varchar(10)
declare cursor1 cursor for select column1, column2 from tablename --聲明游標(用select語句,可以通過where等語句限定游標取的結果集)
open cursor1 --打開游標
fetch next from cursor1 into @column1, @column2 --取游標的值到變數
while (@@fetch_status=0) --有記錄的話
begin
--處理
fetch next from cursor1 into @column1, @column2 --取下一個
end
close cursor1 --關閉游標
deallocate cursor1 --釋放游標
❸ oracle資料庫的游標和存儲過程怎麼寫
--創建存儲過程
CREATE OR REPLACE PROCEDURE xxxxxxxxxxx_p
(
--參數IN表示輸入參數,OUT表示輸入參數,類型可以使用任意Oracle中的合法類型。
is_ym IN CHAR
)
AS
--定義變數
vs_msg VARCHAR2(4000); --錯誤信息變數
vs_ym_beg CHAR(6); --起始月份
vs_ym_end CHAR(6); --終止月份
vs_ym_sn_beg CHAR(6); --同期起始月份
vs_ym_sn_end CHAR(6); --同期終止月份
--定義游標(簡單的說就是一個可以遍歷的結果集)
CURSOR cur_1 IS
SELECT area_code,CMCODE,SUM(rmb_amt)/10000 rmb_amt_sn,SUM(usd_amt)/10000 usd_amt_sn
FROM BGD_AREA_CM_M_BASE_T
WHERE ym >= vs_ym_sn_beg
AND ym <= vs_ym_sn_end
GROUP BY area_code,CMCODE;BEGIN
--用輸入參數給變數賦初值,用到了Oralce的SUBSTR TO_CHAR ADD_MONTHS TO_DATE 等很常用的函數。
vs_ym_beg := SUBSTR(is_ym,1,6);
vs_ym_end := SUBSTR(is_ym,7,6);
vs_ym_sn_beg := TO_CHAR(ADD_MONTHS(TO_DATE(vs_ym_beg,'yyyymm'), -12),'yyyymm');
vs_ym_sn_end := TO_CHAR(ADD_MONTHS(TO_DATE(vs_ym_end,'yyyymm'), -12),'yyyymm');
--先刪除表中特定條件的數據。
DELETE FROM xxxxxxxxxxx_T WHERE ym = is_ym;
--然後用內置的DBMS_OUTPUT對象的put_line方法列印出影響的記錄行數,其中用到一個系統變數SQL%rowcount
DBMS_OUTPUT.put_line('del上月記錄='||SQL%rowcount||'條');
INSERT INTO xxxxxxxxxxx_T(area_code,ym,CMCODE,rmb_amt,usd_amt)
SELECT area_code,is_ym,CMCODE,SUM(rmb_amt)/10000,SUM(usd_amt)/10000
FROM BGD_AREA_CM_M_BASE_T
WHERE ym >= vs_ym_beg
AND ym <= vs_ym_end
GROUP BY area_code,CMCODE;
DBMS_OUTPUT.put_line('ins當月記錄='||SQL%rowcount||'條');
--遍歷游標處理後更新到表。遍歷游標有幾種方法,用for語句是其中比較直觀的一種。
FOR rec IN cur_1 LOOP
UPDATE xxxxxxxxxxx_T
SET rmb_amt_sn = rec.rmb_amt_sn,usd_amt_sn = rec.usd_amt_sn
WHERE area_code = rec.area_code
AND CMCODE = rec.CMCODE
AND ym = is_ym;
END LOOP;
COMMIT;
--錯誤處理部分。OTHERS表示除了聲明外的任意錯誤。SQLERRM是系統內置變數保存了當前錯誤的詳細信息。
EXCEPTION
WHEN OTHERS THEN
vs_msg := 'ERROR IN xxxxxxxxxxx_p('||is_ym||'):'||SUBSTR(SQLERRM,1,500);
ROLLBACK;
--把當前錯誤記錄進日誌表。
INSERT INTO LOG_INFO(proc_name,error_info,op_date)
VALUES('xxxxxxxxxxx_p',vs_msg,SYSDATE);
COMMIT;
RETURN;
END;
❹ 資料庫游標
1.為何使用游標:
使用游標(cursor)的一個主要的原因就是把集合操作轉換成單個記錄處理方式。用SQL語言從資料庫中檢索數據後,結果放在內存的一塊區域中,且結果往往是一個含有多個記錄的集合。游標機制允許用戶在SQL server內逐行地訪問這些記錄,按照用戶自己的意願來顯示和處理這些記錄。
2. 如何使用游標:
一般地,使用游標都遵循下列的常規步驟:
(1) 聲明游標。把游標與T-SQL語句的結果集聯系起來。(2) 打開游標。 (3) 使用游標操作數據。(4) 關閉游標。
3.下面是用法
DECLARE cursor1 cursor /* 聲明游標,默認為FORWARD_ONLY游標 */
FOR SELECT * FROM books
OPEN cursor1 /* 打開游標 */
FETCH NEXT from cursor1 /* 讀取第1行數據*/
WHILE @@FETCH_STATUS = 0 /* 用WHILE循環控制游標活動 */
BEGIN
FETCH NEXT from cursor1 /* 在循環體內將讀取其餘行數據 */
END
CLOSE cursor1 /* 關閉游標 */
DEALLOCATE cursor1
❺ oracle資料庫的游標和存儲過程怎麼寫
Oracle游標,從字面理解就是游動的游標。用資料庫語言來描述就是:游標是映射在結果集中一行數據上的位置實體,有了游標,用戶就可以訪問結果集中的任意一行數據了,將游標放置到某行後,即可對該行數據進行操作,例如提取當前行的數據等。
游標分為顯示游標和隱式游標。
要使用顯示游標分為四步:
1.聲名游標。
cursor sel_names is select * from names;
2.打開游標。
open sel_names;
3.讀取數據。
fetch sel_name into RowTypeVariable;
4.關閉游標。
close sel_name;
Oracle游標的屬性:
1.%ISOPEN判斷游標是否被打開,如果打開%ISOPEN等於true,否則等於false;
2.%FOUND判斷游標所在的行是否有效,如果有效,則%FOUND等於true,否則等於false;
3.%ROWCOUNT返回當前位置為止游標讀取的記錄行數。
例子:
set serveroutput on;
declare
temp_name varchar2(32);
cursor sel_name
is
select * from names;
begin
if sel_names%isopen = false then
open sel_names;
end if;
fetch sel_names into temp_name;
while sel_names%found loop
dbms_output.put_line('name: '||temp_name);
if sel_names%rowcount=200 then
exit;
end if;
fetch sel_names into temp_name;
end loop;
close sel_names;
end;
/
❻ 資料庫游標問題
表及數據如下,我隨便弄了點
createtableauthor
(idintprimarykey,
namevarchar(10),
telephonevarchar(20),
cityvarchar(20))
insertintoauthorvalues(1,'jones','2222222','Berkeley')
insertintoauthorvalues(2,'king','3333333','Berkeley')
insertintoauthorvalues(3,'jim','55555555','Beijing')
執行
declarecur_='Berkeley'orderbyid
declare@idint
opencur_c
FETCHNEXTFROMcur_cinto@id
while@@FETCH_STATUS=0
begin
updateauthorsettelephone='9'+substring(telephone,4,len(telephone)-3)whereid=@id
FETCHNEXTFROMcur_cinto@id
end
closecur_c
deallocatecur_c
結果
❼ 資料庫游標怎麼寫
DECLARE
游標名
CURSOR
FOR
SELECT語句
OPEN
游標名
FETCH
游標名
INTO
@變數1,@變數2,...,@變數n--(變數個數要與SELECT語句結果的個數一致)
WHILE
(@@FETCH_STATUS
=
0)
BEGIN
--處理代碼
FETCH
游標名
INTO
@變數1,@變數2,...,@變數n
END
CLOSE
游標名
DEALLOCATE
游標名
END
❽ 資料庫游標
游標包含兩方面的內容:
●游標結果集:執行其中的Select語句所得到的結果集;
●游標位置:一個指向游標結果集內的某一條記錄的指針
利用游標可以單獨操縱結果集中的每一行。游標在定義以後存在兩種狀態:關閉和打開。當游標關閉時,其查詢結果集不存在;只有當游標打開時,才能按行讀取或修改結果集中的數據。
使用游標
一個應用程序可以使用兩種類型的游標:前端(客戶)游標和後端(伺服器)游標,它們是兩個不同的概念。
無論使用哪一種游標,都需要經過如下幾個步驟:
●定義游標
●打開游標
●從游標中操作數據
●關閉游標
❾ 資料庫游標如何使用
java中沒有,但可以用Types.OTHER來代替
另外如果用的是Oracle資料庫,則很方便的用OracleTypes.CURSOR來獲取游標 (需要class12.jar驅動程序)
❿ sql server中條件游標怎麼寫
這玩意需要你自己簡單學習下,參考一下這篇文章吧網頁鏈接