《oracle数据工程师面试题》由会员分享,可在线阅读,更多相关《oracle数据工程师面试题(4页珍藏版)》请在金锄头文库上搜索。
1、问题:1假设有一个表T_Str中有两列,类型都为varchar2,col1为主键:col1 col2-aa 3,1,4,6,8,0bb 5,9,11,4,7,4现要将col2字符串中的数值升序排序输出:col1 col2-aa 0,1,3,4,6,8bb 4,4,5,7,9,11解答:-创建表并插入测试数据create table t_str(col1 varchar2(1000),col2 varchar2(1000);insert into t_str values(aa,5,9,11,4,7,4);-建立函数F N_SPLIT_STRINGCREATE OR REPLACE FUNCTI
2、ON FN_SPLIT_STRING(P_STR VARCHAR2) RETURN T_STRING AS PV_STR T_STRING := T_STRING(); PV_DELIMITER VARCHAR2(10) := ,; PV_LEN INTEGER := 0; PV_LOOP INTEGER := 0; PV_STARTPOS INTEGER := 0; PV_ENDPOS INTEGER := 0; PV_COLLIST VARCHAR2(1000);BEGIN PV_LEN := LENGTH(PV_DELIMITER); PV_COLLIST := P_STR; LOOP
3、PV_ENDPOS := INSTR(PV_COLLIST, PV_DELIMITER); PV_LOOP := PV_LOOP + 1; PV_STR.EXTEND(1); IF (PV_ENDPOS) 0 THEN PV_STR(PV_LOOP) := SUBSTR(PV_COLLIST, 0, PV_ENDPOS - 1); PV_STARTPOS := PV_ENDPOS + PV_LEN; PV_COLLIST := SUBSTR(PV_COLLIST, PV_STARTPOS); ELSE PV_STR(PV_LOOP) := PV_COLLIST; END IF; EXIT WH
4、EN PV_ENDPOS = 0; END LOOP; RETURN PV_STR;END;-测试结果DECLARE V_A VARCHAR2(100) := NULL;BEGIN FOR MYCUR IN (SELECT COL1, COL2 FROM T_STR) LOOP FOR MYCUR1 IN (SELECT COLUMN_VALUE A FROM TABLE(FN_SPLIT_STRING(MYCUR.COL2) ORDER BY TO_NUMBER(A) DESC) LOOP V_A := MYCUR1.A | , | V_A; END LOOP; DBMS_OUTPUT.PUT_LINE(MYCUR.COL1 | | V_A); V_A := NULL; END LOOP;END;问题:2有表T,该表只有一列i,该列i信息(数据)如下1NULL238.请用SQL语句求如下的结果集(一列):01234.请运用一条语句得到结果(不得运用子查询)答案:select nvl(i,0) from T order by nvl(i,0);