当前位置:文档之家› oracle函数大全

oracle函数大全

目录

oralce函数大全 (6)

1.求字持串的长度LENGTH (6)

2.使用SUBSTR函数从字符串中提取子串 (6)

3.在字符串中查找模式 (7)

4.替换字符串的一部分 (7)

5.删除字符串的空格 (7)

6.LPAD左填充函数 (8)

7.改变字符串的大小写 (8)

8.使用DECODE函数(值转换函数)转换字符串 (8)

9.转换字符串为ASCII值 (8)

10.当前日期和时间 (8)

11.转换日期为字符串 (9)

12.转换字符串为日期 (9)

13.日期和时间 (9)

14.计算两个日期的差值 (9)

15.在Insert\Update等操作 (9)

16.格式化数值字段 (9)

17.将字符串转换成数字 (9)

18.内部统计函数 (10)

19.四舍五入函数和截取函数 (10)

20.求最大或最小值 (10)

21.替换NULL (10)

22.内部聚合函数 (10)

23.EXISTS (10)

24.SELECT语句的集合操作 (10)

26.创建一个简单的视图 (11)

28.用%TYPE声明一个变量 (11)

29.用%ROWTYPE声明一个变量 (11)

30.一些常见的控制结构 (12)

33.系统视图USER_SOURCE,保存有过程、函数、包等 (14)

34.SELECT和存储函数: (15)

35.附加PL/SQL数据类型 (15)

37.SQLCODE和SQLERRM (15)

38.使用游标的步骤 (15)

39.说明游标 (16)

41.从游标中取出行 (16)

42.关闭游标 (16)

44.在oracle数据库中查询结果的行号使用伪列ROWNUM表示(从1开始)。!!!数据库分页可以使用它!!! (16)

ABS (17)

ACOS (17)

ADD_MONTHS (18)

Ascii (18)

ASIN (18)

ATAN (19)

ATAN2 (19)

A VG (19)

BFILENAME(dir,file) (19)

CEIL (19)

CHARTOROWID (19)

CHR (20)

CONCAT (20)

CONVERT(c,dset,sset) (20)

COS (20)

COSH (21)

COUNT (21)

CURRENT_DA TE (21)

CURRENT_TIMESTAMP (22)

DBTIMEZONE (22)

DECODE (22)

DEREF (22)

DUMP(s,fmt,start,length) (22)

EMPTY_BLOB()和EMPTY_CLOB() (22)

EXP (22)

EXTRACT (23)

FLOOR (23)

FROM_TZ (23)

GREATEST (23)

GROUPING (24)

HEXTORAW (24)

INITCAP (24)

INSTR(C1,C2,I,J) (24)

INSTRB (24)

LAST_DAY (24)

LEAST (25)

LENGTH (25)

LENGTHB (25)

LN (25)

LOCALTIMESTAMP (26)

LOG(n1,n2) (26)

LOWER (26)

LTRIM (27)

MAKE_REF (27)

MAX (27)

MIN (27)

MOD(n1,n2) (27)

MONTHS_BETWEEN(date2,date1) (27)

NEW_TIME(date,'this','that') (28)

NEXT_DAY(date,'day') (28)

NEW_TIME (28)

NLSSORT (29)

NLS_CHARSET_DECL_LEN (29)

NLS_CHARSET_ID (29)

NLS_CHARSET_NAME (29)

NLS_INICAP (29)

NLS_LOWER (29)

NLS_UPPER (29)

NVL (29)

POWER (29)

RAWTOHEX (30)

REF (30)

REFTOHEX (30)

REPLACE('string','s1','s2') (30)

ROUND (30)

ROWID (31)

ROWIDTOCHAR (31)

RPAD (粘贴字符) (31)

RTRIM (31)

SESSIONTIMEZONE (31)

SIGH (32)

SIGN (32)

SIN (32)

SINH (32)

SOUNDEX (32)

SQRT (33)

STDDEV (33)

SUBSTR(string,start,count) (33)

SUBSTRB (34)

SUM (34)

SYS_EXTRACT_UTC (34)

SYSDATE (34)

SYS_CONTEXT (34)

SYS_GUID (35)

SYSTIMESTAMP (35)

TANH (36)

TO_CHAR(date,'format') (36)

TO_DATE(string,'format') (38)

TO_LOB (38)

TO_MULTI_BYTE (38)

TO_NUMBER (38)

TO_SINGLE_BYTE (38)

TO_TIMESTAMP (39)

TO_TIMESTAMP_TZ (39)

TO_YMINTERV AL (39)

TRANSLATE(x,y,z) (39)

TRIM(keyword 's' from 'string') (39)

TRUNC (39)

TZ_OFFSET (40)

UID (40)

UPPER (40)

USER (40)

USEREVN (41)

UID (41)

VSIZE (42)

V ARIANCE (42)

常用技巧 (42)

怎么把select出来的结果导到一个文本文件中? (42)

怎样估算SQL执行的I/O数? (42)

常用数据词典 (43)

DBA_ (44)

Dba_extents (44)

dba_free_space (44)

dba_sys_privs (44)

dba_tables (45)

ALL_ (46)

USER_ (46)

V$_视图 (46)

v$database (46)

V$session (47)

Oracle优化 (49)

应用优化 (49)

Like or (49)

数据库优化 (49)

SQL中的单记录函数 (49)

2.CHR (49)

3.CONCAT (49)

4.INITCAP (49)

6.LENGTH (50)

7.LOWER (50)

8.UPPER (50)

9.RPAD和LPAD(粘贴字符) (50)

10.LTRIM和RTRIM (51)

11.SUBSTR(string,start,count) (51)

12.REPLACE('string','s1','s2') (51)

13.SOUNDEX (51)

14.TRIM('s' from 'string') (52)

15.ABS (52)

16.ACOS (52)

17.ASIN (52)

18.ATAN (52)

19.CEIL (52)

20.COS (53)

21.COSH (53)

22.EXP (53)

23.FLOOR (53)

24.LN (53)

25.LOG(n1,n2) (54)

26.MOD(n1,n2) (54)

27.POWER (54)

28.ROUND和TRUNC (54)

29.SIGN (54)

30.SIN (54)

31.SIGH (55)

32.SQRT (55)

33.TAN (55)

34.TANH (55)

35.TRUNC (55)

36.ADD_MONTHS (56)

https://www.doczj.com/doc/2819006912.html,ST_DAY (56)

38.MONTHS_BETWEEN(date2,date1) (56)

39.NEW_TIME(date,'this','that') (56)

40.NEXT_DAY(date,'day') (57)

41.SYSDATE (57)

42.CHARTOROWID (57)

43.CONVERT(c,dset,sset) (57)

44.HEXTORAW (58)

45.RAWTOHEXT (58)

46.ROWIDTOCHAR (58)

47.TO_CHAR(date,'format') (58)

48.TO_DATE(string,'format') (58)

50.TO_NUMBER (58)

51.BFILENAME(dir,file) (58)

52.CONVERT('x','desc','source') (59)

53.DUMP(s,fmt,start,length) (59)

54.EMPTY_BLOB()和EMPTY_CLOB() (59)

55.GREATEST (59)

56.LEAST (60)

57.UID (60)

https://www.doczj.com/doc/2819006912.html,ER (60)

https://www.doczj.com/doc/2819006912.html,EREVN (60)

60.A VG(DISTINCT|ALL) (62)

61.MAX(DISTINCT|ALL) (62)

62.MIN(DISTINCT|ALL) (62)

63.STDDEV(distinct|all) (62)

64.V ARIANCE(DISTINCT|ALL) (63)

65.GROUP BY (63)

66.HA VING (63)

67.ORDER BY (63)

oralce函数大全

1.求字持串的长度LENGTH

您可用LENGTH函数求字符串的长度。LENGTH返回一个数值。该值等于参数中的字符个数。

例:使用LENGTH函数

SQL>select Last_Name, length(Last_Name) from customer order by LastName;

2.使用SUBSTR函数从字符串中提取子串

语法:

SUBSTR函数的语法如下:

SUBSTR(string, string charcter, number of charcters) 变量定义如下:

string为字符列或字符串表达式

string charcter为子串的起始位置

number of charcters为返回字符的个数c

例:说明了怎样使用SUBSTR函数取得教师的姓的前四个字符

SQL>select last_Name, substr(Last_Name, 1, 4) from instector order by Last_Name

例:在SUBSTR函数中使用LENGTH函数(取后三个字符)

5Qt.>select last_Name, substr(Last_Name, Length(Last_Name) - 2, 3) from instector order by Last_Name

3.在字符串中查找模式

例:使用LIKE运算符

SQL>column description format a40 word_wrapped

SQL>column title format a35

SQL>select Title, Description from Course where Description like '%thory%' or Description like '%theories%';

4.替换字符串的一部分

经常遇到的数据操纵任务是在特定的列中将数据由一种模式转换成另一种模式。

假设您希望在Course表中改变课程说明,将说明中的字seminar用字discussion替代.那么您可用oracle提供的函数REPLACE,该函数使得某列的字符串能被另一字符串代替。

语法:

REPLACE函数的语法如下:

REPLACE(string, existion_string, [replacement_string]) 变量定义如下:

string为字符表达式c

existion_string为已存在的字符串。

replacement_string为用来替代的可选字符串。

例:使用REPLACE函数

显示了在Course表中如何使用REPLACE来改变课程名称(title):首先使用查询显示当前课程名称,UPDATE语句中使用REPLACE函数将SEMINAR改变成DISCUSSION,另一查询显示了UPDATE语句的效果。

SQL>update Course set Title = replace(Title, 'SEMINAR', "DISCUSSION');

注:如果在REPLACE函数中您没有指明用什么字符串去替代,则列中的原字符串将被删除。

5.删除字符串的空格

如果字符串列中包含前导或尾部空格,按某指定值对列进行查询,很可能返回错误结果。

LTRIM和RTRIM。

6.LPAD左填充函数

使用LPAD对字符串进行左填充。

语法:

LPAD(string, n, pad_string);

变量定义如下:

string为需左填充的字符串直接值或字符申列。

n为LPAD返回的字符串长度。

pad_string为左填充到string的字符串。

SQL>select lpad(my_col, 20) from test_trim;

使用LENGTH函数人微言轻LPAD函数的参数:

SQL>select lpad(my_col, length(my_col) + 8, 'you say') from

test_trim;

7.改变字符串的大小写

oracle提供了三个改变字符串大小写的函数:

INITCAP转换每个字的第一个字符为大写

LOWER转换所有字符为小写

UPPER转换所有字符为人写

8.使用DECODE函数(值转换函数)转换字符串

语法

DECODE的语法是:

DECODE(expression, value1, returned_value1, ... valueN,

returned_valueN, [default_returned_value]

变量定义如下:

Dexpression为合法的oracle表达式。

valueN为此expression可能取的值:

returned_valueN为expression等于valueN时DECODE的返回值。

default_returned_value为可选项,它是expression不等于任何valueN 时DECODE的返回值。

SQL>select Schedult_id, Day, decode(Day, 1, 'sun', 2, 'mon', 3, 'tue', 4, 'wed', 5, 'thu', 6, 'fri', 7, 'sat')

from Schedult_Type_Details order by Schedult_id, Day;

9.转换字符串为ASCII值

SQL>select Last_Name, SCAII(Last_Name) from Instructor order by Last_Name;

10.当前日期和时间:SYSDATE

11.转换日期为字符串

语法:

T0_CHAR函数的格式如下:

TO_CHAR(date_value,format)

SQL>select Last_Name, First_Name, to_char(Hire_Date, "MONTH DD, YYYY') H_DATE from Employee order by Hire_Date;

在SUBSTR函数中嵌入to_char函数

SQL>select Last_Name, First_Name, substr(to_char(Hire_date, 'MON), 1, 1) the_fist_letter_of_the_month from Employee;

12.转换字符串为日期

语法:

to_date(string_value, date_format);

SQL>select SYSDATE, to_date('07-04-1976', 'MM-DD-YYYY') from dual;

13.日期和时间

在to_char函数中使用时间格式:

SQL>select Employee_id, (to_char(time, clocked_in, 'HH:MM:SS') Time_Clocked_In from Time_Clock;

14.计算两个日期的差值

SQL>select sysdate + 7 from dual;

15.在Insert\Update等操作时,数字会自动转换为字符串。数字字段可以用to_char转换为串。

16.格式化数值字段

select to_char(Additional_Fees, '9,999.99') from Course;

货币符号:

select to_char(Additional_Fees, '¥9,999.99') from Course;

科学计数法:

select to_char(Additional_Fees, '9.9999EEEE') from Course;

17.将字符串转换成数字

to_number是to_char的逆运算。

update Security_Price set Last_Qtr_EPS = to_number('$2.81',

'$999.99');

18.内部统计函数

AVG(value):计算平均值,它的参数来自于它所作用的若干行。

STDDEV(value):返回它所作用的若干行作为参数的标准差。

VARIANCE(value):返回它所作用的若干行作为参数的。

19.四舍五入函数和截取函数

四舍五入ROUND(value, [scale]) ROUND(101.8) = 102 Round(123.37, 1) = 123.4

截取TRUNC(value, [scale]) Trunc(123.33) = 123 Trunc(123.567, 2) = 123.56

求最大整数FLOOR(value) Floor(128.3)=128 Floor(129.8) = 129 除了不能截取小数部分外,Floor几乎等同于Trunc函数。

求最小整数CELL(value) Cell(128.3)=129 Cell(129.8) = 130

20.求最大或最小值

MAX和MIN。

21.替换NULL

NVL(column, value)。

select nvl(Additional, 0) from Course;

22.内部聚合函数

COUNT函数:

查找相异的行:DISTINCT

分组:GROUP BY: select Department_id, count(*) from curse group by Department_id;

group by 和having: select Department_id, count(*) from Course group by Department_id having count(*) = 4; --哪些部门开设了4门课。

avg和group by: select Department_id, avg(Additional_Fees) from Course group by Department_id;

23.EXISTS

select Last_Name, Fist_Name from Instructor I where exists(select * from Class C where I.Instruetor_id = C.Instructor_id);

24.SELECT语句的集合操作

INTERSECE(交)

UNION(并): select Epicenter_Latitude, Epicenter_Longtitude from

UNSD_Event UNION select Location_Lat, Location_Lon, Richter_Number from RIND_Event order by 1;

MINUS(差): select Last_Name, First_Name from Instructor minus select Last_Name, First_Name from Hoover_Instructor;

25.用子查询建立一个表

create table Anthor as select * from instructor where 1 = 2;

26.创建一个简单的视图

create view Stueent_No_Personal

as

select Student_ID, Last_Name, First_Name from Student;

27.PL/SQL块的结构

说明部分

执行部分

例外处理部分

例:

DECLARE

max_records CONSTANT int := 100;

i int := 1;

BEGIN

FOR i in 1..max_records LOOP

INSERT INTO test_table(record_number, current_date) values(i, sysdate);

END LOOP;

COMMIT;

END;

/

28.用%TYPE声明一个变量

例:为了说明一个用来储存修理仓库技师名字的变量,可这样 Tech_Name Dept_Esimate.Techican %TYPE;

29.用%ROWTYPE声明一个变量

例:用一个复合变量存储Depot_Estimate表的一行。 Depot_Est_Row Depot_Esimate %ROWTYPE;

Depot_Est_Row的元素可以用以下方法使用:Depot_Est_Row.Techniciam := 'yujj';

30.一些常见的控制结构

IF语句:

if MOD(i, 5) = 0 then

rec_number := 5;

elseif MOD(i, 7) = 0 then

rec_number := 7;

else

rec_number := i;

end if;

简单的LOOP/EXIT语句:

LOOP

EXIT WHEN...;

ENDLOOP;

WHILE_LOOP语句:

WHILE i <100 LOOP

i := i + 1;

END LOOP;

FOR_LOOP语句:

for i in 1..max loop

i := i + 1;

dbms_output.put_line('j:'||to_char(j)); end loop;

GOTO语句:

goto more_processing;

...

<>

...

end;

NULL语句:

if (mod(i, 10) = 0 ) then

i := i + 1;

else

NULL;

end if;

赋值语句:

pl/sql中使用:=进行赋值。

31.在PL/SQL中使用SQL语句

PL/SQL和SELECT语句:

set serveroutput on

declare

Average_Body_Temp Patient.Body_Temp.Deg_F%TYPE;

begin

dbms_output.enable;

select avg(Body_Temp_Deg_F) into Average_Body_Temp from Patient; dbms_putput.put_line('Average body temp is Deg.F:' ||

to_char(Average_Body_Temp.'999.99'));

end;

子块的应用:

一个匿名块,它包含另一个子块

declare

max_i constrant int := 100;

i int := 1;

rec_number int;

begin

for i in 1..max_i loop

if mod(i, 5) = 0 then

rec_number := 5;

else

rec_number := i;

end if;

insert into test_table(record_number, current_date)

values(record_number, sysdate);

-- Here is a sub block;

declare

max_j constrant int := 20;

j int := 1;

begin

for j in 1..max_j loop;

rec_number := rec_number * j;

insert into test_table(record_number, current_date) values(record_number, sysdate);

end loop;

end;

end loop;

一个过程的示例:

declare

New_Patient_ID Patient.Patient_ID%TYPE;

High_Fever constant real := 42.0;

procedure Record_Patient_Temp_Deg_C(Patient_ID varchar2,

Body_Temp_Deg_C real) is

Temp_Deg_F real;

begin

Temp_Deg_F := (9.0/5.0)*Body_Temp_Deg_C + 32.0;

insert into Patient(Patient_ID, Body_Temp_Deg_F)

values(Patient_ID, TempDeg_F);

commit;

end;

begin

New_Patient_ID := 'GG9999';

Record_Patient_Temp_Deg_C(New_Patient_ID, High_Fever);

end;

/

--一个过程内声明的变量在过程体外不能被使用。

一个函数的示例:

function Max_Additional_Fees(Dept_ID IN varchar2)

return varchar2 is

Additional_Fees Course.Additional.Fees%TYPE;

begin

...

return something;

end;

过程和函数的参数类型:IN/OUT/IN OUT

32.关于dbms_output包的调用:先输入set serveroutput on;

33.系统视图USER_SOURCE,保存有过程、函数、包等。

它有以下四列:

NAME 包括过程、函数、包或包体的名字

TYPE 批出源代码是属于过程、函数包还是包体

TEXT 包含源代码中的一行

LINE 包含在TEXT中源代码所包含的行数

例:select line, text from user_source where name = 'DROP_CLASS' order by line;

34.SELECT和存储函数:

在SELECT中可以使用存在的存储函数

create or replac function DegF_add10(Deg_F IN number)

return number is

Deg_C number;

begin

deg_c := deg_f + 10;

return deg_c;

end DegF_add10;

select body_temp, DegF_add10(body_temp) from patient;

35.附加PL/SQL数据类型

boolean binary_integer, natural,

positive %type %rowtype pl/sql表或数组用户自定义记录

36.ORACLE预定义例外

DUP_VAL_ON_INDEX:当SQL语句要在存在唯一索引的列中建立重复数据时发生。

INVALID_NUMBER:当SQL语句指定无效数字时发生。

NO_DATTE_FOUND:当SELECT语句没有返回任何行时发生。

TOO_MANY_ROWS:在PL/SQL环境中,一条SELECT语句检索多行数据时发生。为了从一个查询检索任意数目的行,可使用游标,可将游标看成是查询返回结果的窗口。

在pl/sql中,一条SELECT语句返回多个数据行时就会发生这个例外。

VALUE_ERROR:多数情况与截断和转换误差有关。如给一个varchar2(5)的字段赋值长度超过5的字符串。

37.SQLCODE和SQLERRM

SQLCODE包括当前执行oracle pl/sql语句的错误状态。如果SQL语句没有错误,则SQLCODE为0;

SQLERRM包括与SQLCODE相关的错误信息。如果SQL语句执行成功,则SQLCODE为0,SQLERRM为一个字符串:ORA_0000:normal,successful completion.

38.使用游标的步骤

1.说明(declare)游标,给游标起个名字,并且与SELECT语句在语法上相关联。

2.打开(open)游标,Oracle RDBMS执行与游标相关的查询,并确定所限定的行(活动集)。

3.用游标提取数据行:将每一行的值返回到PL/SQL子程序环境中,一次返回一行。

4.关闭(close)游标,释放相关资源。

39.说明游标

CURSOR cursor_name

[(parameter1 parameter1_datetype[ := default1],

..

[parameterN parameterN_datetype[ := derfaultN])]

IS select_stmt;

40.打开游标

Open cursor_name;

说明:如果在定义游标时,没有声明参数的类型,在OPEN游标时,必须给相关的参数指定变量或是直接值。如open tempcur(20,30);

41.从游标中取出行

loop

fetch tmpcur into field1, field2;

exit when tmpcur%notfound;

dbms_output.put_line(field1);

end loop;

42.关闭游标

close tmpcur;

43.取游标返回的行数

dbms_output.put_line(tmpcur%rowcount);

44.在oracle数据库中查询结果的行号使用伪列ROWNUM 表示(从1开始)。!!!数据库分页可以使用它!!!

例如select * from employee where rownum<10 返回前10条记录。但因为rownum是在查询之后排序之前赋值的,所以查询employee按birthday排序的第100到120条记录应该这么写:

select * from (

select my_table.*, rownum as my_rownum from (select name, birthday

from employee order by birthday

) my_table where rownum <120

)where my_rownum>=100

例:给多表查询的结果加上序列号

select rownum as "SerialNo", b."pName", a."compName" from "fundCompAccount" a, "fundPersonAccount" b

where a."compAccount" = b."compAccount";

--以上已经打印20040511

Oracle选定前20条数据

select * from "fundDuty" where rownum < 20;

Oracle选定21至40条数据

select * from "fundDuty" where rownum <=40

minus

select * from "fundDuty" where rownum <=21

ABS

返回指定值的绝对值

SQL> select abs(100),abs(-100) from dual;

ABS(100) ABS(-100)

--------- ---------

100 100

ACOS

给出反余弦的值

SQL> select acos(-1) from dual;

ACOS(-1)

---------

3.1415927

ADD_MONTHS

ADD_MONTHS(,<i>),增加或减去月份,返回日期d加上i个月后的结果。i可以使任意整数。如果i是一个小数,那么数据库将隐式的他转换成整数,将会截去小数点后面的部分。SQL> select to_char(add_months(to_date('199912','yyyymm'),2),'yyyymm') from dual;

TO_CHA

------

200002

SQL> select to_char(add_months(to_date('199912','yyyymm'),-2),'yyyymm') from dual;

TO_CHA

------

199910

Ascii

返回与指定的字符对应的十进制数;

SQL> select ascii('A') A,ascii('a') a,ascii('0') zero,ascii(' ') space from dual;

A A ZERO SPACE

--------- --------- --------- ---------

65 97 48 32

逆函数是CHR()

ASIN

给出反正弦的值

SQL> select asin(0.5) from dual;

ASIN(0.5)

---------

.52359878

返回一个数字的反正切值

SQL> select atan(1) from dual;

ATAN(1)

---------

.78539816

ATAN2

Atan2(n,m):该函数用于返回数字n除以数字m的反正切值。输入值除了m不能为0外,可以是任意数字(m不能为0),输出值的单位为弧度。

AVG

返回数值的平均值。缺省设置为ALL

BFILENAME(dir,file)

指定一个外部二进制文件,dir是一个directory类型的对象,file为一文件名。函数返回一个空的BFILE位置值指示符,函数用于初始化BFILE变量或者是BFILE列。

SQL>insert into file_tb1 values(bfilename('lob_dir1','image1.gif'));

CEIL

返回大于或等于给出数字的最小整数

SQL> select ceil(3.1415927) from dual;

CEIL(3.1415927)

---------------

4

CHARTOROWID

函数将c转换为RWID数据类型

SELECT test_id from test_case where rowid=CHARTORWID(''AAAA0SAACAAAALiAAA'')

给出整数,返回对应的字符;

SQL> select chr(54740) zhao,chr(65) chr65 from dual;

ZH C

-- -

赵A

CONCAT

连接两个字符串;

SQL> select concat('010-','88888888')||'转23' 高乾竞电话from dual

高乾竞电话

----------------

010-********转23

CONVERT(c,dset,sset)

将源字符串sset的字符从一个语言字符集转换到另一个目的dset字符集SQL> select convert('strutz','we8hp','f7dec') "conversion" from dual;

conver

------

strutz

COS

返回一个给定数字的余弦

SQL> select cos(-3.1415927) from dual;

COS(-3.1415927)

---------------

-1

相关主题
文本预览
相关文档 最新文档