日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

oracle游标理解,oracle游标的使用方法

發布時間:2025/4/5 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle游标理解,oracle游标的使用方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

oracle游標的使用方法:

①、定義游標 cursor

②、打開游標 open

③、提取游標 fetch

④、關閉游標 close

declare

--類型定義

cursor c_job

is

select empno,ename,job,sal

from emp

where job=‘MANAGER‘;

--定義一個游標變量

c_row c_job%rowtype;

begin

open c_job;

loop

--提取一行數據到c_row

fetch c_job into c_row;

--判讀是否提取到值,沒取到值就退出

--取到值c_job%notfound 是false

--取不到值c_job%notfound 是true

exit when c_job%notfound;

dbms_output.put_line(c_row.empno||‘-‘||c_row.ename||‘-‘||c_row.job||‘-‘||c_row.sal);

end loop;

--關閉游標

close c_job;

end;

create or replace function comm.fun_datediff

(p_Component varchar2 ,

p_Subtranhend date,

p_Minuend date)

RETURN NUMBER

IS

/*************************************************************************/

/* 功 能:返回兩個日期之間的天、周、月、年等數量。 */

/* 入參說明: p_Component 時間元件,如年月日季度等等 */

/* p_Subtrahend 減數時間 */

/* p_Minuend 被減數時間 */

/*************************************************************************/

v_ReturnValue number ; -- 結果數值v_Component varchar2(10); --日期組件中間轉換形式,截取空格并且轉為大寫v_YearNum1 number; --減數年份數v_YearNum2 number; --被減數年份數v_MonthNum1 number; --減數月份數v_MonthNum2 number; --被減數月份數v_HourNum1 number; --減數時數v_HourNum2 number; --被減數時數v_MinuteNum1 number; --減數分鐘數v_MinuteNum2 number; --被減數分鐘數v_SecondNum1 number; --減數秒鐘數v_SecondNum2 number; --減數秒鐘數v_QuarterValue1 number; --減數季度數v_QuarterValue2 number; --被減數季度數v_WeekNum1 number; --減數與標準時間周差v_WeekNum2 number; --被減數與標準時間周差BEGIN v_Component := upper(ltrim(rtrim(p_Component))); if v_Component in (‘Y‘,‘YY‘,‘YEAR‘,‘YYYY‘) then --年情況 v_YearNum1 := to_number(to_char(p_Subtranhend,‘YYYY‘)); v_YearNum2 := to_number(to_char(p_Minuend,‘YYYY‘)) ; v_ReturnValue := v_YearNum2 - v_YearNum1; elsif v_Component in (‘M‘, ‘MM‘,‘MONTH‘, ‘MON‘) then --月情況--請注意,這個部分與oracle內置日期函數MONTH_BETWEEN()不同,忽略了日因素--而后者的兩個日期如都是所在月的最后一天,才返回整數,否則,返回分數--而且這個分數是以31天作為一個月進行計算的結果 v_YearNum1 := to_number(to_char(p_Subtranhend,‘YYYY‘)); v_YearNum2 := to_number(to_char(p_Minuend,‘YYYY‘)) ; v_MonthNum1 := to_number(to_char(p_Subtranhend,‘MM‘)); v_MonthNum2 := to_number(to_char(p_Minuend,‘MM‘)); v_ReturnValue := (v_YearNum2 - v_YearNum1)*12 + (v_MonthNum2 - v_MonthNum1); elsif v_Component in ( ‘D‘, ‘DD‘, ‘DAY‘) then --日情況--這里與兩個日期直接相減的oracle日期算術也不同,只返回整數天數;--而后者可以返回一天的幾分之幾(以小數形式表達) v_ReturnValue := to_date(to_char(p_Minuend,‘yyyy-mm-dd‘),‘YYYY-MM-DD‘) - to_date(to_char(p_Subtranhend,‘yyyy-mm-dd‘),‘YYYY-MM-DD‘); elsif v_Component in (‘H‘, ‘HH‘, ‘HOUR‘) then --時情況--第一步:求出天數 v_ReturnValue := (to_date(to_char(p_Minuend,‘yyyy-mm-dd‘),‘YYYY-MM-DD‘) - to_date(to_char(p_Subtranhend,‘yyyy-mm-dd‘), ‘YYYY-MM-DD‘));--第二步:求出時數 v_HourNum1 := to_number(to_char(p_Subtranhend,‘HH24‘)); v_HourNum2 := to_number(to_char(p_Minuend,‘HH24‘)); v_ReturnValue := v_ReturnValue*24 + (v_HourNum2 - v_HourNum1);elsif v_Component in (‘MI‘,‘MINUTE‘) then --分情況 --第一步:求出天數 v_ReturnValue := (to_date(to_char(p_Minuend,‘yyyy-mm-dd‘),‘YYYY-MM-DD‘) - to_date(to_char(p_Subtranhend,‘yyyy-mm-dd‘), ‘YYYY-MM-DD‘)); --第二步:求出時數 v_HourNum1 := to_number(to_char(p_Subtranhend,‘HH24‘)); v_HourNum2 := to_number(to_char(p_Minuend,‘HH24‘)); v_ReturnValue := v_ReturnValue*24 + (v_HourNum2 - v_HourNum1); --第三步:求出分鐘數 v_MinuteNum1 := to_number(to_char(p_Subtranhend,‘MI‘)); v_MinuteNum2 := to_number(to_char(p_Minuend,‘MI‘)); v_ReturnValue := v_ReturnValue*60 + (v_MinuteNum2 - v_MinuteNum1);elsif v_Component in(‘S‘, ‘SS‘, ‘SECOND‘) then --秒情況 --第一步:求出天數 v_ReturnValue := (to_date(to_char(p_Minuend,‘yyyy-mm-dd‘),‘YYYY-MM-DD‘) - to_date(to_char(p_Subtranhend,‘yyyy-mm-dd‘), ‘YYYY-MM-DD‘)); --第二步:求出時數 v_HourNum1 := to_number(to_char(p_Subtranhend,‘HH24‘)); v_HourNum2 := to_number(to_char(p_Minuend,‘HH24‘)); v_ReturnValue := v_ReturnValue*24 + (v_HourNum2 - v_HourNum1); --第三步:求出分鐘數 v_MinuteNum1 := to_number(to_char(p_Subtranhend,‘MI‘)); v_MinuteNum2 := to_number(to_char(p_Minuend,‘MI‘)); v_ReturnValue := v_ReturnValue*60 + (v_MinuteNum2 - v_MinuteNum1); --第四步:求出秒鐘數 v_SecondNum1 := to_number(to_char(p_Subtranhend,‘SS‘)); v_SecondNum2 := to_number(to_char(p_Minuend,‘SS‘)); v_ReturnValue := v_ReturnValue*60 + (v_SecondNum2 - v_SecondNum1);elsif v_Component in (‘Q‘,‘QQ‘,‘QUARTER‘) then --季度情況 v_YearNum1 := to_number(to_char(p_Subtranhend,‘YYYY‘)); v_YearNum2 := to_number(to_char(p_Minuend,‘YYYY‘)) ; v_QuarterValue1 := to_number(to_char(p_Subtranhend,‘Q‘)); v_QuarterValue2 := to_number(to_char(p_Minuend,‘Q‘)); v_ReturnValue := (v_YearNum2 - v_YearNum1)*4 + (v_QuarterValue2 - v_QuarterValue1);elsif v_Component in (‘W‘,‘WW‘,‘WK‘,‘WEEK‘) then --周情況--一周的起始日期應當為星期日--關于周差的計算,嘗試采用中間日期的方法--經查,‘1-1-2’即公元一年1月2日為周日,我們就可以用兩個時間分別與其相減求周差--兩個結果再相減,即可得到正確的數值 v_WeekNum1 := floor( (to_date(to_char(p_Subtranhend,‘YYYY-MM-DD‘),‘YYYY-MM-DD‘) - to_date(‘1-1-2‘,‘YYYY-MM-DD‘))/7); v_WeekNum2 := floor( (to_date(to_char(p_Minuend,‘YYYY-MM-DD‘),‘YYYY-MM-DD‘) - to_date(‘1-1-2‘,‘YYYY-MM-DD‘))/7); v_ReturnValue := v_WeekNum2 - v_WeekNum1;else v_ReturnValue := -88888;end if;RETURN v_ReturnValue;EXCEPTIONWHEN OTHERS THENRETURN -99999;--例外處理END fun_datediff;

總結

以上是生活随笔為你收集整理的oracle游标理解,oracle游标的使用方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。