oracle有關游標的知識

2022-03-17 20:27:59 字數 3679 閱讀 4691

一:前言

今天我自己第二次寫游標,我擦,覺得自己在資料庫方面需要很大的提高啊。今天遇到三個問題,第乙個是oracle資料庫中的資料拆分的問題,這個我用regexp_substr來進行解決,第二個問題就是regexp_substr裡面的引數,我沒有成功的用select語句進行代替(我現在還不知道)。第三個是我寫完游標竟然不知道怎麼講獲取的值返回。蒼天啊,大地啊。

下面進行詳細說明;

二:1、regexp_substr函式

regexp_substr(string, pattern, position, occurrence, modifier):

第乙個引數:是需要進行匹配的字串;

第二個引數:進行匹配的正規表示式;

第三個引數:起始位置,從第幾個字元開始進行正規表示式的匹配。(預設為1)

第四個引數:表示匹配的第幾個。預設也為1;

第五個引數:模式(「i」表示不區分大小寫進行檢索,"c"是區分大小寫進行檢索。預設的是「c」);

然後就是獲取到我們自己想要查分後的結果:

、上面的拆分就說到這,基本上就是照葫蘆畫瓢吧。

2、就是我想說的我想把那個第乙個引數string用select 語句改寫,但是沒有改寫成功。

select regexp_substr('

3w,3x,5,57,58,0

','[^,]+

',1,level,'

i') as

strfrom

dual

connect

bylevel

<=length('

3w,3x,5,57,58,0')

-length(regexp_replace('

3w,3x,5,57,58,0

',',

',''))+

1;

結果失敗了。希望誰要是成功了告訴我下。

3、就是我現在得到了我想要的結果後,我們根據這拆分的資料在進行迴圈查詢得到我們想要的資料,我得到是把迴圈的資料**一起以字串的形式返回。

所以這裡我又要用到游標進行迴圈。

先給出錯誤的**,那時我只是先寫了游標,自己不知道怎麼返create

orreplace

function get_bclb(str

invarchar2,v_group_code in

varchar2

)

create

orreplace

function get_bclb(str

invarchar2,v_group_code in

varchar2

)return

varchar2

isv_names

varchar2(4000

);declare

v_code pf_common_config.code

%type;

n varchar2(2000

);

cursor

c_cursor

isselect regexp_substr(str,'

[^,]+

',1,level,'

i') as

strfrom

dual

connect

bylevel

<=length(str

)-length(regexp_replace(str,'

,',''))+1;

begin

open

c_cursor;

loop

fetch c_cursor into

v_code;

exit

when c_cursor%

notfound;

select c.name into n from pf_common_config c where c.code = v_code and c.group_code =

'bclb';

--dbms_output.put_line('轉換後的資料:'|| v_code||'='||n);

v_names := v_names ||n||',

';endloop;

close

c_cursor;

--dbms_output.put_line('轉換後的資料:'||v_names);

return

v_names;

end get_bclb;

最後修改成功的**是:

create

orreplace

function get_bclb(str

invarchar2,v_group_code in

varchar2

)return

varchar2

isv_names

varchar2(4000

);n

varchar2(2000

);v_code

varchar2(100);

cursor c_cursor is

select regexp_substr(str,'

[^,]+

',1,level,'

i') as

strfrom

dual

connect

bylevel

<= length(str) - length(regexp_replace(str,'

,',''))+1;

begin

open

c_cursor;

loop

fetch c_cursor into

v_code;

exit

when c_cursor%

notfound;

select c.name into n from pf_common_config c where c.code = v_code and c.group_code =

v_group_code;

--dbms_output.put_line('轉換後的資料:'|| v_code||'='||n);

v_names := v_names ||n||',

';endloop;

close

c_cursor;

--dbms_output.put_line('轉換後的資料:'||v_names);

return

v_names;

end get_bclb;

幾天還有個函式:在計算年齡是用到了,自己就去查了下。trunc((sysdate-csrq)/365,0) as age,這裡就表是取整,如果是trunc((sysdate-csrq)/365,2) 就表示兩位小數。

三:自己現在在實習,每天雖然做的事情不是很多,我現在在做報表,但是我還是覺得自己是碼農啊,這不是我想幹的,我想學很多我自己不會的知識,而不只是在這天天敲**。努力加油。學習,最近去學學android吧。go!go!go!

ORACLE游標的應用

在oracle資料庫中,可以使用游標瀏覽資料 更新資料和刪除資料,接下來列舉以幾個簡單的例子 通過使用游標既可以逐行檢索結果集中的記錄,又可以更新或刪除當前游標行的資料如果要通過游標更新或刪除資料,在定義游標時必須要帶有for update子句其語句格式如下 cursor cursor name i...

oracle游標的使用

當select語句從資料庫中返回的記錄多餘一條時,就可以使用游標 cursor 游標可以理解為一次訪問乙個的一組記錄。select語句將列提取到游標中,然後根據游標取得記錄。使用游標時需要遵從以下的5個步驟 1 宣告一些變數,用於儲存select語句返回列值 2 宣告游標,並制定select語句 3...

Oracle游標的問題

游標 cursor 是oracle系統在記憶體中開闢的乙個工作區,在其中存放select語句返回的查詢集 他是乙個查詢結果集,相當於快取 游標內有指標 在游標所定義的工作區中,存在著乙個指標 pointer 在初始狀態它指向查詢結果的首記錄。當指標放置到某行後,即可對該行資料進行操作。對游標的操作有...