oracle数据工程师面试题(最新精选汇编)-(最新版-已修订).pdf
文本预览下载声明
问题: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);
显示全部