給你個(gè)范例:
目前創(chuàng)新互聯(lián)已為超過千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、雅安服務(wù)器托管、網(wǎng)站托管、企業(yè)網(wǎng)站設(shè)計(jì)、長汀網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
CREATE OR REPLACE FUNCTION f_jax_str2tab(p_str IN VARCHAR2,
p_sep varchar2 default ','
) RETURN type_jax_varc2tab IS
/******************************************************************
Ver1.0 Created by jaxzhang on 2009-06-08
把字符串(1*2*3*4*5)轉(zhuǎn)換為內(nèi)存表形式
create or replace type type_jax_varc2tab is table of varchar2(2000);
測試用例:SELECT * FROM TABLE(f_jax_str2tab('1*2*3*4*5','*'));
******************************************************************/
v_str varchar2(2000);
v_cnt NUMBER ;
v_numtab type_jax_varc2tab := type_jax_varc2tab(); --返回內(nèi)存表
BEGIN
select decode(substr(p_str,-1),p_sep,p_str,p_str || p_sep) into v_str from dual;
select length(v_str) - length(REPLACE(v_str, p_sep)) into v_cnt from dual;
FOR i IN 1 .. v_cnt LOOP
v_numtab.EXTEND;
v_numtab(i) := substr(v_str, 1, instr(v_str, p_sep) - 1);
v_str := substr(v_str, instr(v_str,p_sep) + 1);
END LOOP;
RETURN v_numtab;
EXCEPTION
WHEN OTHERS THEN
v_numtab.DELETE;
END;
oracle中sum分組取值/匯總值用如下方法。
如emp表中有如下數(shù)據(jù):
現(xiàn)要按deptno分組,求每組中sal的值/匯總值,可用如下語句:
select?deptno,sum(sal)/(select?sum(sal)?from?emp)?from?emp?group?by?deptno;
查詢結(jié)果:
PL/SQL中是沒有數(shù)組的概念,他的集合數(shù)據(jù)類型和數(shù)組是相似的,所以可以用ARRAY來解決問題。
第一步:創(chuàng)建你所需的ARRAY類型
Create?Type?varray_answer as?varray(10)?of?varchar2(50);
第二步:把你的sf_split_string
函數(shù)返回的類型設(shè)置為varray_answer
第三步:
select?era_id,?us_id,?sf_split_string(answer,?':')?as?listanswer,?tu.name
from?evt_result_answer,?tuser?tu
where?e_id?=?37200
and?ques_id?=?94603
and?tu.id?=?evt_result_answer.us_id
/**判斷是否含有某個(gè)值*/
and?listanswer.EXISTS('2');
集合方法
pl/sql預(yù)定義了在varray 和嵌套表實(shí)例上進(jìn)行調(diào)用的方法。這些方法能在集合上執(zhí)行一定的功能。
EXISTS
?
該函數(shù)返回集合中第一個(gè)元素的索引,如果集合為空,返回NULL
?
Collection.EXISTS(index)
COUNT
?
該函數(shù)集合元素的數(shù)目
?
Collection.COUNT
DELETE
?
該過程從嵌套表中刪除一個(gè)或多個(gè)或合部元素
?
Table_name.DELETE 刪除所有元素
Table_name.delete(index)刪除指定索引的記錄
Table_name.delete(start_index,end_index)刪除區(qū)間內(nèi)元素
等方法