oracle函数的用法

oracle函数的用法
oracle函数的用法

§2.2 SQL中的单记录函数

许多资料(包括Oracle 的资料)把Oracle的SQL语句中用到的函数分为单值函数和多值函数,单值函数又分为字符函数和数字函数。下面分别介绍它们。

§2.2.1 单记录字符函数

ASCII()

是字符串。返回与指定的字符对应的十进制数。

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

A a ZERO SPACE

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

65 97 48 32

SQL> select ascii('赵') zhao,length('赵') leng from dual;

ZHAO LENG

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

54740 1

CHR([NCHAR])

给出整数,返回对应字符。如:

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

ZH C

-- -

赵 A

CONCAT(,)

SQL> select concat('010-','8801 8159')||'转23' 赵元杰电话from dual;

赵元杰电话

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

010-8801 8159转23

INITCAP()

返回字符串c1 并第一个字母变为大写。例如:

SQL> select initcap('simth') upp from dual;

UPP

-----

Simth

INSTR(,[,[,] ] )

在一个字符串中搜索指定的字符,返回发现指定的字符的位置。

C1: 被搜索的字符串

C2: 希望搜索的字符串

I: 搜索的开始位置,缺省是1

J: 出现的位置,缺省是1。

SQL> SELECT INSTR ('Oracle Training', 'ra', 1, 2) "Instring" FROM DUAL;

Instring

----------

9

INSTRB(,[,[,] ] )

除了返回的字节外,与INSTR 相同,

LENGTH( )

返回字符串c 的长度。

SQL> l

1 select name,length(name),addr,length(addr),sal,length(to_char(sal))

2* from nchar_tst

SQL> /

NAME LENGTH(NAME) ADDR LENGTH(ADDR) SAL LENGTH(TO_CHAR(SAL)) ------ ------------ ---------------- ------------ ---------- ---------------- 赵元杰 3 北京市海淀区 6 99999.99 8

LENGTHB( )

以字节返回字符串的字节数。

SQL> select name,lengthb(name),length(name) from nchar_tst;

NAME LENGTHB(NAME) LENGTH(NAME)

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

赵元杰 6 3

LOWER ( )

返回字符串并将所有字符变为小写。

SQL> select lower('AaBbCcDd') AaBbCcDd from dual;

AABBCCDD

--------

aabbccdd

UPPER( )

与LOWER 相反,将给出字符串变为大写。如:

SQL> select upper('AaBbCcDd') AaBbCcDd from dual;

AABBCCDD

--------

AABBCCDD

RPAD和LPAD(粘贴字符)

RPAD(string,Length[,'set'])

LPAD(string,Length[,'set'])

RPAD在列的右边粘贴字符;

LPAD在列的左边粘贴字符。

例1:

SQL>select RPAD(City,35,'.'),temperature from weather;

RPAD(City,35,'.') temperature

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

CLEVELAND (85)

LOS ANGELES.. 81

.........................

(即不够35个字符用'.'填满)

LTRIM(左截断)RTRIM(右截断)函数

LTRIM (string [,?set?])

Left TRIM (左截断)删去左边出现的任何set 字符。

RTRIM (string [,?set?])

Right TRIM (右截断)删去右边出现的任何set 字符。

例1:

SELECT RTRIM (…Mother Theresa, The?, …The?) “Example of Right

Trimming” FROM DUAL;

Example of Right

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

Mother Theresa,

SUBSTR Substr(string,start[,Count])

取子字符串中函数

对字串(或字段),从start字符开始,连续取 count 个字符并返回结果,如果没有指count 则一直取到尾。

select phone,substr(phone,1,3) || ‘0’ || substr(phone,4)

from telecommunication where master=’中国电信’;

SUBSTRB(string,start[,Count])

对字串(或字段),从start字节开始,连续取 count 个字节并返回结果,如果没有指count 则一直取到尾。

REPLACE (‘string’ [,’string_in’,’string_out’])

String: 希望被替换的字符串或变量。

String_in: 被替换字符串。

String_out: 要替换字符串。

SQL> select replace('Informaix中国公司','Informaix','IBM Informix')

2 IBM数据库from dual;

IBM数据库

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

IBM Informix中国公司

SOUNDEX( )

返回一个与给定的字符串读音相同的字符串(不管拼写是否一样)。

SELECT DPL_NAME FROM DENIED_PARTIES_LIST WHERE

SOUNDEX(DPL_NAME) = SOUNDEX(…Saddam Hussain?) ;

DPL_NAME

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

Al Husseni

Sadda Al Sada.

REPLACE (‘string’ [,’string_in’,’string_out’])

String:希望被替换的字符串或变量。

String_in: 被替换字符串。

String_out: 要替换字符串。

SELECT REPLACE (…Oracle?, …Or?, …Mir?) “Example “ FROM DUAL;

Example

-------

Miracle

TRIM([] FROM

TRIM可以使你对给定的字符串进行裁剪(前面,后面或前后)。

●如果指定 LEADING, Oracle 从trim_char 中裁剪掉前面的字符;

●如果指定TRAILING, Oracle 从trim_char 中裁剪掉尾面的字符;

●如果指定两个都指定或一个都没有给出,Oracle从trim_char 中裁剪掉前面及尾面的字

符;

●如果不指定 trim_character, 缺省为空格符;

●如果只指定trim_source, Oracle Oracle从trim_char 中裁剪掉前面及尾面的字符。

例子:将下面字符串中的前面和后面的‘0‘字符都去掉:

SELECT TRIM (0 FROM 0009872348900) "TRIM Example" FROM DUAL;

TRIM example

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

98723489

select trim (' SECOOLER ') "TRIM e.g."from dual; --最普通的用法

select trim (trailing from' SECOOLER ') "TRIM e.g."from dual; --只取后面的空格

select trim (leading from' SECOOLER ') "TRIM e.g."from dual; --只取前面的空格

select trim ('x'from'xxxxSECOOLERxxxx') "TRIM e.g."from dual; --指定的字符

select trim(trailing'x'from'xxxxSECOOLERxxxx') "TRIM e.g."from dual; select trim(leading'x'from'xxxxSECOOLERxxxx') "TRIM e.g."from dual;

.需要注意的地方

这里的“trim_character”参数只允许包含一个字符,不支持多字符。

既然TRIM不能满足我们删除只剩“SECOOLER”字符串的要求,有么有其他手段呢?of course有。我们使用RTRIM和LTRIM“连环拳”完成这个任务。

1)使用RTRIM

sec@ora10g> select rtrim('xyxxSECOOLERxyyx','xy') "e.g." from dual;

e.g.

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

xyxxSECOOLER

2)使用LTRIM

sec@ora10g> select ltrim('xyxxSECOOLERxyyx','xy') "e.g." from dual;

e.g.

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

SECOOLERxyyx

3)联合使用RTRIM和LTRIM函数达到我们的目的

sec@ora10g> select ltrim(rtrim('xyxxSECOOLERxyyx','xy'),'xy') "e.g." from dual;

e.g.

--------

SECOOLER

使用RTRIM和LTRIM函数时的注意事项:“xy”不表示整个“xy”字符串进行匹配,而

是发现任意的字符“x”或字符“y”均做删除操作。

§2.2.2 单记录数字函数

ABS( )

返回指定值的绝对值。如:

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

ABS(100) ABS(-100)

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

100 100

ACOS( )

给出反余弦的值。如:

SQL> Select acos(-1) acos from dual;

ACOS

----------

3.14159265

ASIN( )

给出反正弦的值。如:

SQL> select asin(-1) "arc sine" from dual;

arc sine

----------

-1.5707963

ATAN (

返回一个数字的反正切值。如:

SQL> select atan(-1) "arc tangent" from dual;

arc tangent

-----------

-.78539816

CEIL( )

返回大于或等于给出数字的最小整数。如:SQL> select ceil(3.14159) from dual;

CEIL(3.14159)

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

4

COS ( )

返回一个数字余弦值。如:

SQL> select cos(-3.1415926) from dual;

COS(-3.1415926)

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

-1

COSH ( )

返回一个数字双曲余弦值。如:

SQL> select cosh(20) cosh from dual;

COSH

----------

242582598

EXP ( )

返回一个数字e 的n 次方的值。如:

SQL> select exp(2),exp(1) from dual;

EXP(2) EXP(1)

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

7.3890561 2.71828183

FLOOR ( )

对给定的数字取整数,如:

SQL> select floor(123.45),floor(45.56) from dual; FLOOR(123.45) FLOOR(45.56)

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

12345

LN( )

返回一个数字的对数值,n 是大于0 的数字,如:SQL> select ln(1),ln(2),ln(3) from dual;

LN(1) LN(2) LN(3)

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

0 .693147181 1.09861229

LOG( , )

返回一个以n1为底的n2的对数,n1不是0或1的正数。如:

SQL> select log(2,1),log(2,2) from dual;

LOG(2,1) LOG(2,2)

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

0 1

MOD( , )

SQL> Select mod(10,3), mod(10,2), mod(10,4) from dual;

MOD(10,3) MOD(10,2) MOD(10,4)

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

1 0 2

POWER ( , )

返回n1 的n2 次方值,如:

SQL> select power(2,10),power(3,3) from dual;

POWER(2,10) POWER(3,3)

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

102427

ROUND(value,precision)

按照指定的精度进行舍入;

select round(55.5),round(-55.5),trunc(55.5),trunc(-55.5)

from dual;

round(55.5) round(-55.5) trunc(55.5) trunc(-55.5)

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

56 -56 55 -55

SIGN()

取数字n 的符号,大于0 返回 1;小于0 返回-1;等于0 返回0。如:

例:

select sign(123), sign(-100),sign(0) from dual;

sign(123) sign(-100) sign(0)

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

1 -1 0

SIN ( )

返回一个数字的正弦值。如:

SQL> select sin(1.57079) from dual;

SIN(1.57079)

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

1

SINH( )

返回双曲余弦的值,如:

SQL> select sin(20),sinh(20) from dual;

SIN(20) SINH(20)

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

.912945251 242582598

SQRT( )

返回数字n 的根,如:

SQL> select sqrt(64),sqrt(10) from dual;

SQRT(64) SQRT(10)

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

8 3.16227766

TAN( )

返回数字n的正切值,如:

SQL> select tan(20),tan(10) from dual;

TAN(20) TAN(10)

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

2.23716094 .648360827

TANH( )

返回数字n的双曲正切值,如:

SQL> select tanh(20),tan(20) from dual;

TANH(20) TAN(20)

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

1 2.23716094

TRUNC(value,precision)

按照指定的截取一个数。如:

SQL> SELECT TRUNC (124.16666, -2) trunc1, trunc(124.16666,2) from dual;

TRUNC1 TRUNC(124.16666,2)

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

100124.16

§2.2.3 单记录日期函数

Oracle 用到的日期函是:

ADD_MONTHS( , )

增加月份和减去月份,如:

SQL> select to_char( add_months(to_date('199712','yyyymm'), 1),'yyyymm') add_month

2 from dual;

ADD_MO

------

199801

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

ADD_MO

------

199711

LAST_DAY( date )

返回日期date 所在月的最后一天,如:

SQL> select to_char(sysdate,'yyyy.mm.dd'),to_char((sysdate)+1,'yyyy.mm.dd')

2 from dual;

TO_CHAR(SY TO_CHAR((S

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

2001.05.18 2001.05.19

MONTHS_BETWEEN(date2,date1)

给出 Date2 - date1 的月数(可以是小数);

SQL> select months_between('19-12月-1999','19-3月-2000') mon_betw from dual;

MON_BETW

----------

-3

SQL> select months_between(to_date('2000.05.20','yyyy.mm.dd'),

2 to_date('2005.05.20','yyyy.mm.dd') ) mon_bet from dual;

MON_BET

----------

-60

NEW_TIME(date,’this’,’other’)

给出在this 时区=Other时区的日期和时间

This和other 是时区,它们可以是下面的值:

SQL> select to_char(sysdate,'yyyy.mm.dd hh24:mi:ss') bj_time,

2 to_char(new_time(sysdate,'PDT','GMT'),'yyyy.mm.dd hh24:mi:ss') los_angles

3 from dual;

BJ_TIME LOS_ANGLES

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

2001.05.19 06:25:25 2001.05.19 13:25:25

NEXT_DAY( date,’day’)

给出日期date和星期x之后计算下一星期x的日期,这里的day为星期,如: MONDAY,Tuesday

等。但在中文环境下,要写成’星期x’这样的格式,如:

例:比如今天是5月18日星期五,计算下一个星期五是几号:

SQL> select next_day('18-5月-2001','星期五') nxt_day from dual;

NXT_DAY

----------

25-5月 -01

SYSDATE

用来得到系统的当前日期,如:

SQL> select to_char(sysdate,'dd-mon-yyyy day') from dual;

TO_CHAR(SYSDATE,'DD

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

18-5月 -2001 星期五

TRUNC(,[,] )

按照给出的 fmt 的要求将日期截断。如果 fmt=’mi’则表示截断掉秒保留至分。如:

SQL> select to_char(trunc(sysdate,'hh'),'yyyy.mm.dd hh24:mi:ss') hh,

2 to_char(trunc(sysdate,'mi'),'yyyy.mm.dd hh24:mi:ss') hhmm from dual;

HH HHMM

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

2001.05.18 22:00:00 2001.05.18 22:27:00

§2.2.4 单记录转换函数

CHARTOROWID()

将字符数据类型转换为ROWID类型,如:

1* select rowid,rowidtochar(rowid),ename from scott.emp

SQL> /

ROWID ROWIDTOCHAR(ROWID) ENAME ----------------------------------- ---------------------------------------- ---------- AAAFXDAABAAAHVaAAA AAAFXDAABAAAHV aAAA SMITH AAAFXDAABAAAHVaAAB AAAFXDAABAAAHV aAAB ALLEN AAAFXDAABAAAHVaAAC AAAFXDAABAAAHV aAAC W ARD

CONVERT( ,[,] )

将源字符串sset从一个语言字符集转换到另一个目的dset字符集。

SELECT CONVERT (…strutz?, … WE8HP?, … F7DEC …) “Conversion”

FROM DUAL;

Conversion

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

Strutz.

HEXTORAW( )

将一个十六进制构成的字符串转化为二进制。如:

Insert into printers( printer_nbr,manufacturer,model,init_string)

Values ( 12,?HP?,?Laserjet?,”HEXTORAW(…1B45?));

RAWTOHEX( )

将一个二进制构成的字符串转化为十六进制。如:

select rawtohex ( init_string) hext from printers

where model=LaserJet? and manufacturer=?HP?;

hext

-----------

1B45

ROWIDTOCHAR( )

将ROWID数据类型转换为字符类型,见CHARTOROWID。

TO_CHAR(date,’format’)

根据format 重新格式日期date的格式。如:

SQL> select to_char(sysdate,'yyyy/mm/dd hh24:mi:ss') from dual;

TO_CHAR(SYSDATE,'YY

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

2001/05/18 23:05:36

日期格式比较多,详细内容请参考原版资料。下面给出常用的日期格式代码:

TO_DATE(string,’format’)

将一和字串转换为ORACLE的日期。如:

Insert into demo(demo_key,date_col)

Values(1 , to_date(?04-Oct-1999?, …DD-Mon-yyyy?) );

TO_MULTI_BYTE()

将字符串中的单字节字符转换为多字节字符, 如:

TO_NUMBER()

将给出的字符转换为数字,如:

SELECT TO_NUMBER (…1947?) “FISCAL_YEAR” FROM DUAL;

FISCAL_YEAR

-----------

1947

TO_MULTI_BYTE()及TO_SINGLE_BYTE 将单字节转换为多字节或从多字节转换为单字节。

§2.2.5 其它的单记录函数

BFILENAME(

, )

指定一个外部二进制文件。如:

INSERT INTO file_tbl

VALUES (BFILENAME (’lob_dir1’, ’image1.gif’));

CONVERT (‘x’,’desc_set’ [, ‘source_set’])

将x 字段或变量的源source 转换为desc,如:

select sid,serial#,username,

DECODE(command,

0,?None?,

2,?Insert?,

3,?Select?,

6,?Update?,

7,?Delete?,

8,?Drop?,

…Other?) cmd

from v$session where type != …BACKGROUND?;

关于DECODE 在优化方面的内容在《Oracle8i/9i 高级数据库管理》中查阅。

DUMP( s,[,fmt [, start [, length ] ] ] )

DUMP 函数以fmt 指定的内部数字格式返回一个V ARCHAR2类型的值。如:

SQL> col global_name for a30

SQL> col DUMP_STRING for a50

SQL> set lin 200

SQL> select global_name,dump(global_name,1017,8,5) dump_string

2 from global_name;

Oracle中分析函数用法小结

Oracle中分析函数用法小结 一.分析函数适用场景: ○1需要对同样的数据进行不同级别的聚合操作 ○2需要在表内将多条数据和同一条数据进行多次的比较 ○3需要在排序完的结果集上进行额外的过滤操作 二.分析函数语法: FUNCTION_NAME(,...) OVER () 例: sum(sal) over (partition by deptno order by ename) new_alias sum就是函数名 (sal)是分析函数的参数,每个函数有0~3个参数,参数可以是表达式,例如:sum(sal+comm) over 是一个关键字,用于标识分析函数,否则查询分析器不能区别sum()聚集函数和sum()分析函数 partition by deptno 是可选的分区子句,如果不存在任何分区子句,则全部的结果集可看作一个单一的大区 order by ename 是可选的order by 子句,有些函数需要它,有些则不需要.依靠已排序数据的那些函数,如:用于访问结果集中前一行和后一行的LAG和LEAD,必须使用,其它函数,如AVG,则不需要.在使用了任何排序的开窗函数时,该子句是强制性的,它指定了在计算分析函数时一组内的数据是如何排序的. 1)FUNCTION子句 ORACLE提供了26个分析函数,按功能分5类 分析函数分类 等级(ranking)函数:用于寻找前N种查询 开窗(windowing)函数:用于计算不同的累计,如SUM,COUNT,AVG,MIN,MAX等,作用于数据的一个窗口上 例: sum(t.sal) over (order by t.deptno,t.ename) running_total, sum(t.sal) over (partition by t.deptno order by t.ename) department_total 制表(reporting)函数:与开窗函数同名,作用于一个分区或一组上的所有列 例: sum(t.sal) over () running_total2, sum(t.sal) over (partition by t.deptno) department_total2 制表函数与开窗函数的关键不同之处在于OVER语句上缺少一个ORDER BY子句! LAG,LEAD函数:这类函数允许在结果集中向前或向后检索值,为了避免数据的自连接,它们是非常有用的. VAR_POP,VAR_SAMP,STDEV_POPE及线性的衰减函数:计算任何未排序分区的统计值 2)PARTITION子句 按照表达式分区(就是分组),如果省略了分区子句,则全部的结果集被看作是一个单一的组 3)ORDER BY子句

oracle自定义函数和存储过程

oracle自定义函数和存储过程 oracle自定义函数和存储过程(转)2008-07-23 10:43--过程(PROCEDURE)--------------------------------------------------// --创建表 CREATE TABLE user_info ( id VARCHAR2(4), name VARCHAR2(15), pwd VARCHAR2(15), address VARCHAR2(30) ); --插入数据 INSERT INTO user_info VALUES('u001','zhao','zhao','shanghai'); --如要经常执行插入,Oracle每次都要进行编译,并判断语法正确性,因此执行速度可想而知, --所以我们要创建一个过程来实现 CREATE OR REPLACE PROCEDURE AddNewUser ( n_id user_info.id%TYPE, n_name user_https://www.360docs.net/doc/6e2156400.html,%TYPE, n_pwd user_info.pwd%TYPE, n_address user_info.address%TYPE ) AS BEGIN --向表中插入数据 INSERT INTO user_info(id,name,pwd,address) VALUES(n_id,n_name,n_pwd,n_address); END AddNewUser; / --下面我们利用PL/SQL匿名块调用该过程 DECLARE --描述新用户的变量 v_id user_info.id%TYPE := 'u002'; v_name user_https://www.360docs.net/doc/6e2156400.html,%TYPE := 'wish'; v_pwd user_info.pwd%TYPE := 'history'; v_add user_info.address%TYPE := 'shanghai'; BEGIN --调用过程,添加wish用户到数据库

Oracle 常见函数(一)——数值函数

Oracle常见数值函数 ----***特别说明***: x 可以是纯的数值,也可以是数值型表达式/* ABS(x)返回x绝对值 eg. */ selectabs(100),abs(-100) from dual; /* sign(x)判断x的正负,正数返回1,负数返回-1,0返回0; eg. */ selectsign(100),sign(-100),sign(0) from dual;

/* round(x[,n])对x进行四舍五入,保留n位小数,其中n采用其整数部分; 没有n时默认四舍五入到整数位,n为负数时,四舍五入保留小数点左边n位(补零), eg. */ selectround(5555.6666, 2.1), round(5555.6666, -2.6), round(5555.6666) from dual; /* trunc(x)对x进行直接截取,保留n位小数,其中n采用其整数部分; 没有n时默认截取到整数位,n为负数时,截取保留小数点左边n位(补零), eg. */ selecttrunc(5555.66666,2.1), trunc(5555.66666,-2.6), trunc(5555.033333) from dual; /* ceil(x)对x进行向上取整,返回不小于x的最小整数(可以是整数x本身)。

eg. */ selectceil(3.1), ceil(2.8+1.3), ceil(0) from dual; /* floor(x)对x进行向下取整,返回不大于x的最大整数(可以是整数x本身)。eg. */ selectfloor(3.1), floor(2.8+1.3), floor(0) from dual; /* mod(x,y)求x除以y的余数,x,y为数字型表达式。 eg. */ selectmod(23,8),mod(24,8) from dual;

oracle中常用函数大全

oracle中常用函数大全 1、数值型常用函数 函数返回值样例显示 ceil(n) 大于或等于数值n的最小整数select ceil(10.6) from dual; 11 floor(n) 小于等于数值n的最大整数select ceil(10.6) from dual; 10 mod(m,n) m除以n的余数,若n=0,则返回m select mod(7,5) from dual; 2 power(m,n) m的n次方select power(3,2) from dual; 9 round(n,m) 将n四舍五入,保留小数点后m位select round(1234.5678,2) from dual; 1234.57 sign(n) 若n=0,则返回0,否则,n>0,则返回1,n<0,则返回-1 select sign(12) from dual; 1 sqrt(n) n的平方根select sqrt(25) from dual ; 5 2、常用字符函数 initcap(char) 把每个字符串的第一个字符换成大写select initicap('mr.ecop') from dual; Mr.Ecop lower(char) 整个字符串换成小写select lower('MR.ecop') from dual; mr.ecop replace(char,str1,str2) 字符串中所有str1换成str2 select replace('Scott','s','Boy') from dual; Boycott substr(char,m,n) 取出从m字符开始的n个字符的子串select substr('ABCDEF',2,2) from dual; CD length(char) 求字符串的长度select length('ACD') from dual; 3 || 并置运算符select 'ABCD'||'EFGH' from dual; ABCDEFGH 3、日期型函数 sysdate当前日期和时间select sysdate from dual;

oracle函数

许多软件公司都理解开发不依赖于特定数据库类型(例如Oracle、SQL Server、DB2)的应用程序的重要性,它可以让客户们选择自己习惯的平台。一般来说,软件开发人员都能够识别出他们的负责数据库维护的客户,和必须使用现有平台和个性化的客户。 关于Oracle和SQL Server之间的区别,已经有很多篇文章从企业的角度和数据库管理员的角度出发描写了两者之间的一般差别。在这篇文章里面,我将会从应用程序的角度向你描述SQL erver 和oracle平台之间的区别,并且将会讨论开发不依赖于数据库环境的应用程序的几种可能的方法。与此同时,我不会再论讨对于应用程序来说,两个平台之间显而易见的区别,例如表的分割和索引。 定义通用接口和语言有很少的几种通用语言和接口可以让应用程序不依赖于数据库,想来也可以以同样的方式应用在关系型数据库上面: ANSI是美国国家标准局定义的,这是一家志愿者成员的组织(用私人基金运转),他们在有关设备和程序等广泛领域内开发了国家承认的标准。在数据库领域, ANSI定义了编写SQL命令的标准,假设命令可以运行在任何的数据库上,而不需要更改命令的语法。 ODBC是开放数据库连接(ODBC)接口,微软定义的,它可以让应用程序访问数据库管理系统(DBMS)中的数据,使用SQL作为访问数据的标准。 ODBC允许最大的互联性,这意味着一个单个的应用程序可以访问不同的数据库管理系统。然后,应用程序终端用户可以添加开放数据库连接(ODBC)数据库驱动来将应用程序与他们所选择的数据库管理系统链接上。 OLE DB 是ODBC的继承者,是一组允许例如基于VB、C++、Access等任何可以连接到类似SQL Server、Oracle、DB2、MySQL等后台的“前台”的软件组件。在许多种情况下,OLE DB组件都比原有的ODBC提供了好得多的性能。 JDBC(Java数据库连接)应用程序接口是Java编程语言和广泛范围的数据库,SQL数据库和其他表列数据源(例如电子表格或者普通文本文件)之间,进行不依赖于数据库的连接的行业标准。JDBD应用程序接口为基于SQL的数据库访问提供了调用级别的应用程序接口。真实世界中的通用接口不幸的是,并不是所有数据库级别的命令都是ANSI,每个数据库平台都有自己的扩展功能。对于ANSI或者通用接口,一般来说都代表着几本功能,因此也可能意味着丧失了性能方面的竞争力。对于小型数据库和小型应用程序来说,要维护对数据库的通用访问是简单的,但是当数据库和/或应用程序变得越来越大,越来越复杂,你就不得不向代码中添加功能。 SQL Server和Oracle的常用函数对比 ---------数学函数 1.绝对值 S:select abs(-1) value O:select abs(-1) value from dual 2.取整(大) S:select ceiling(-1.001) value O:select ceil(-1.001) value from dual

oracle存储过程讲解及实例

存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 IS 3 BEGIN 4 NULL; 5 END; 行1: CREATE OR REPLACE PROCEDURE 是一个SQL语句通知Oracle数据库去创建一个叫做skeleton存储过程, 如果存在就覆盖它; 行2: IS关键词表明后面将跟随一个PL/SQL体。 行3: BEGIN关键词表明PL/SQL体的开始。 行4: NULL PL/SQL语句表明什么事都不做,这句不能删去,因为PL/SQL体中至少需要有一句; 行5: END关键词表明PL/SQL体的结束

存储过程创建语法: create or replace procedure 存储过程名(param1 in type,param2 out type) as 变量1 类型(值范围); --vs_msg VARCHAR2(4000); 变量2 类型(值范围); Begin Select count(*) into 变量1 from 表A where列名 =param1; If (判断条件) then Select 列名into 变量2 from 表A where列名 =param1; Dbms_output。Put_line(‘打印信息’); Elsif (判断条件) then Dbms_output。Put_line(‘打印信息’); Else Raise 异常名(NO_DATA_FOUND); End if; Exception When others then Rollback;

End; 注意事项: 1,存储过程参数不带取值范围,in表示传入,out表示输出 类型可以使用任意Oracle中的合法类型。 2,变量带取值范围,后面接分号 3,在判断语句前最好先用count(*)函数判断是否存在该条操作记录 4,用select 。。。into。。。给变量赋值 5,在代码中抛异常用 raise+异常名 CREATE OR REPLACE PROCEDURE存储过程名 ( --定义参数 is_ym IN CHAR(6) ,

ORACLE 内置函数大全

SQL中的单记录函数 1.ASCII 返回与指定的字符对应的十进制数; SQL> select ascii('A') A,ascii('a') a,ascii('0') zero,ascii(' ') space from dual; A A ZERO SPACE --------- --------- --------- --------- 65 97 48 32 2.CHR 给出整数,返回对应的字符; SQL> select chr(54740) zhao,chr(65) chr65 from dual; ZH C -- - 赵 A 3.CONCAT 连接两个字符串; SQL> select concat('010-','')||'转23' 高乾竞电话from dual; 高乾竞电话 ---------------- 010-转23 4.INITCAP 返回字符串并将字符串的第一个字母变为大写; SQL> select initcap('smith') upp from dual; UPP ----- Smith 5.INSTR(C1,C2,I,J) 在一个字符串中搜索指定的字符,返回发现指定的字符的位置; C1 被搜索的字符串 C2 希望搜索的字符串 I 搜索的开始位置,默认为1 J 出现的位置,默认为1 SQL> select instr('oracle traning','ra',1,2) instring from dual; INSTRING --------- 9 6.LENGTH 返回字符串的长度; SQL> select name,length(name),addr,length(addr),sal,length(to_char(sal)) from gao.nchar_tst; NAME LENGTH(NAME) ADDR LENGTH(ADDR) SAL

Oracle内置函数(数值型)

6.1 数值型函数 绝对值、取余、判断数值正负函数 SELECT ABS(100),ABS(-100),ABS('100') FROM DUAL; 第三个ABS('100')参数类型虽然不是数值型但是可以隐式转换成数值类型,也可以用ABS。create table SYS.DUAL ( DUMMY VARCHAR2(1 ) SELECT MOD(5,2),MOD(8/3,5),MOD(-10,6),MOD(1,0) FROM DUAL; 参数是任意类型或者可以隐式转换成数值的类型 注意:MOD(x,0)的值为x; SELECT SIGN('9'),SIGN('-9'),SIGN(0.00),SIGN(-2*'9') FROM DUAL; 三角函数 select sin(π/6) a from dual;出错,在oracle中π标示符无效 select sin(3.141592653/6) a from dual; 返回以指定数值为准整数的函数 CEIL(N) select ceil(23.45) a from dual;

FLOOR(N) select floor(23.45) a,floor(23.65) b from dual; 指数,对数函数 SQRT 该函数返回n的平方根 select sqrt(1.44) a,sqrt(256) b from dual; POWER(N2,N1) 该函数可以得到N2的N1次幂 select power(5,2) a,power(2,5) b from dual; SELECT POWER(-27,1/3) FROM DUAL;运算出错,如何计算POWER(-27,1/3)?(oracle 中不能计算) EXP(n) E的N次幂 select exp(2) a from dual; LOG(N1,N2) select log(3,9) a from dual; ROUND 四舍五入,如果,后的数不为整数,自动截取整数位 SELECT ROUND(100.23456,4),ROUND(100.23456,2.56),ROUND(155.23456,-2) FROM DUAL; SELECT TRUNC(100.23456,4),TRUNC(100.23456,2.56),TRUNC(155.23456,-2),TRUNC(15 5.23456) FROM DUAL;

oracle-存储过程练习题

1.创建用户kaifa(密码亦为kaifa),并分配connect,create table,resource权限。 CREATE user KAIFA IDENTIFIED BY KAIFA DEFAULT TABLESPACE HOSDATA TEMPOARY TABLESPACE TEMPDATA; GRANT CONNECT , CREATE TABLE , RESOURCE TO KAIFA 2.在做报表统计时,需要根据报表日期和币种从概要表中查询本期余额。 概要表(CCB_GYB)信息如下: --RMB 人民币 --CNY 本位币 --USD 外币折美元 如果币种为RMB,则取出人民币余额作为本期余额;为CNY,则取本位币余额;为USD 则取外币折美元余额。 请编写一个函数GetCurrBal( qrp_rq IN VARCHAR2, --报表日期 qrp_code IN VARCHAR2--币种 ) CREATE OR REPLACE FUNCTION GetCurrBal( Vqrp_rq Date , --报表日期 Vqrp_code VARCHAR2--币种 ) RETURN NUMBER IS VAMOUNT NUMBER ; VDATE Date; BEGIN SELECT ACCOUNTING_DATE INTO VDATE FROM CCB_GYB Where ACCOUNTING_DATE = Vqrp_rq; IF Vqrp_code = 'RMB'THEN SELECT RMB_YTD_BALANCE INTO VAMOUNT FROM CCB_GYB WHERE Vqrp_code= 'RMB' AND ACCOUNTING_DATE= VDATE; ELSE IF Vqrp_code = 'CNY'THEN SELECT CNY_YTD_BALANCE INTO VAMOUNT FROM CCB_GYB WHERE Vqrp_code= 'CNY';

Oracle常用函数及使用案例(珍藏版)

Oracle常用函数及使用案例(珍藏版) 一:sql函数: lower(char):将字符串转化为小写的格式。 upper(char):将字符串转化为大写的格式。 length(char):返回字符串的长度。 substr(char,m,n):取字符串的字串。 案例1.将所有员工的名字按小写的方式显示 select lower(ename),sal from emp; 案例2.将所有员工的名字按大写的方式显示。 select upper(ename),sal from emp; 案例3.显示正好为五个字符的的员工的姓名。 select * from emp where length(ename)=5; 案例4.显示所有员工姓名的前三个字符。 select substr(ename,1,3) from emp;//从名字的第一个字符开始取,向后取三个字符。 案例5.以首字母为大写的方式显示所有员工的姓名。 (1)首字母大写:select upper(substr(ename,1,1)) from emp; (2)完成后面字母小写。select lower(substr(ename,2,length(ename)-1)) from emp; (3)合并select upper(substr(ename,1,1))||lower(substr(ename,2,length(ename)-1)) from emp; 案例6.以首字母为小写的方式显示所有员工的姓名。(需要有较高的灵活度,细心分析和清晰思路) (1)首字母小写:select upper(substr(ename,1,1)) from emp; (2)完成后面字母大写。select lower(substr(ename,2,length(ename)-1)) from emp; (3)合并select lower(substr(ename,1,1))||upper(substr(ename,2,length(ename)-1)) from emp; 案例7.函数(替换):replace(char1,search_string,replace_string); 显示所有员工的姓名,用“我要替换A”替代所有“A”。 select replace(ename,'A','我是老鼠')from emp; 案例8.以首字母为小写的方式显示所有员工的姓名。 select replace(ename,substr(ename,1,1),lower(substr(ename,1,1)))from emp; 案例9.以首字母为大写的方式显示所有员工的姓名。 Select replace(ename,substr(ename,2,length(ename)-1),lower(substr(ename,2,length(ename) -1)))from emp; 二:数学函数:(在财务中用的比较多) ronud(sal)用于四舍五默认取整; ronud(sal,1)用于四舍五留一位小数。 trunc(sal)取整,忽略小数。截去小数部分。 trunc(sal,1)截取;小数点留一位,之后的右边的省去。 trunc(sal,-1)截取;只留整数,个位数取零。 floor(sal)向下最接近取整;比如1.1值为1.

Oracle函数详解(经典)

Oracle常用函数/过程说明主要介绍Oracle的系统函数、过程和包。 SQL常用函数: 数值函数: ABS Purpose 返回绝对值 Returns the absolute value of n. Example SELECT ABS(-15) "Absolute" FROM DUAL; Absolute ---------- 15 CEIL Purpose 取最小整数 Returns smallest integer greater than or equal to n. Example SELECT CEIL(15.7) "Ceiling" FROM DUAL;

Ceiling ---------- 16 * MOD Syntax MOD(m,n) Purpose 取余 Returns remainder of m divided by n. Returns m if n is 0. Example SELECT MOD(11,4) "Modulus" FROM DUAL; Modulus ---------- 3 * ROUND Syntax ROUND(n[,m]) Purpose 取四舍五入信息 Returns n rounded to m places right of the decimal point; if m is omitted, to 0 places. m can be negative to round off digits left of the decimal point. m must be an integer.

oracle--存储过程--存储函数--触发器

存储过程和存储函数: 指存储在数据库中供所有用户程序调用的子程序叫存储过程、存储函数。语法: create [or replace] PROCEDURE 过程名(参数列表) AS PLSQL子程序体; 存储过程实例: 存储过程的调用: 方法一: set serveroutput on begin raisesalary(7369); end; / 方法二: set serveroutput on exec raisesalary(7369);

函数(Function)为一命名的存储程序,可带参数,并返回一计算值。函数和过程的结构类似,但必须有一个RETURN子句,用于返回函数值。函数说明要指定函数名、结果值的类型,以及参数类型等。 语法: CREATE [OR REPLACE] FUNCTION 函数名(参数列表) RETURN 函数值类型 AS PLSQL子程序体; 示例: 函数的调用: declare v_sal number; begin v_sal:=queryEmpSalary(7934); dbms_output.put_line('salary is:' || v_sal); end; / 在java语言中调用存储过程: 存储过程:

什么时候使用存储过程/存储函数? 如果只有一个返回值,用存储函数; 否则,就用存储过程。 在out参数中使用游标: 声明包结构: 创建包体:

在Java语言中访问游标类型的out参数: 触发器: 数据库触发器是一个与表相关联的、存储的PL/SQL程序。每当一个特定的数据操作语句(Insert,update,delete)在指定的表上发出时,Oracle自动地执行触发器中定义的语句序列。 触发器的类型 语句级触发器 在指定的操作语句操作之前或之后执行一次,不管这条语句影响了多少行。 行级触发器(FOR EACH ROW) 触发语句作用的每一条记录都被触发。在行级触发器中使用old和new伪记录变量, 识别值的状态。 创建触发器: CREATE [or REPLACE] TRIGGER 触发器名 {BEFORE | AFTER} {DELETE | INSERT | UPDATE [OF 列名]} ON 表名 [FOR EACH ROW [WHEN(条件) ] ] PLSQL 块

Oracle函数大全

附录Ⅱ Oracle11g SQL函数 函数名 返回 类型 说明 字符串函数 ASCII(s) 数值 返回s首位字母的ASCII码 CHR(i) 字符 返回数值i的ASCII字符 CONCAT(s1,s2) 字符 将s2连接到字符串s1的后面 INITCAP(s) 字符 将每个单词首位字母大写其它字母小写 INSTR(s1,s2[,i[,j]]) 数值 返回s2在s1中第i位开始第j次出现的位置 INSTRB(s1,s2[,i[,j]]) 数值 与INSTR(s)函数相同,但按字节计算 LENGTH(s) 数值 返回s的长度。 LENGTHb(s) 数值 与LENGTH(s)相同,但按字节计算。 lower(s) 字符 返回s的小写字符 LPAD(s1,i[,s2]) 字符 在s1的左侧用s2字符串补足到总长度i LTRIM(s1,s2) 字符 循环去掉在s2中存在的s1左边字符 RPAD(s1,i[,s2]) 字符 在s1的右侧用s2字符串补足到总长度i RTRIM(s1,s2) 字符 循环去掉在s2中存在的s1右边字符 REPLACE(s1,s2[,s3]) 字符 用s3替换出现在s1中的s2 REVERSE(s) 字符 返回s倒排的字符串 SUBSTR(s,i[,j]) 字符 从s的第i位开始截得长度j的子字符串 SUBSTRB(s,i[,j]) 字符 与SUBSTR相同,但i,j按字节计算。 SOUNDEX(s) 返回与s发音相似的词 TRANSLATE(s1,s2,s3) 字符 将s1中与s2相同的字符以s3代替 TRIM(s) 字符 删除s的首部和尾部空格 UPPER(s) 字符 返回s的大写 正则表达式函数 REGEXP_LIKE() 布尔 功能与LIKE的功能相似 REGEXP_INSTR() 数值 功能与INSTR的功能相似 REGEXP_SUBSTR() 字符 功能与SUBSTR的功能相似 REGEXP_REPLACE() 字符 功能与REPLACE的功能相似 数字函数 ABS(i) 数值 返回i的绝对值 ACOS(i) 数值 反余玄函数,返回-1到1之间的数 ASIN(i) 数值 反正玄函数,返回-1到1之间的数 ATAN(i) 数值 反正切函数,返回i的反正切值

oracle函数列表

PL/SQL单行函数和组函数详解 函数是一种有零个或多个参数并且有一个返回值的程序。在SQL中Oracle内建了一系列函数,这些函数都可被称为SQL或PL/SQL语句,函数主要分为两大类: 单行函数; 组函数 本文将讨论如何利用单行函数以及使用规则。SQL中的单行函数 SQL和PL/SQL中自带很多类型的函数,有字符、数字、日期、转换、和混合型等多种函数用于处理单行数据,因此这些都可被统称为单行函数。这些函数均可用于SELECT,WHERE、ORDER BY等子句中,例如下面的例子中就包含了TO_CHAR,UPPER,SOUNDEX等单行函数。 SELECT ename,TO_CHAR(hiredate,'day,DD-Mon-YYYY')FROM empWhere UPPER(ename) Like 'AL%'ORDER BY SOUNDEX(ename) 单行函数也可以在其他语句中使用,如update的SET子句,INSERT的V ALUES子句,DELET的WHERE子句,认证考试特别注意在SELECT语句中使用这些函数,所以我们的注意力也集中在SELECT语句中。 NULL和单行函数 在如何理解NULL上开始是很困难的,就算是一个很有经验的人依然对此感到困惑。NULL值表示一个未知数据或者一个空值,算术操作符的任何一个操作数为NULL值,结果均为提个NULL值,这个规则也适合很多函数,只有CONCA T,DECODE,DUMP,NVL,REPLACE在调用了NULL参数时能够返回非NULL值。在这些中NVL函数时最重要的,因为他能直接处理NULL值,NVL有两个参数:NVL(x1,x2),x1和x2都式表达式,当x1为null时返回X2,否则返回x1。 下面我们看看emp数据表它包含了薪水、奖金两项,需要计算总的补偿 column name emp_id salary bonuskey type pk nulls/unique nn,u nnfk table datatype number number numberlength 11.2 11.2 不是简单的将薪水和奖金加起来就可以了,如果某一行是null值那么结果就将是null,比如下面的例子: update empset salary=(salary+bonus)*1.1 这个语句中,雇员的工资和奖金都将更新为一个新的值,但是如果没有奖金,即salary + null,那么就会得出错误的结论,这个时候就要使用nvl函数来排除null值的影响。 所以正确的语句是: update empset salary=(salary+nvl(bonus,0)*1.1 单行字符串函数 单行字符串函数用于操作字符串数据,他们大多数有一个或多个参数,其中绝大多数返回字符串 ASCII()

oracle数据库之常用的函数练习

/*此文章可以作为sql脚本直接运行,某些函数限于oracle数据库!前面建表和数据插入可以不看,直接看后面红色部分的代码,前面的表只是提供一些数据供大家练习,不用自己再去建表了,真正的内容在后面*/ --人员表 create table person( personID number , pname varchar2(20) constraint NN_pname not null, psex char(2) , pbirth date , constraint PK_personID primary key (personID) , constraint CK_psex check (psex='男' or psex='女') ); --增加数据 create sequence seq_personID ; insert into person values (seq_personID.Nextval,'david','男',to_date('1990-09-10','yyyy-mm- dd')); insert into person values (seq_personID.Nextval,'ggyy','男',to_date('1991-10-10','yyyy-mm-dd')); insert into person values (seq_personID.Nextval,'朱 刀','男',to_date('1970-10-10','yy-mm-dd'));

insert into person values (seq_personID.Nextval,'泥 巴','女',to_date('1991-10-10','yy-mm-dd')); insert into person values (seq_personID.Nextval,'憨 坨','女',to_date('1991-10-10','yy-mm-dd')); insert into person values (seq_personID.Nextval,'李静 芳','女',to_date('1990-09-10','yyyy-mm-dd')); insert into person (personID,pname,psex) values (seq_personID.Nextval,'胖子','男'); insert into person (personID,pname,psex) values (seq_personID.Nextval,'小成成','男'); insert into person (personID,pname,psex) values (seq_personID.Nextval,'乐姐','女'); insert into person (personID,pname,psex) values (seq_personID.Nextval,'靓崽波','男'); --登录账号表 create table loginzh( userID number , personID number , zhanghao varchar2(20) , passwd varchar2(20) , logintime date , loginIP varchar2(15) , constraint PK_userID primary key (userID) , constraint FK_personID foreign key (personID) references person (personID) ); --为这个表加点数据 create sequence seq_userID ; insert into loginzh values (seq_userID.Nextval,1,'111111','123456',sysdate,'127.0.0.1'); --sysdate为系统当前时间

Oracle常用函数

数值函数

日期函数 SELECT TO_CHAR(sysdate,'YYYY-MM-DD HH24:MI:SS AM DY') FROM dual; SELECT TO_CHAR(sysdate,'YYYY"年"MM"月"DD"日"') FROM dual; 其他函数

5.高级查询(多表联合查询) 例子: SELECT job 职务 , SUM(sal) 工资总和 FROM emp WHERE job != 'PRESIDENT' GROUP BY job HAVING SUM(sal)>4500 ORDER BY SUM(sal); 分析函数 以下三个分析函数用于计算一个行在一组有序行中的排位,序号从1开始 ROW_NUMBER返回连续的排位,不论值是否相等 RANK具有相等值的行排位相同,序数随后跳跃 DENSE_RANK 具有相等值的行排位相同,序号是连续的 例子: SELECT deptno, ename, sal, comm, RANK() OVER (PARTITION BY deptno ORDER BY sal DESC, comm) RANK FROM emp; SELECT ename, job, deptno, sal, ROW_NUMBER() OVER (ORDER BY sal DESC) AS SAL_RANK FROM SCOTT.EMP; SELECT d.dname, e.ename, e.sal, DENSE_RANK() OVER (PARTITION BY e.deptno ORDER BY e.sal DESC) AS DENRANK FROM emp e, dept d WHERE e.deptno = d.deptno;

oracle SQL里常用的时间函数

oracle SQL里常用的时间函数,经典推荐 相信很多人都有过统计某些数据的经历,比如,要统计财务的情况,可能要按每年,每季度,每月,甚至每个星期来分别统计。那在oracle 中应该怎么来写sql语句呢,这个时候Oracle的日期函数会给我们很多帮助。 常用日期型函数 1。Sysdate 当前日期和时间 SQL> Select sysdate from dual; SYSDATE ---------- 21-6月-05 2。Last_day 本月最后一天 SQL> Select last_day(sysdate) from dual; LAST_DAY(S ---------- 30-6月-05 3。Add_months(d,n) 当前日期d后推n个月

用于从一个日期值增加或减少一些月份 date_value:=add_months(date_value,number_of_months) SQL> Select add_months(sysdate,2) from dual; ADD_MONTHS ---------- 21-8月-05 4。Months_between(f,s) 日期f和s间相差月数 SQL> select months_between(sysdate,to_date('2005-11-12','yyyy-mm-dd'))fro m dual; MONTHS_BETWEEN(SYSDATE,TO_DATE('2005-11-12','YYYY-MM-D D')) ---------------------------------------------------------- -4.6966741 5。NEXT_DAY(d, day_of_week) 返回由"day_of_week"命名的,在变量"d"指定的日期之后的第一个工作日的日期。参数"day_of_week"必须为该星期中的某一天。

oracle存储过程函数汇总().docx

oracle存储过程函数汇总() Character function return character value These functions all received is the character parameter type group (except CHR) and returns the character value? In addition to the special instructions, the function returns VARCHAR2 most numerical types? The restrictions on the return type of the character function are the same as those for the basic database type? The maximum value of character variable storage: The VARCHAR2 value is limited to 2000 characters (ORACLE 8 to 4000 characters) The CHAR value is limited to 255 characters (0RACLE8 2000) The long type is 2GB The Clob type is 4GB 1,CHR Syntax: Chr (x) Function: return in the database character set with numerical equivalence with the character of X. CHR and ASCII are a pair of inverse functions? After CHR conversion character after ASCII conversion and obtained the original word