文档详情

oracle数据工程师面试题(最新精选汇编)-(最新版-已修订).pdf

发布:2020-09-11约1.84千字共2页下载文档
文本预览下载声明
问题:1 假设有一个表 T_Str 中有两列,类型都为varchar2 ,col1 为主键: col1 col2 aa 3,1,4,6,8,0 bb 5,9,11,4,7,4 现要将 col2 字符串中的数值升序排序输出: col1 col2 aa 0,1,3,4,6,8 bb 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_STRING CREATE OR REPLACE FUNCTION 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 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 WHEN 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 信息 (数据)如下 1 NULL 2 3 8 …. 请用 SQL 语句求如下的结果集(一列): 0 1 2 3 4 ….. 请使用一条语句得到结果(不得使用子查询) 答案: select nvl(i,0) from T order by nvl(i,0);
显示全部
相似文档