標籤:android style blog http color os io 資料
一:前言
今天我自己第二次寫遊標,我擦,覺得自己在資料庫方面需要很大的提高啊。今天遇到三個問題,第一個是oracle資料庫中的資料拆分的問題,這個我用regexp_substr來進行解決,第二個問題就是regexp_substr裡面的參數,我沒有成功的用select語句進行代替(我現在還不知道)。第三個是我寫完遊標竟然不知道怎麼講擷取的值返回。蒼天啊,大地啊。
下面進行詳細說明;
二:
1、regexp_substr函數
REGEXP_SUBSTR(String, pattern, position, occurrence, modifier):
第一個參數:是需要進行匹配的字串;
第二個參數:進行匹配的Regex;
第三個參數:起始位置,從第幾個字元開始進行Regex的匹配。(預設為1)
第四個參數:表示匹配的第幾個。預設也為1;
第五個參數:模式(“i”表示不區分大小寫進行檢索,"c"是區分大小寫進行檢索。預設的是“c”);
然後就是擷取到我們自己想要查分後的結果:
、
上面的拆分就說到這,基本上就是照葫蘆畫瓢吧。
2、就是我想說的我想把那個第一個參數string用select 語句改寫,但是沒有改寫成功。
select regexp_substr(‘3W,3X,5,57,58,0‘,‘[^,]+‘,1,level,‘i‘) as str from dual connect by level <=length(‘3W,3X,5,57,58,0‘)-length(REGEXP_REPLACE(‘3W,3X,5,57,58,0‘,‘,‘,‘‘))+1;
結果失敗了。希望誰要是成功了告訴我下。
3、就是我現在得到了我想要的結果後,我們根據這拆分的資料在進行迴圈查詢得到我們想要的資料,我得到是把迴圈的資料連載一起以字串的形式返回。
所以這裡我又要用到遊標進行迴圈。
先給出錯誤的代碼,那時我只是先寫了遊標,自己不知道怎麼返create or replace function get_bclb(str in varchar2,v_group_code in varchar2)
create or replace function get_bclb(str in varchar2,v_group_code in varchar2)return varchar2 is v_names varchar2(4000);declare v_code pf_common_config.code%TYPE;n varchar2(2000); CURSOR c_cursor is select regexp_substr(str,‘[^,]+‘,1,level,‘i‘) as str from dual connect by level <=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||‘,‘; end loop; close c_cursor; -- DBMS_OUTPUT.PUT_LINE(‘轉換後的資料:‘||v_names); return v_names; end get_bclb;
最後修改成功的代碼是:
create or replace function get_bclb(str in varchar2,v_group_code in varchar2)return varchar2 isv_names varchar2(4000);n varchar2(2000);v_code varchar2(100); CURSOR c_cursor isselect regexp_substr(str,‘[^,]+‘,1,level,‘i‘) as str from dualconnect by level <= 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||‘,‘; end loop; 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!