面试题首页 > Oracle面试题

Oracle面试题

001Oracle中数字函数有哪些?

NVL( string1, replace_with) :如果string1为NULL,则NVL函数返回replace_with的值,否则返回string1的值,如果两个参数都为NULL ,则返回NULL。
SIGN(n) :该函数用于检测数字的正负.如果数字n小于0,则函数的返回值位-1;如果数字n的值等于0,则函数的返回值等于0,如果数字n大于0,则函数的返回值等于1。
CEIL(n) :该函数用于返回大于等于数字n的最小整数。
FLOOR(n):该函数用于返回小于等于数字n的最大整数。
MOD(m,n) :该函数用于返回两个数字相除后的余数.如果数字n为0,则返回结果为m。
ROUND(n,[m]) :该函数用于执行四舍五入运算;如果省略m,则四舍五入至整数位;如果m是负数,则四舍五入到小数点前m位;如果m是整数,则四舍五入至小数点后m位。
TRUNC(n,[m]) :该函数用于截取数字。如果省略数字m,则将数字n的小数部分截去;如果数字m是正数,则将数字n截取到小数点后的第m位;如果数字m是负数,则将数字n截取到小数点前m位。

002Oracle中字符函数有哪些?

TRIM([ { { LEADING | TRAILING | BOTH },截取特定字符串。
ASCII(char):该函数用于返回字符串首字符的ASCII值。
CHR(char) :该函数用于将ASCII码值转变为字符。
CONCAT:该函数用于连接字符串,其作用于连接操作符(||)完全相同。
LENGTH(char):该函数用于返回字符串的长度,如果字符串的类型为CHAR,则其长度包括所有的后缀空格:如果char是null,则返回null。

003Oracle中日期时间函数有哪些?

ADD_MONTHS(d,n):该函数用于返回特定日期时间 d 之后(或之前)的n个月所对应的日期时间(n为正整数表示之后,n为负整数表示之前)。
TRUNC(d,[fmt]) :该函数用于截取日期时间数据.如果fmt指定年度,则结果为本年度的1月1日;如果fmt指定月,则结果为本月1日。
MOTNS_BETWEEN(d1,d2):该函数用于返回d1和d2之间相差的月数.如果d1小于d2,则返回负数;如果d1和d2的天数相同,或都是月底,则返回整数;否则Oracle以每月31天为准来计算结果的小数部分。
NEXT_DAY(d,char):该函数用于返回指定日期后的第一个工作日(由char指定)所对应的日期。

004Oracle中转换函数有哪些?

TO_CHAR(data[,fmt[,nls_param]]) :该函数用于将日期值转变为字符串,其中fmt用于指定日期格式,nls_param用于指定nls参数。
TO_CHAR(n[,fmt[,nls_param]]):用于将数字值转换为VARCHAR2数据类型。
TO_DATE(char[,fmt[,nls_param]]):该函数用于将符合指定日期的函数转变为DATE类型的数值。

005Oracle中解码函数?

DECODE函数为Oracle专属。

006Oracle中字符串用什么符号链接?

1)使用符号“||”

SELECT '工号为'||FNumber || '的员工姓名为' || FName FROM T_Employee WHERE FName IS NOT NULL 

2)使用CONCAT()函数进行拼接,Oracle中的concat函数仅支持两个字符串进行拼接,如果要再多,可以嵌套使用。

SELECT CONCAT('工号:',FNumber) FROM T_Employee 

007Oracle是怎样分页的?

Oracle中使用rownum来进行分页, 这个是效率最好的分页方法,hibernate也是使用rownum来进行oralce分页的

select * from ( select rownum r,a from tabName where rownum <= 20 ) where r > 10

008Oracle中数据类型?

字符类型:CHAR, VARCHAR2, NVARCHAR2
      CHAR(12)表示包含12个字节的信息,CHAR字段最多可存储2000字节信息,如果创建表时不指定CHAR长 度,则默认为1。Oracle一个汉字占3个字节,一个字母或数字占1个字节,CHAR(12)可存储4个汉字。
      VARCHAR2最多可存储4000字节的信息,VARCHAR2(n)中的n表示的是字节
      NVARCHAR2也是最多4000字节信息,NVARCHAR2(n)中的n表示的是字符长度。
数字类型:NUMBER、 INTEGER
      NUMBER(P, S)中P表示的是有效数字的位数,最多不超过38,S表示小数的位数。
      INTEGER是NUMBER的子类型,等于NUMBER(38, 0),用来存储整数。
浮点数:BINARY_FLOAT类型、BINARY_DOUBLE类型
日期类型:DATE、TIMESTAMP
LOB类型:CLOB、BLOB、NCLOB
      CLOB, 最大长度4G
      BLOB, 存储二进制文件,如图像、声音、视频等,最大长度4G
      NCLOB, 存储UNICODE类型数据,最大长度4G
LONG, RAW, LONG RAW类型
      LONG存储变长字符串,最多2G字符数据
      LONG RAW存储2G二进制数据
      RAW存储二进制或字符类型数据

009Oracle中数据类型间相互转换?

--转换日期型:to_date(x,y) --y的长度要和x保持一致
    eg: to_date(sysdate,'yyyy-mm-dd hh24:mi:ss')
--转换字符型:to_char()    --可以单独去'yyyy''mm''dd'...
--转换数字型:to_number()

010删除重复行的rowid写法?

delete from grade t2
where rowid != (select max(rowid)
                   from grade t
                  where t.name = '张三'
                    and t.subject = 'chinese')
   and t2.name = '张三'
   and t2.subject = 'chinese';
commit;

011比较truncate和delete命令 ?

Truncate 和delete都可以将数据实体删掉,truncate 的操作并不记录到 rollback日志,所以操作速度较快,但同时这个数据不能恢复
Delete操作不腾出表空间的空间
Truncate 不能对视图等进行删除
Truncate是数据定义语言(DDL),而delete是数据操纵语言(DML)

012表空间是什么?

tablespace --表空间对应用户数据的存储,在创建用户时一般会指定表空间,如果没,默认为users.存储用户的所有对象。
表空间包括:数据段segemnet --数据区extents --数据块data block,一个数据文件只能存储在一个表空间中。

013Oracle中function和procedure的区别?

function为函数,procedure为存储过程。
1)函数是存储过程的一种。
2)函数可以没有参数,但是一定需要一个返回值,存储过程可以没有参数,不需要返回值
3)函数return返回值没有返回参数模式,存储过程通过out参数返回值, 如果需要返回多个参数则建议使用存储过程
4)在sql数据操纵语句中只能调用函数而不能调用存储过程。

014PL/SQL语法结构?

declare
    --声明变量
    变量 数据类型 := 初始值;
    变量 数据类型 := &提示字段;--自定义输入数据
    变量 表名.列名%type := 初始值;--使用某表的列定义数据类型
    变量 表名%type := 初始值;--将整个表的数据拿到自身,需要使用其中的数据类型时,表名.列名调用即可。
begin
    select...--sql取数语句
    into...--对应变量
    dbms_output.put_line();--数据输出格式
end;

015PL/SQL系列之if-esle语句结构?

declare
   --声明部分
begin
   --逻辑/操作部分
   select...
   
   if 条件1 and/or  条件2 then 
     操作1;
   elsif 条件3 and/OR 条件4 then 
     操作2;
   ...
   else
     其他操作;
   end if;   
end;

016PL/SQL系列之case-when语法结构

declare
   --声明部分
begin
   --逻辑/操作部分
   case
     when 条件1 and/or 条件2 then 
       操作1;
     when 条件3 and/OR 条件4 then 
       操作2;
     ...
     else
       其他操作;
   end case; 
end;

017PL/SQL系列之loop语法结构

declare
  --声明部分
begin
  --逻辑部分
  loop
    --循环体
    
    if 退出循环的条件 then
      exit;
    end if;   
    
    --退出循环的简写
    exit when 退出循环的条件;   
  end loop;
end;

018PL/SQL系列之while语法结构

declare
    --声明部分
begin
    while 进入循环的条件 loop
        --循环体
    endloop;
end;

019PL/SQL系列之for语法结构

declare
--声明部分
begin
    --逻辑部分
    for 循环变量 in 循环下限 .. 循环上限 loop
        --循环体
    endloop;
end;

020PL/SQL系列之显示游标

--声明显示游标的语法结构
declare
	--声明部分
  cursor 游标名 is
  select查询结果集; 
begin
  --使用显示游标(其实就是 使用这个游标中的数据):结合循环,依次获取到游标指向的结果集的每一行
  for 循环变量 in 游标名 loop
    --循环体
    --在循环体内可以依次使用结果集的每一行数据,使用的方式就是:循环变量.游标指向的结果集的列名
  end loop;
end;
--开发规范:游标名以 c_ 开头

021PL/SQL系列之存储过程

create [or replace]  procedure 存储过程名[(参数1 [参数类型] 数据类型[,参数2 [参数类型] 数据类型,...])]
is/* / as*/
  --声明/定义部分
begin
  --操作/逻辑部分
end;
--开发规范:存储过程名以 sp_ 开头

022PL/SQL系列之自定义函数

CREATE OR REPLACE FUNCTION FUN_函数名(参数1 [IN|OUT|IN OUT] 数据类型,参数2 [IN|OUT|IN OUT] 数据类型……)
  RETURN  返回结果的数据类型 
IS  /*|AS*/
BEGIN 
  自定义函数的的计算逻辑。
  RETURN  计算结果 ;   -- 函数的执行体中一定要包含 返回值 
END ;

目录

返回顶部