Oracle 常用函数总结

1.ascii(‘A’) 返回与指定的字符对应的十进制数
2.chr(65) 给出整数,返回对应的字符;
3. concat(‘010-‘,’88888888’) 连接字符串
4.initcap(‘smith’) 返回字符串并将字符串的第一个字母变为大写;
5.instr(C1,C2,I,J) 在字符串C1中搜索字符串C2,返回发现指定的字符的位置;
I搜索的开始位置,默认为1。 J出现的位置,默认为1。
6.length(name) 返回字符串的长度;
7. lower(‘AaBbCcDd’) 返回字符串,并将所有的字符小写
8. upper(‘AaBbCcDd’) upper from dual;返回字符串,并将所有的字符大写
9.rpad和lpad(粘贴字符) lpad(rpad(‘gao’,10,’‘),17,’‘) 得**gao**
10.ltrim和rtrim和trim 删除字符两边出现的空格。
11. substr (string,start,count)取子字符串,从start开始,取count个
12. replace (‘string’,’s1’,’s2’) string希望被替换的字符或变量,s1被替换的字符串
s2要替换的字符串
13. soundex 返回一个与给定的字符串读音相同的字符串
14.TRIM(’s’ from ‘string’) 剪掉前面和后面的字符
15. abs(100) 返回指定值的绝对值
16. acos(-1) 给出反余弦的值
17. asin(0.5) 给出反正弦的值
18. atan(1) 返回一个数字的反正切值
19. ceil(3.1415927) 返回大于或等于给出数字的最小整数
20. cos(-3.1415927) 返回一个给定数字的余弦
21. cosh(20) 返回一个数字反余弦值
22. exp(2) 返回一个数字e的n次方根
23. floor(2345.67) 对给定的数字取整数
24. ln(1) 返回一个数字的对数值
25.log(n1,n2) 返回一个以n1为底n2的对数
26.mod(n1,n2) 返回一个n1除以n2的余数
27.power(n1,n2) 返回n1的n2次方根
28. round和trunc 按照指定的精度进行舍入
29.sign(n) 取数字n的符号,大于0返回1,小于0返回-1,等于0返回0
30. sin(1.57079) 返回一个数字的正弦值
31. sin(20) 返回双曲正弦的值
32.sqrt(n) 返回数字n的根
33. tan(n) 返回数字n的正切值
34. tanh(n) 返回数字n的双曲正切值
35. trunc (124.16666,2) 按照指定的精度截取一个数
36. add_months 增加或减去月份
37. last_day(sysdate) 返回日期的最后一天
38. months_between (date2,date1) 给出date2-date1的月份
39. new_time (date,’this’,’that’) 给出在this时区=other时区的日期和时间
40. next_day (date,’day’) 给出日期date和星期x之后计算下一个星期的日期
41. sysdate 用来得到系统的当前日期
42. chartorowid 将字符数据类型转换为ROWID类型
43. convert (c,dset,sset)
44. hextoraw 将一个十六进制构成的字符串转换为二进制
45. rawtohext 将一个二进制构成的字符串转换为十六进
46. rowidtochar 将ROWID数据类型转换为字符类型
47. to_char (date,’format’)
48. to_date(string,’format’) 将字符串转化为ORACLE中的一个日期
49. to_multi_byte(‘高’) 将字符串中的单字节字符转化为多字节字符
50. to_number(‘1999’) 将给出的字符转换为数字
51. bfilename (dir,file)
52. convert(‘x’,’desc’,’source’) 将x字段或变量的源source转换为desc
53. dump(s,fmt,start,length)
54. empty_blob()和empty_clob() 这两个函数都是用来对大数据类型字段进行初始化操
作的函数
55. greatest(‘AA’,’AB’,’AC’) 返回一组表达式中的最大值,即比较字符的编码大小.
56. least(‘啊’,’安’,’天’) 返回一组表达式中的最小值
57. uid 返回标识当前用户的唯一整数(user_id=uid)
58. user 返回当前用户的名字
59. userevn 返回当前用户环境的信息,opt可以是:
ENTRYID,SESSIONID,TERMINAL,ISDBA,LABLE,LANGUAGE,CLIENT_INFO,LANG,VSIZE
ISDBA 查看当前用户是否是DBA如果是则返回true
60.avg(DISTINCT|ALL) all表示对所有的值求平均值,distinct只对不同的值求平均值
61.max(DISTINCT|ALL) 求最大值,DISTINCT表示对不同的值求最大值,相同的只取一次
62.min(DISTINCT|ALL) 求最小值,DISTINCT表示对不同的值求最小值,相同的只取一次
63. stddev (distinct|all) 求标准差,DISTINCT表示只对不同的值求标准差
64. variance (DISTINCT|ALL) 求协方差
65. group by主要用来对一组数进行统计
66. having 对分组统计再加限制条件
67.ORDER BY 用于对查询到的结果进行排序输出
68.nvl(expr1,expr2):如果oracle第一个参数为空那么显示第一个参数的值,如果第一个参数的值不为空,则显示第一个参数本来的值
69.nullif(”,’0’) 如果为空,则显示0 —》类似nvl
70.to_multi_byte(c) 转为全角
71.to_single_byte(c) 转为半角
72.decode(条件,值1,返回值1,值2,返回值2,值n,返回值n,缺省值):
–select decode(条件,值1,返回值1,值2,返回值2,值n,返回值n,缺省值);
–参数说明:条件:也就是说是一个可以有多个值的变量;值1:如果条件等于值1,那么结果就是返回值1
–select decode(sign(变量1-变量2),-1,变量1,变量2) from dual;
–sign(变量1-变量2):根据某个值是0、整数还是负数,分别返回0、1、-1
select decode(sign(40-20),-1,10,1,20,0,30,40) from dual;

select power(3,2) from dual;–3的2次方
select last_day(sysdate) from dual;–当前月的最后一天
select add_months(sysdate,1) from dual;–当前月份+1
select add_months(sysdate,-2) from dual;–当前月份-2
select months_between(add_months(sysdate,2),sysdate) from dual;–当前月份+2 得到的月份和当前月份的相差的月份
select next_day(sysdate,’星期四’) from dual;
select to_multi_byte(‘xia’) from dual;–将字符串中的单字节转换为多字节字符串
select user from dual;–返回当前用户的名字
select uid from dual;–返回当前用户的唯一整数(user_id = uid)

73.distinct(列名) :去除当前列的重复数据
74.wm_concat(列名) :该函数可以把列值以”,”号分隔起来,并显示成一行
75.sys_guid() :生成32为随机数
76.coalesce(参数1,参数2,参数3,参数4,….) :如果参数1为空就返回参数2的值,如果参数1和参数2都为空就返回参数3的值,如果参数1、参数2和参数3都为空就返回参数4的值。
77.select username,password from dba_users;–查询用户的账号、密码
78.grant select, insert, update, delete on MY_TASK_TAB to scott;–授权
79.账户/用户/密码
create user 用户名 identified by 口令;–创建用户
grant create session to 用户名;–创建账号需授权session 否则登不上
alter user 用户名 identified by 口令;–修改密码
drop user 用户名;–删除用户
alter user 账号 identified by 原始密码 account unlock;–解锁用户
80.获取电脑主机名
Select sys_context(‘userenv’,’host’) from dual;
81.获取电脑IP
Select sys_context(‘userenv’,’ip_address’) from dual;
82.查询当前有哪些用户
Select distinct owner from all_objects;
83.查询用户账号、密码
Select username,password from dba_users;
84.查询表中有什么字段
Select * from user_tab_columns where table_name=‘MY_TASK_TAB’;–表名一定要大写
85.dbms_output系统包测试:
begin
dbms_output.put_line(‘hello world !’);
–上述 输出:
–hello world !


dbms_output.put(‘a’);
dbms_output.put(‘b’);
dbms_output.new_line;
–上述 输出:
–ab


dbms_output.put_line(to_char(sysdate,’yyyy:mm:dd:hh24:mi:ss’));
dbms_lock.sleep(2);
dbms_output.put_line(to_char(sysdate,’yyyy:mm:dd:hh24:mi:ss’));
–上述 输出: (程序触发后延迟两秒同时输出)
–2017:11:16:15:43:34
–2017:11:16:15:43:36
end;
86.
–wm_concat(列名) 使用’,’号将此列中的数据拼接起来
select replace(wm_concat(m.my_task_id),’,’,’|’) from my_task_tab m;

–随机32位数字
select sys_guid() from dual;

SELECT regexp_substr(‘1234567890,Redwood Shores, sdfasdff,’, ‘, [^,]+,’) 结果
FROM dual;

/*regexp_substr(String, pattern, position, occurrence, modifier)
__srcstr :需要进行正则处理的字符串
__pattern :进行匹配的正则表达式
__position :起始位置,从第几个字符开始正则表达式匹配(默认为1)
__occurrence :标识第几个匹配组,默认为1
__modifier :模式(’i’不区分大小写进行检索;’c’区分大小写进行检索。默认为’c’。)*/

select regexp_substr(‘34,56,-23’, ‘[^,]+’, 1, LEVEL, ‘i’) from dual connect by level <= 3;

select regexp_substr(‘34,56,-23’, ‘[^,]+’, 1, LEVEL, ‘i’) AS 结果
from dual connect by LEVEL <= length(‘34,56,-23’) - length(regexp_replace(‘34,56,-23’, ‘,’, ”)) + 1;

select level from dual connect by level <= 10;
select level from dual connect by 1 = 1;
select length(‘34,56,-23’) from dual;
87.
select regexp_substr(‘1+2’,’[0-9]+’) from dual; –截取结果为:1

select length(regexp_substr(‘1+2’,’[0-9]+’)) from dual;–前 长度为:1

select regexp_substr(‘1+2’,’\D’) from dual;–符号 截取结果为:+
select substr(‘1+2’,
instr(‘1+2’,regexp_substr(‘1+2’,’\D’))+1,
length(‘1+2’) - length(regexp_substr(‘1+2’, ‘[0-9]+’)) -
length(regexp_substr(‘1+2’, ‘\D’)))
from dual;–截取结果为:2
89.发送邮件

PROCEDURE send_mail(
    p_recipient VARCHAR2,-- 邮件接收人
    p_subject   VARCHAR2,-- 邮件标题
    p_message   VARCHAR2 -- 邮件正文
)
IS
    --下面四个变量请根据实际邮件服务器进行赋值
    v_mailhost  VARCHAR2(30) :='mail.SMNPC.com.cn' ;     --SMTP服务器地址
    v_user      VARCHAR2(30) :='[email protected]' ; --登录SMTP服务器的用户名
    v_pass      VARCHAR2(20) :='**********' ;          --登录SMTP服务器的密码
    v_sender    VARCHAR2(50)  :='[email protected]' ;--发送都邮箱,一般与 ps_user 对应
    v_conn  UTL_SMTP.connection; --到邮件服务器的连接
    v_msg varchar2(4000); --邮件内容
BEGIN
    v_conn := UTL_SMTP.open_connection(v_mailhost, 25);

    UTL_SMTP.ehlo(v_conn, v_mailhost);--是用 ehlo() 而不是 helo() 函数
    --否则会报:ORA-29279: SMTP 永久性错误: 503 5.5.2 Send hello first.
    /*UTL_SMTP.command(v_conn,'AUTH LOGIN' );   -- smtp服务器登录校验
        UTL_SMTP.command(v_conn,UTL_RAW.cast_to_varchar2(UTL_ENCODE.base64_encode(UTL_RAW.cast_to_raw(v_user))));
        UTL_SMTP.command(v_conn,UTL_RAW.cast_to_varchar2(UTL_ENCODE.base64_encode(UTL_RAW.cast_to_raw(v_pass))));
        */
        UTL_SMTP.mail(v_conn, v_sender);    --设置发件人
        UTL_SMTP.rcpt(v_conn, p_recipient); --设置收件人
        -- 创建要发送的邮件内容 注意报头信息和邮件正文之间要空一行
        v_msg := 'Date:'|| TO_CHAR(SYSDATE, 'dd mon yy hh24:mi:ss' )
        || UTL_TCP.CRLF ||'From: ' || v_sender || '<' || v_sender ||'>'
        || UTL_TCP.CRLF ||'To: '   || p_recipient || '<'|| p_recipient || '>'
        || UTL_TCP.CRLF ||'Subject: ' || p_subject
        || UTL_TCP.CRLF || UTL_TCP.CRLF -- 这前面是报头信息
        || p_message;   -- 这个是邮件正文
        UTL_SMTP.open_data(v_conn);--打开流
        UTL_SMTP.write_raw_data(v_conn, UTL_RAW.cast_to_raw(v_msg));--这样写标题和内容都能用中文
        UTL_SMTP.close_data(v_conn);--关闭流
        UTL_SMTP.quit(v_conn);--关闭连接
EXCEPTION
WHEN OTHERS THEN
     DBMS_OUTPUT.put_line(DBMS_UTILITY.format_error_stack);
     DBMS_OUTPUT.put_line(DBMS_UTILITY.format_call_stack);
END send_mail;

90.–查询数据库用户代码行数
select * from all_source where owner = ‘SJM’;– and type = ‘PACKAGE BODY’;

91.–查看数据库被删除的表或者索引
select * from user_recyclebin;
92、 一次性插入多条数据
insert all into my_task_tab
(my_task_id, my_task_type, my_task_num, rowversion)
values
(888, ‘test’, 888, sysdate) into my_task_tab
(my_task_id, my_task_type, my_task_num, rowversion)
values
(999, ‘test’, 999, sysdate)
select 1 from dual;
92、
–获取表的字节数 (指的是分配给表的空间数)
select segment_name,bytes from user_segments where segment_type = ‘TABLE’;
–查看每个表空间的大小(字节数)
select tablespace_name,sum(bytes)/1024/1024 from dba_segments group by tablespace_name;
–查看剩余表空间大小
select tablespace_name 表空间,sum(blocks*8192/1000000) 剩余空间M from dba_free_space group by tablespace_name;
–查看数据文件的大小
select file_name,tablespace_name,bytes/1024/1024||’M’ “size” from dba_data_files;

–查看指定表实际使用空间
select num_rows * avg_row_len from user_tables where table_name = ‘RES_RECEIPT_NO_LINE_TAB’;

–临时表存放路径
select a.FILE_NAME from dba_temp_files a;

–查看谁在用临时段
SELECT se.username,
se.SID,
se.serial#,
se.sql_address,
se.machine,
se.program,
su.TABLESPACE,
su.segtype,
su.CONTENTS
FROM v sessionse,v s e s s i o n s e , v sort_usage su
WHERE se.saddr = su.session_addr;

–查询临时表空间占比及大小
SELECT d.tablespace_name “Name”,
d.status “Status”,
TO_CHAR(NVL(a.BYTES / 1024 / 1024, 0), ‘99,999,990.90’) “Size (M)”,
TO_CHAR(NVL(a.BYTES - NVL(f.BYTES, 0), 0) / 1024 / 1024,
‘99999999.99’) USE,
TO_CHAR(NVL((a.BYTES - NVL(f.BYTES, 0)) / a.BYTES * 100, 0),
‘990.00’) “Used %”
FROM SYS.dba_tablespaces d,
(SELECT tablespace_name, SUM(BYTES) BYTES
FROM dba_data_files
GROUP BY tablespace_name) a,
(SELECT tablespace_name, SUM(BYTES) BYTES
FROM dba_free_space
GROUP BY tablespace_name) f
WHERE d.tablespace_name = a.tablespace_name(+)
AND d.tablespace_name = f.tablespace_name(+)
AND NOT
(d.extent_management LIKE ‘LOCAL’ AND d.CONTENTS LIKE ‘TEMPORARY’)
UNION ALL
SELECT d.tablespace_name “Name”,
d.status “Status”,
TO_CHAR(NVL(a.BYTES / 1024 / 1024, 0), ‘99,999,990.90’) “Size (M)”,
TO_CHAR(NVL(t.BYTES, 0) / 1024 / 1024, ‘99999999.99’) USE,
TO_CHAR(NVL(t.BYTES / a.BYTES * 100, 0), ‘990.00’) “Used %”
FROM SYS.dba_tablespaces d,
(SELECT tablespace_name,
SUM(BYTES) BYTES FROM dba_temp_files GROUP BY tablespace_name) a,
(SELECT tablespace_name,
SUM(bytes_cached) BYTES FROM v$temp_extent_pool GROUP BY tablespace_name) t
WHERE d.tablespace_name = a.tablespace_name(+)
AND d.tablespace_name = t.tablespace_name(+)
AND d.extent_management LIKE ‘LOCAL’
AND d.CONTENTS LIKE ‘TEMPORARY’;

你可能感兴趣的:(oracle,plsql,pl-sql)