OracleSQL语句基础1、SQL语句基础下面给出SQL语句的基本介绍。1.1、SQL语句所用符号操作符用途例子+-表示正数或负数,正数可省去+-1234.56+将两个数或表达式进行相加A=c+b-将两个数或表达式进行相减34-12*将两个数或表达式进行相乘12*34/除以一个数或表达式18*11NULL空值判断Wherenameisnull;||字符串连接‘101-’||tel_num=等于测试Select*fromempwherename=’赵元杰’;!=或<>或^=不等于测试Select*fromempwherename!=’赵元杰’;<小于测试Select*fromempwheresal<5000;>大于测试Select*fromempwheresal>5000;<=小于等于测试Select*fromempwheresal<=5000;>=大于等于测试Select*fromempwheresal>=5000;
Notin测试某值是否在一个指定的结果集中Selectname,addrfromexpertwherelocalnotin(‘北京’,’上海’);ANY将一个值与一组值进行比较,返回满足条件的结果。必须跟!=,<,>,<=,>=selectename,salfromempwheresal<=any(selectsalfromempwheredeptno=10)SOME同ANY,必须跟!=,<,>,<=,>=
ALL将一个值与一组值比较,返回满足条件的所有列值。必须跟!=,<,>,<=,>=Selectname,salfromempwheresal<=all(500,800,1200);NotbetweenAandB判断某个值是否界于两者之间。Selectname,salfromempWheresalbetween500and1200;[not]exists判断某个列是否存在于一组值中。dname,deptnofromdeptwhereexists(select*fromempwheredept.deptno=emp.deptno)A[not]likeb比较两个模式是否相似,当使用like语句时Oracle不去访问索引。Select*fromempWhereenamelike‘TH%’;Is[not]null测试值是否为空。Selectename,deptnofromempselect
Wherecomm.Isnullorcomm.=0;Not对结果的否定。Select*fromempWheresal
not(sal<1000);等价于selectename,salfromempwheresal>=1000;AND用于判断两个条件十分都满足。Select*fromempwhereEname=’SIMTH’andsal>=1000;OR用于判断两个条件中是否有一个满足。Select*fromempwhereEname=’SIMTH’orename=’SCOTT’;UNION用于返回(组合)两个查询中所有唯一的行。SelectenamefromempunionSelectenamefromemp;UNIONALL用于返回(组合)两个查询中所有所有的行。
INTERSECT用于返回两个查询中相同的行。Selectenamefromemp1intersectselectenamefromemp2;MINUS用于返回两个查询中的不同的行。
1.2、简单select查询当我们可以用SQL*PLUS登录到SQL>下后我们可以用DESC,显示某表的结构,也可以用select语句简单查询表中的一些列的内容。
例:要查询EMP表中员工的、工资及出生日期,则:SQL>selectename,sal,hiredatefromemp;2、伪列及伪表Oracle系统为了实现完整的关系数据库功能,系统专门提供了一组称为伪列(Pseudocolumn)的数据库列,这些列不是在建立对象(如建表)时由我们完成的,而是在我们建立对象时由自动Oracle完成的。Oracle目前有以下的伪列:CURRVALandNEXTVAL使用序列号的保留字LEVELROWIDROWNUM查询数据所对应的级记录的唯一标识限制查询结果集的数量
Oracle还提供了一个DUAL的伪表,该目的表主要是保证在使用SELECT语句中语句的完整性而提供的,如:我们要查询当前的系统日期及时间,而系统的日期和时间并是放在一个指定的表里。所以在from语句后就没有表名给出。为了使用from后有个表名,我们就用DUAL代替。如:例1:查询Oracle系统日期及时间:SQL>selectto_char(sysdate,'yyyy.mm.ddhh24:mi:ss')fromDUAL;TO_CHAR(SYSDATE,'YY
------------------2001.06.0207:28:09例2:计算一下5000+5000*0.1的结果是多少,则:SQL>select5000+5000*0.1fromDUAL;5000+5000*0.1------------------55003、SELECT语句在关系数据库中,使用频率最高要算SELECT语句了。尽管SELECT语句的使用非常简单,但确很有学问。下面简单介绍有关SELECT语句的常用方法。1.命令语法:SELECT的简单语法:SELECT[DISTINCT|ALL]{*|column1[,column2]...}FROM{table_1|(subquery)}[alias][,{table_2|(subquery)}[alias]]...[WHEREcondition][CONNECTBYcondition[STARTWITHcondition][GROUPBYexpn][HAVINGexpn][{UNION[ALL]|INTERSECT|MINUS}SELECT...]
[ORDERBY[expn][ASC|DESC][FORUPDATE[OF[user.]table|view]column][NOWAIT]详细语法结构需查阅最新ORACLE原版《ORACLE8iSQLREFERENCEMANUAL》或《ORACLE9iSQLREFERENCEMANUAL》4、SQL中的单记录函数许多资料(包括Oracle的资料)把Oracle的SQL语句中用到的函数分为单值函数和多值函数,单值函数又分为字符函数和数字函数。下面分别介绍它们。4.1、单记录字符函数函数说明
ASCII返回对应字符的十进制值CHR给出十进制返回字符CONCAT拼接两个字符串,与||相同INITCAT将字符串的第一个字母变为大写INSTR找出某个字符串的位置INSTRB找出某个字符串的位置和字节数LENGTH以字符给出字符串的长度LENGTHB以字节给出字符串的长度LOWER将字符串转换成小写LPAD使用指定的字符在字符的左边填充
LTRIM在左边裁剪掉指定的字符RPAD使用指定的字符在字符的右边填充RTRIM在右边裁剪掉指定的字符REPLACE执行字符串搜索和替换SUBSTR取字符串的子串SUBSTRB取字符串的子串(以字节)SOUNDEX返回一个同音字符串TRANSLATE执行字符串搜索和替换TRIM裁剪掉前面或后面的字符串UPPER将字符串变为大写NVL以一个值来替换空值1、ASCII()是字符串。返回与指定的字符对应的十进制数。SQL>selectascii('A')A,ascii('a')a,ascii('0')zero,ascii('')spacefromdual;AaZEROSPACE
---------------------------------------65974832
SQL>selectascii('赵')zhao,length('赵')lengfromdual;ZHAO---------54740LENG---------1
2、CHR([NCHAR])给出整数,返回对应字符。如:SQL>selectchr(54740)zhao,chr(65)chr65fromdual;ZHC--
赵A3、CONCAT(,)返回字符串c1与字符串c2合并后的值。例如:SQL>selectconcat('010-','88018159')||'转23'赵元杰电话fromdual;赵元杰电话----------------010-88018159转234、INITCAP()返回字符串c1并第一个字母变为大写。例如:SQL>selectinitcap('simth')uppfromdual;UPP----Simth5、INSTR(,[,[,]])在一个字符串中搜索指定的字符,返回发现指定的字符的位置。C1:被搜索的字符串
C2:希望搜索的字符串I:搜索的开始位置,缺省是1J:出现的位置,缺省是1。SQL>SELECTINSTR('OracleTraining','ra',1,2)"Instring"FROMDUAL;Instring---------96、INSTRB(,[,[,]])除了返回的字节外,与INSTR相同,7、LENGTH()返回字符串c的长度。SQL>l1select
name,length(name),addr,length(addr),sal,length(to_char(sal))2*fromnchar_tstSQL>/NAMELENGTH(NAME)ADDRLENGTH(TO_CHAR(SAL))-----------------------------------------------------------------------赵元杰3北京市海淀区699999.998LENGTH(ADDR)SAL
8、LENGTHB()
以字节返回字符串的字节数。SQL>selectname,lengthb(name),length(name)from
nchar_tst;NAMELENGTHB(NAME)LENGTH(NAME)
------------------------------赵元杰63
9、LOWER()返回字符串并将所有字符变为小写。SQL>selectlower('AaBbCcDd')AaBbCcDdfromdual;AABBCCDD-------aabbccdd10、UPPER()与LOWER相反,将给出字符串变为大写。如:SQL>selectupper('AaBbCcDd')AaBbCcDdfromdual;AABBCCDD-------AABBCCDD11、RPAD和LPAD(粘贴字符)RPAD(string,Length[,'set'])LPAD(string,Length[,'set'])
RPAD在列的右边粘贴字符;LPAD在列的左边粘贴字符。例1:SQL>selectRPAD(City35'.')temperature,,,temperaturefromweather;
RPAD(City,35,'.')
-----------------------------------------CLEVELAND......LOSANGELES...........................(即不够35个字符用'.'填满)12、LTRIM(左截断)RTRIM(右截断)函数LTRIM(string[,’set’])LeftTRIM(左截断)删去左边出现的任何set字符。RTRIM(string[,’set’])RightTRIM(右截断)删去右边出现的任何set字符。例1:SELECTRTRIM(‘MotherTheresa,The’,‘The’)“ExampleofRightTrimming”FROMDUAL;ExampleofRight---------------MotherTheresa,8581
13、SUBSTRSubstr(string,start[,Count])取子字符串中函数对字串(或字段),从start字符开始,连续取count个字符并返回结果,如果没有指count则一直取到尾。selectphone,substr(phone,1,3)||‘0’||substr(phone,4)fromtelecommunicationwheremaster=’中国电信’;14、SUBSTRB(string,start[,Count])对字串(或字段),从start字节开始,连续取count个字节并返回结果,如果没有指count则一直取到尾。15、REPLACE(‘string’[,’string_in’,’string_out’])String:希望被替换的字符串或变量。String_in:被替换字符串。String_out:要替换字符串。SQL>selectreplace('Informaix中国公司','Informaix','IBMInformix')2IBM数据库fromdual;IBM数据库-------------------IBMInformix中国公司16、SOUNDEX()返回一个与给定的字符串读音相同的字符串(不管拼写是否一样)。
SELECTWHERE
DPL_NAME
FROM
DENIED_PARTIES_LIST
SOUNDEX(DPL_NAME)=SOUNDEX(‘SaddamHussain’);DPL_NAME---------------------------------------------AlHusseniSaddaAlSada.17、REPLACE(‘string’[,’string_in’,’string_out’])String:希望被替换的字符串或变量。String_in:被替换字符串。String_out:要替换字符串。SELECTREPLACE(‘Oracle’,‘Or’,‘Mir’)“Example“FROMDUAL;Example------Miracle18、TRIM([]FROM)TRIM可以使你对给定的字符串进行裁剪(前面,后面或前后)。如果指定LEADING,Oracle从trim_char中裁剪掉前面的字符;如果指定TRAILING,Oracle从trim_char中裁剪掉尾面的字符;
如果指定两个都指定或一个都没有给出Oracle从trim_char中,裁剪掉前面及尾面的字符;如果不指定trim_character,缺省为空格符;如果只指定trim_source,OracleOracle从trim_char中裁剪掉前面及尾面的字符。例子:将下面字符串中的前面和后面的‘0‘字符都去掉:SELECTTRIM(0FROM0009872348900)"TRIMExample"FROMDUAL;
TRIMexample-------------------------------987234894.2、单记录数字函数函数说明Value1+value2加Value1-value2减Value1*value2乘Value1/value2除ABS(value)绝对值CEIL(value)大于或等于value的最小整数
COS(value)余弦COSH(value)反余弦EXP(value)e的value次幂FLOOR(value)小于或等于value的最大整数LN(value)value的自然对数LOG(value)value的以10为底的对数MOD(value,divisor)求模NVL(value,substitute)value为空时以substitute代替POWER(value,exponent)value的exponent次幂ROUND(value,precision)按precision精度4舍5入SIGN(value)value为正返回1;为负返回-1;为0返回0.SIN(value)余弦SINH(value)反余弦SQRT(value)value的平方根TAN(value)正切TANH(value)反正切TRUNC(value,按precision)按照precision截取valueVSIZE(value)返回value在ORACLE的存储空间大小1、ABS()返回指定值的绝对值。如:SQL>selectabs(100),abs(-100)fromdual;ABS(100)ABS(-100)
-------------------100100
2、ACOS()给出反余弦的值。如:SQL>Selectacos(-1)acosfromdual;ACOS---------3.141592653、ASIN()给出反正弦的值。如:SQL>selectasin(-1)"arcsine"fromdual;arcsine----------1.57079634、ATAN()返回一个数字的反正切值。如:SQL>selectatan(-1)"arctangent"fromdual;arctangent-----------.785398165、CEIL()返回大于或等于给出数字的最小整数。如:
SQL>selectceil(3.14159)fromdual;CEIL(3.14159)------------46、COS()返回一个数字余弦值。如:SQL>selectcos(-3.1415926)fromCOS(-3.1415926)---------------17、COSH()返回一个数字双曲余弦值。如:SQL>selectcosh(20)coshfromdual;COSH---------2425825988、EXP()返回一个数字e的n次方的值。如:SQL>selectexp(2),exp(1)fromdual;EXP(2)---------EXP(1)---------dual;
7.38905612.71828183
9、FLOOR()对给定的数字取整数,如:SQL>selectfloor(123.45),floor(45.56)fromdual;FLOOR(123.45)FLOOR(45.56)------------4510、LN()返回一个数字的对数值,n是大于0的数字,如:SQL>selectln(1),ln(2),ln(3)fromdual;LN(1)---------0LN(2)---------LN(3)---------1.09861229------------
.693147181
11、LOG(,)返回一个以n1为底的n2的对数,n1不是0或1的正数。如:SQL>selectlog(2,1),log(2,2)fromdual;LOG(2,1)---------112、MOD(,)SQL>Selectmod(10,3),mod(10,2),mod(10,4)fromdual;MOD(10,3)MOD(10,2)MOD(10,4)---------------------------LOG(2,2)----------
1
0
2
13、POWER(,)返回n1的n2次方值,如:SQL>selectpower(2,10),power(3,3)fromdual;POWER(2,10)----------2714、ROUND(value,precision)按照指定的精度进行舍入;selectround(55.5),round(-55.5),trunc(55.5),trunc(-55.5)fromdual;round(55.5)round(-55.5)trunc(55.5)trunc(-55.5)----------------------------------------------5615、SIGN()取数字n的符号,大于0返回1;小于0返回-1;等于0返回0。如:例:selectsign(123),sign(-100),sign(0)fromdual;sign(123)sign(-100)sign(0)-----------------------------1-10-5655-55POWER(3,3)
----------
16、SIN()返回一个数字的正弦值。如:SQL>selectsin(1.57079)fromdual;SIN(1.57079)-----------117、SINH()返回双曲余弦的值,如:SQL>selectsin(20),sinh(20)fromdual;SIN(20)---------SINH(20)---------242582598
.912945251
18、SQRT()返回数字n的根,如:SQL>selectsqrt(64),sqrt(10)fromdual;SQRT(64)---------8SQRT(10)
---------3.16227766
19、TAN()返回数字n的正切值,如:SQL>selecttan(20),tan(10)fromdual;TAN(20)TAN(10)
----------
----------
2.23716094.64836082720、TANH()返回数字n的双曲正切值,如:SQL>selecttanh(20),tan(20)fromdual;TANH(20)---------1TAN(20)---------2.23716094
21、TRUNC(value,precision)按照指定的截取一个数。如:SQL>SELECTTRUNC(124.16666,-2)trunc1,
trunc(124.16666,2)fromdual;TRUNC1TRUNC(124.16666,2)---------------------------124.164.3、单记录日期函数Oracle用到的日期函是:函数描述
ADD_MONTH在日期date上增加count个月GREATEST(date1,date2,...)从日期列表中选出最晚的日期LAST_DAY(date)返回日期date所在月的最后一天LEAST(date1,date2,...)从日期列表中选出最早的日期
MONTHS_BETWEEN(date2,date1)给出Date2-date1的月数(可以是小数)NEXT_DAY(date,’day’)给出日期date之后下一天的日期,这里的day为星期,如:MONDAY,Tuesday等。NEW_TIME(date,’this’,’other’)给出在this时区=Other时区的日期和时间ROUND(date,’format’)未指定format时,如果日期中的时间在中午之前则将日期中的时间截断为12A.M.(午夜一天的开始),,,否则进到第二天。时间截断为12A.M.(午夜,一天的开始),否则进到第二天。TRUNC(date,’format’)未指定format时,将日期截为12A.M.(午夜,一天的开始).
1、ADD_MONTHS(,)增加月份和减去月份,如:SQL>selectto_char(add_months(to_date('199712','yyyymm'),1),'yyyymm')add_month2fromdual;ADD_MO-----199801SQL>selectto_char(add_months(to_date('199712','yyyymm'),
-1),'yyyymm')add_mo2fromdual;ADD_MO-----1997112、LAST_DAY(date)返回日期date所在月的最后一天,如:SQL>select
to_char(sysdate,'yyyy.mm.dd'),to_char((sysdate)+1,'yyyy.mm.dd')2fromdual;TO_CHAR(SYTO_CHAR((S-------------------2001.05.182001.05.193、MONTHS_BETWEEN(date2,date1)给出Date2-date1的月数(可以是小数);SQL>selectmonths_between('19-12月-1999','19-3月-2000')mon_betwfromdual;MON_BETW----------3SQL>select
months_between(to_date('2000.05.20','yyyy.mm.dd'),2to_date('2005.05.20','yyyy.mm.dd'))mon_betfromdual;MON_BET----------604、NEW_TIME(date,’this’,’other’)给出在this时区=Other时区的日期和时间This和other是时区,它们可以是下面的值:时区缩写代表的时区AST/ADT大西洋标准/日期时间BST/BDT白令海标准/日期时间CST/CDT中部标准/日期时间GMT格林威治时间HST/HDT阿拉斯加-夏威夷标准/日期时间MST/MDT山区标准/日期时间NST新大陆标准时间PST/PDT太平洋标准/日期时间YST/YDTYukon标准/日期时间SQL>bj_time,2to_char(new_time(sysdate,'PDT','GMT'),'yyyy.mm.ddselectto_char(sysdate,'yyyy.mm.ddhh24:mi:ss')
hh24:mi:ss')los_angles
3
fromdual;LOS_ANGLES
BJ_TIME
-------------------------------------2001.05.1906:25:252001.05.1913:25:255、NEXT_DAY(date,’day’)给出日期date和星期x之后计算下一星期x的日期这里的day,为星期,如:MONDAY,Tuesday等。但在中文环境下,要写成’星期x’这样的格式,如:例:比如今天是5月18日星期五,计算下一个星期五是几号:SQL>selectnext_day('18-5月-2001','星期五')nxt_dayfromdual;NXT_DAY---------25-5月-016、SYSDATE用来得到系统的当前日期,如:SQL>selectto_char(sysdate,'dd-mon-yyyyday')fromdual;TO_CHAR(SYSDATE,'DD------------------18-5月-2001星期五7、TRUNC(,[,])按照给出的fmt的要求将日期截断。如果fmt=’mi’则表示截
断掉秒保留至分。如:SQL>selectto_char(trunc(sysdate,'hh'),'yyyy.mm.dd
hh24:mi:ss')hh,2to_char(trunc(sysdate,'mi'),'yyyy.mm.ddhh24:mi:ss')hhmmfromdual;HHHHMM
-------------------------------------2001.05.1822:00:002001.05.1822:27:0045、单记录转换函数函数描述
CHARTOROWID将字符转换到rowid类型CONVERT转换一个字符节到另外一个字符节HEXTORAW转换十六进制到raw类型RAWTOHEX转换raw到十六进制ROWIDTOCHAR转换ROWID到字符TO_CHAR转换日期格式到字符串TO_DATE按照指定的格式将字符串转换到日期型TO_MULTIBYTE把单字节字符转换到多字节TO_NUMBER将数字字串转换到数字TO_SINGLE_BYTE转换多字节到单字节1、CHARTOROWID()将字符数据类型转换为ROWID类型,如:
1*selectrowid,rowidtochar(rowid),enamefromscott.empSQL>/ROWIDROWIDTOCHAR(ROWID)ENAME
--------------------------------------------
----------------------------------------
AAAFXDAABAAAHVaAAAAAAFXDAABAAAHVaAAASMITHAAAFXDAABAAAHVaAABAAAFXDAABAAAHVaAABALLENAAAFXDAABAAAHVaAACAAAFXDAABAAAHVaAACWARD2、CONVERT(,[,])将源字符串sset从一个语言字符集转换到另一个目的dset字符集。SELECTCONVERT(‘strutz’,‘WE8HP’,‘F7DEC‘)
“Conversion”FROMDUAL;Conversion--------------Strutz.3、HEXTORAW()将一个十六进制构成的字符串转化为二进制。如:Insertintoprinters(printer_nbr,manufacturer,model,init_string)Values(12,’HP’,’Laserjet’,”HEXTORAW(‘1B45’));RAWTOHEX()
将一个二进制构成的字符串转化为十六进制。如:selectrawtohex(init_string)hextfromprinterswheremodel=LaserJet’andmanufacturer=’HP’;hext----------1B454、ROWIDTOCHAR()将ROWID数据类型转换为字符类型,见CHARTOROWID。5、TO_CHAR(date,’format’)根据format重新格式日期date的格式。如:SQL>selectto_char(sysdate,'yyyy/mm/ddhh24:mi:ss')fromdual;TO_CHAR(SYSDATE,'YY------------------2001/05/1823:05:36日期格式比较多,详细内容请参考原版资料。下面给出常用的日期格式代码:日期格式代码表日期代码格式说明例子AD或BCAD=AnnoDomini公元,BC=BeforeChrist公元前。不带点的公元或公元前‘YYYYAD’=1999ADA.D.或B.C.带点的公元或公元前‘YYYYA.D.’=1999A.D.
AM或PMAM=antemeridiem上午,PM=postmeridiem下午。不带点的上午或下午‘HH12AM’=09AMA.M.或P.M.带点的上午或下午‘HH12A.M.’=09A.M.DY星期几的缩写Mon,Tue,...DAY星期几的全拼Monday,Tuesday,...D一周的星期几,星期天=1,星期六=71,2,3,4,5,6,7DD一月的第几天,1à311,2,...31DDD一年的第几天,1à3661,2,3,...366J公元前的第几天(从公元前4712起?)2451514,2451515,...W一个月的第几周,1à51,2,3,4,5WW,IW一年的第几周,一年的ISO的第几周1,2,3,4,...52MM两为数的月01,02,03,...12MON月份的缩写Jan,Feb,Mar,...DecMONTH月份的全拼January,February,...RM罗马数字的月份,IàXIII,II,III,IV,...XIIYYYY,YYY,YY,Y四位数的年,三位数的年1999,999,99,9YEAR年的全拼NineteenNinety-nineSYYYY如果是公元前(BC),年份前负号-1250RR当前年份的后两位数字01代表2001年HH,HH1212小时制,1à121,2,3,...12HH2424小时制,0à230,1,2,3,...23MI一小时中的第几分,0à590,1,2,3...59
SS一分中的第几秒,0à590,1,2,3,...59SSSSS一天中的第几秒,0à863990,1,2,3,...86399../-;:标点符号表示法文字显示‘text’引号表示法文字显示6、TO_DATE(string,’format’)将一和字串转换为ORACLE的日期。如:Insertintodemo(demo_key,date_col)Values(1,
to_date(’04-Oct-1999’,‘DD-Mon-yyyy’));7、TO_MULTI_BYTE()将字符串中的单字节字符转换为多字节字符,如:8、TO_NUMBER()将给出的字符转换为数字,如:SELECTTO_NUMBER(‘1947’)“FISCAL_YEAR”FROMDUAL;FISCAL_YEAR----------19479、TO_MULTI_BYTE()及TO_SINGLE_BYTE将单字节转换为多字节或从多字节转换为单字节。4.6、其它的单记录函数1、BFILENAME(
,)指定一个外部二进制文件。如:
INSERT
INTO
file_tbl
VALUES
(BFILENAME
(’lob_dir1’,’image1.gif’));2、CONVERT(‘x’,’desc_set’[,‘source_set’])将x字段或变量的源source转换为desc,如:selectsid,serial#,username,DECODE(command,0,’None’,2,’Insert’,3,’Select’,6,’Update’,7,’Delete’,8,’Drop’,‘Other’)cmdfromv$sessionwheretype!=‘BACKGROUND’;关于DECODE在优化方面的内容在《Oracle8i/9i高级数据库管理》中查阅。3、DUMP(s,[,fmt[,start[,length]]])DUMP函数以fmt指定的内部数字格式返回一个VARCHAR2类型的值。如:SQL>colglobal_namefora30SQL>colDUMP_STRINGfora50SQL>setlin200
SQL>
select
global_name,dump(global_name,1017,8,5)
dump_string2fromglobal_name;DUMP_STRING
GLOBAL_NAME-------------------------------------
---------------------------------------------------------------ORA816.US.ORACLE.COMCharacterSet=ZHS16GBK:U,S,.,O,R4、EMPTY_BLOB()和EMPTY_CLOB()函数这两个函数都是用来对大数据类型字段进行初始化操作的函数,一般有:BLOB数据类型---EMPTY_BLOB()CLOB数据类型---EMPTY_CLOB()NCLOB数据类型---EMPTY_CLOB()Insertintoproposal(recipient_name,proposal_name,short_description,proposal_text,budget,cover_letter)values(2,’BRADOHMONT’,’REBUILDFENCE’,NULL,EMPTY_CLOB(),EMPTY_BLOB(),BFILENAME(‘proposal_dir’,’P2.DOC’));5、GREATEST()proposal_id,Typ=1Len=20
返回一组表达式中的最大值,即比较字符的编码大小。如:SQL>selectgreatest('AA','AB','AC')fromdual;GR-ACSQL>selectgreatest('啊','安','天')fromdual;GR-天即“天”的编码比“安”和“啊”都大。6、LEAST()返回一组表达式中的最小值,即比较字符的编码大小。如:SQL>selectleast('啊','安','天')fromdual;LE-啊7、UID函数返回标识当前用户的唯一整数,如:SQL>showuserUSER为"SYSTEM"SQL>l1*selectusername,user_idfromdba_userswhere
user_id=UIDSQL>/USERNAMEUSER_ID---------5
-----------------------------SYSTEM8、USER函数
返回当前用户的名字,如:SQL>selectuserfromdual;USER-----------------------------SYSTEM9、USERENV()返回当前用户环境的信息,opt选项可以是:ENTRYID返回当前用户会话的入口IDSESSIONID返回当前用户会话的IDTERMINAL返回当前系统会话的操作系统标识OSDBALABLE如果当前用户有DBA权限,则返回TRUE返回当前用户会话的标号返回当前用户的语言和区域
LANGUAGE
CLIENT_INFO为当前用户会话返回client-info域的值,这个值由dbms_application_info,set_client_info过程来设置。
LANGVSIZE
以ISO的三个字符表示当前用户会话所使用的语言。返回表达式的字节大小。
10、ISDBA函数查看当前用户是否是DBA,当SYSDBA角色有效是才返回TRUE,如:SQL>showuserUSERis"SYSTEM"SQL>selectuserenv('ISDBA')fromdual;USEREN-----FALSESQL>connectsys/sys@ora816Connected.SQL>selectuserenv('ISDBA')fromdual;USEREN-----FALSESQL>connectinternalConnected.SQL>selectuserenv('ISDBA')fromdual;USEREN------
TRUE11、SESSIONID函数返回审计会话标识,如:selectuserenv(‘SESSIONID’)aud_idfromdual;aud_id--------4734312、ENTRYID函数返回审计会话入口标识,当initsid.ora文件中的audit_trail=TRUE时可以用,如:selectuserenv(‘ENTRYID’)fromdual;USERENV(‘ENTRYID’)------------83564113、INSTANCE函数返回当前INSTANCE的标识,如:SQL>selectuserenv('INSTANCE')fromdual;USERENV('INSTANCE')------------------114、LANGUAGE函数返回当前环境的语言,如:
SQL>selectuserenv('LANGUAGE')fromdual;USERENV('LANGUAGE')---------------------------------------------------SIMPLIFIEDCHINESE_CHINA.ZHS16GBK15、LANG函数返回当前环境的语言的缩写,如:SQL>l1*selectuserenv('LANG')fromdualSQL>/USERENV('LANG')---------------------------------------------------ZHS16、TERMINAL函数返回用户的终端或机器的标识,如:SQL>selectuserenv('TERMINAL')fromdual;USERENV('TERMINA---------------ZHAOYUANJIE17、VSIZE()返回x的大小(字节)数,如:SQL>selectvsize(user),userfromdual;VSIZE(USER)USER
----------6
----------------------------SYSTEM
4.7、多记录组函数1、AVG([{DISTINCT|ALL}])求平均值,ALL表示对所有求平均值,DISTINCT只对不同的求平均值,相同只取一个。SQL>l1*selectavg(sal)fromempSQL>/AVG(SAL)---------2073.214292、MAX([{DISTINCT|ALL}])求最大值,ALL表示对所有求最大值,DISTINCT只对不同的求最大值,相同只取一个。SQL>selectmax(sal)fromemp;MAX(SAL)---------50003、MIN([{DISTINCT|ALL}])求最小值,ALL表示对所有求最小值,DISTINCT只对不同的求最小值,相同只取一个。
SQL>selectmin(sal)fromemp;MIN(SAL)---------8004、STDDEV([{DISTINCT|ALL}])求标准差,ALL表示对所有求标准差,DISTINCT只对不同的求标准差,相同只取一个。SQL>selectstddev(sal)fromemp;STDDEV(SAL)----------------1182.503225、VARIANCE([{DISTINCT|ALL}])求协方差,ALL表示对所有求协方差,DISTINCT只对不同的求协方差,相同只取一个。SQL>selectvariance(sal)fromemp;VARIANCE(SAL)------------------------