舉例回答:
創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括札達(dá)網(wǎng)站建設(shè)、札達(dá)網(wǎng)站制作、札達(dá)網(wǎng)頁(yè)制作以及札達(dá)網(wǎng)絡(luò)營(yíng)銷(xiāo)策劃等。多年來(lái),我們專(zhuān)注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,札達(dá)網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶(hù)以成都為中心已經(jīng)輻射到札達(dá)省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶(hù)的支持與信任!
案例:
--For?循環(huán)游標(biāo)
--(1)定義游標(biāo)
--(2)定義游標(biāo)變量
--(3)使用for循環(huán)來(lái)使用這個(gè)游標(biāo)
declare
--類(lèi)型定義
cursor?c_job
is
select?empno,ename,job,sal
from?emp
where?job='MANAGER';
--定義一個(gè)游標(biāo)變量v_cinfo?c_emp%ROWTYPE?,該類(lèi)型為游標(biāo)c_emp中的一行數(shù)據(jù)類(lèi)型
c_row?c_job%rowtype;
begin
for?c_row?in?c_job?loop
dbms_output.put_line(c_row.empno||'-'||c_row.ename||'-'||c_row.job||'-'||c_row.sal);
end?loop;
end;
--?第一個(gè)題目,我的表叫stu,你別忘了改成你的表名
create?or?replace?procedure?pro7
as
cursor?c_emp1?is?select?ename,sal?from?stu;
vename?stu.ename%type;
vsal?stu.sal%type;
vnewsal?stu.sal%type;
vfd?number?:=?0;
begin
open?c_emp1;
loop
fetch?c_emp1?into?vename,vsal;
exit?when?c_emp1%notfound;
vfd?:=?vsal*0.2;
if?vfd?=?300
then?update?stu?set?sal?=?sal+vfd?where?ename=vename;
vnewsal?:=?vsal+vfd;
dbms_output.put_line('員工'?||?vename?||?'漲了'?||?vnewsal?||?'工資');
end?if;
end?loop;
close?c_emp1;
end;
--創(chuàng)建存儲(chǔ)
程
CREATE
OR
REPLACE
PROCEDURE
xxxxxxxxxxx_p
(
--參數(shù)IN表示輸入?yún)?shù)
OUT表示輸入?yún)?shù)
類(lèi)型
使用任意Oracle
合
類(lèi)型
is_ym
IN
CHAR
)
AS
--定義變量
vs_msg
VARCHAR2(4000);
--錯(cuò)誤信息變量
vs_ym_beg
CHAR(6);
--起始月份
vs_ym_end
CHAR(6);
--終止月份
vs_ym_sn_beg
CHAR(6);
--同期起始月份
vs_ym_sn_end
CHAR(6);
--同期終止月份
--定義游標(biāo)(簡(jiǎn)單
說(shuō)
遍歷
結(jié)
集)
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
--用輸入?yún)?shù)給變量賦初值
用
Oralce
SUBSTR
TO_CHAR
ADD_MONTHS
TO_DATE
等
用
函數(shù)
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');
--先刪除表
特定條件
數(shù)據(jù)
DELETE
FROM
xxxxxxxxxxx_T
WHERE
ym
=
is_ym;
--
用內(nèi)置
DBMS_OUTPUT
象
put_line
打印
影響
記錄行數(shù)
其
用
系統(tǒng)變量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||'條');
--遍歷游標(biāo)處理
更新
表
遍歷游標(biāo)
幾種
用for語(yǔ)句
其
比較直觀
種
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;
--錯(cuò)誤處理部
OTHERS表示除
聲明外
任意錯(cuò)誤
SQLERRM
系統(tǒng)內(nèi)置變量保存
前錯(cuò)誤
詳細(xì)信息
EXCEPTION
WHEN
OTHERS
THEN
vs_msg
:=
'ERROR
IN
xxxxxxxxxxx_p('||is_ym||'):'||SUBSTR(SQLERRM,1,500);
ROLLBACK;
--
前錯(cuò)誤記錄進(jìn)
志表
INSERT
INTO
LOG_INFO(proc_name,error_info,op_date)
VALUES('xxxxxxxxxxx_p',vs_msg,SYSDATE);
COMMIT;
RETURN;
END;
你這種, 表名字是是參數(shù)的情況下, 需要使用 動(dòng)態(tài) sql 來(lái)處理了。
你需要先定義一個(gè)變量, 來(lái)存儲(chǔ)你的 sql 語(yǔ)句。
然后 OPEN v_cursor FOR 那個(gè) sql 語(yǔ)句的字符串
下面是一個(gè)例子:
SQL DECLARE
2 TYPE refcursor IS REF CURSOR;
3 v_cursor REFCURSOR;
4 v_Sql VARCHAR(200);
5 v_name VARCHAR(10);
6 BEGIN
7 -- 動(dòng)態(tài)SQL
8 v_Sql := 'SELECT name FROM test_dysql';
9 -- 打開(kāi)游標(biāo).
10 OPEN v_cursor FOR v_SQL;
11 -- 循環(huán)處理.
12 LOOP
13 -- 填充數(shù)據(jù).
14 FETCH v_cursor INTO v_name;
15 -- 無(wú)數(shù)據(jù)時(shí) 退出循環(huán).
16 EXIT WHEN v_cursor%NOTFOUND;
17 -- 輸出.
18 dbms_output.put_line(v_name);
19 END LOOP;
20 -- 關(guān)閉游標(biāo).
21 CLOSE v_cursor;
22 EXCEPTION
23 WHEN OTHERS THEN
24 -- 發(fā)生異常時(shí),如果游標(biāo)還打開(kāi),那么關(guān)閉掉.
25 IF (v_cursor%isopen) THEN
26 CLOSE v_cursor;
27 END IF;
28 RAISE;
29 END;
30 /
A
B
C
D
E
PL/SQL procedure successfully completed.
本文標(biāo)題:oracle如何存儲(chǔ)游標(biāo),如何使用oracle的游標(biāo)
地址分享:http://jinyejixie.com/article10/hseodo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊(cè)、服務(wù)器托管、企業(yè)網(wǎng)站制作、靜態(tài)網(wǎng)站、動(dòng)態(tài)網(wǎng)站、商城網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)