一、常用函数
1.
CHR(n => ): 返回与n等价的字符,与ASCII互为反函数。
ASCII(ch => )
Select CHR(65) T from dual; =>A
Select ASCII('A') T from dual; =>65
CONCAT(LEFT => ,RIGHT => ):返回LEFT串接上RIGHT的字符串。与 || 函数作用一样。
Select CONCAT('a','b') T from dual; =>ab
INITCAP(ch => ):将字符串中每个单词第一个字母转大写,其它字母转小写。
Select INITCAP('i am chinese!') T from dual; =>I Am Chinese!
LOWER(ch => ) :返回ch的小写形式。
UPPER(ch => ): 返回ch的大写形式
Select LOWER('I Am Chinese!') T from dual; =>i am chinese!
LPAD(STR1 => ,LEN => [,PAD =>] ):以PAD字符串左填充STR1,使STR1到达LEN长度。
RPAD(STR1 => ,LEN => ,PAD => )
STR1:被填充的字符串;LEN:填充后的长度;PAD:默认值为空格;
Select LPAD('abc',10,'x') T from dual; =>xxxxxxxabc
LTRIM(STR1 => [,TSET =>] ):从STR1串中左删除TSET串。
RTRIM(STR1 => [,TSET =>] )
Select LTRIM('aaabac','a') T from dual;
REPLACE(SRCSTR => ,OLDSUB => [,NEWSUB =>] ):以NEWSUB代替所有在SCRSTR中出现的OLDSUB。
TRANSLATE(STR1 => ,SRC => ,DEST => )
SRCSTR:被操作的串;OLDSUB:被代替的串;NEWSUB:代替OLDSUB的新串。如果没有指定值,那么在SRCSTR中出现的OLDSUB都将被删除。
Select REPLACE('1323435','3') T from dual; =>1245
Select REPLACE('1323435','3','A') T from dual; =>1A2A4A5
2.
SUBSTR(STR1 => ,POS => [,LEN =>] ):从STR1串的POS位置开始截取LEN长度的子串
STR1:字串源;POS:如果等0那么等1,如果是正数从左扫描,负数从右扫描。LEN:为空时,取整个串。
Select SUBSTR('ABCDEF',3) T from dual; =>CDEF
Select SUBSTR('ABCDEF',3,2) T from dual; =>CD
Select SUBSTR('ABCDEF',-3,2) T from dual; =>DE
INSTR(STR1 => ,STR2 => [,POS => [,NTH =>]]):返回STR1包含STR2的位置。
POS(1): 扫描的起始位置,如果是正数从左扫描,负数从右扫描。NTH(1):扫描第NTH次出现被返回。
Select INSTR('abcdefabcdef','e') T from dual; =>5
Select INSTR('abcdefabcdef','e',1,1) T from dual; =>5
Select INSTR('abcdefabcdef','e',-1,1) T from dual; =>11
LENGTH(ch => ):返回CH串的长度。
Select LENGTH('abcdefabcdef') T from dual; =>12
3.数字函数
ABS(n => ):返回N的绝对值。
ACOS(N => ):返回N的反余弦的值。
ASIN(N => ):返回N的反正弦的值。
ATAN(N => ):返回N的反正切的值。
CEIL(N => ):返回大于或等于N的最小整数值。
Select CEIL(18.1) T from dual; =>19
Select CEIL(-18.1) T from dual; =>-18
COS(N => ):返回N的余弦值。
COSH(N => ):返回N的双曲余弦值。
EXP(N => ) :返回e的N次幂。
FLOOR(N => ):返回小于或等于N的最大整数值。
Select FLOOR(18.1) T from dual; =>18
Select FLOOR(-18.1) T from dual; =>-19
LN(N => ): 返回N的自然对数。N>0
LOG(LEFT => ,RIGHT => ):返回以X为底的Y的对数。
MOD(X,Y):返回X除以Y的余数。如果Y是0,则返回X。
Select MOD(23,5) T from dual;
POWER(n => ,e => ):返回N的E次幂。
ROUND(LEFT => [,RIGHT => ]):返回舍入到小数点右边RIGHT位的LEFT值。RIGHT缺省值为0。如果RIGHT是负数,那么舍入到小数点左边相应的位上。
Select ROUND(123.45,1) T from dual; =>123.5
Select ROUND(123.45,-1) T from dual; =>120
SIGN(n => ): 如果N<0,返回-1; 如果N=0,返回0; 如果N>0,返回1。
SIN(n => ): 返回n的正弦。
SINH(n =>): 返回n的双曲正弦值。
SQRT(n => ): 返回n的平方根,n不能为负数。
TAN(n => ):返回n的正切值。
TANH(n => ): 返回n的双曲正切值。
TRUNC(n => [,places => ]): 返回截尾到places位小数的n的值。places缺省值为0,这会将n截尾为一个整数值;如果places为负数,那么截尾到小数点左边相就的位上。
Select TRUNC(1234.56) FROM DUAL; =>1234
Select TRUNC(1234.56,1) FROM DUAL; =>1234.5
Select TRUNC(1234.56,-1) FROM DUAL; =>1230
4.日期函数
ADD_MONTHS(LEFT => ,RIGHT => ):返回日期LEFT加上RIGHT个月后的结果.
Select ADD_MONTHS(SYSDATE,1) FROM DUAL; =>2005-7-13 18:22:33 LAST_DAY(RIGHT => ): 返回日期RIGHT该月最后一天的日期.
Select LAST_DAY(SYSDATE) FROM DUAL; =>2005-6-30 18:23:41 MONTHS_BETWEEN(LEFT => ,RIGHT => ):返回LEFT和RIGHT之间月的数目.
Select MONTHS_BETWEEN(SYSDATE,TO_DATE('1980-11-14','YYYY-MM-DD')) FROM DUAL;
=>294.992592592593
ROUND(D => [,FORMAT=> ]):将日期D按照FORMAT指定的格式进行舍入.FORMAT的缺省值为’DD’.
Select ROUND(SYSDATE,'YYYY') FROM DUAL; =>2005-1-1
SYSDATE :返回本地数据库的日期和时间.
Select SYSDATE FROM DUAL; =>2005-6-14 8:16:12
TRUNC(D => [,FORMAT=> ]):返回截尾到由FORMAT指定的单位的日期D.
ROUND和TRUNC相关的日期格式
格式模型: 舍入或截尾单位
YYYY 年
MM 月
DD 天
DAY/D 一周的第一天
HH 时
MI 分
D1-D2:返回两日期之间相差的天数,返回NUMBER,小数形式表示一天的几分之几.
D1+D2:无效(N/A)
D1±N:返回D1加上/减去N天,N可以为实数(表示一天的几分之几),返回DATE类型.
5.转换函数
TO_CHAR(d [, Format[, Nls_Date_Language] ]):将日期d转换为一个V ARCHAR2类型的字符串.
Select TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS PM') FROM DUAL;
=>2005-06-14 09:48:56 上午
TO_CHAR(d [, Format[, Nls_Date_Language] ]):
Select to_char(131312.200,'FM999,999,990.0000') From dual
二、类型定义
1.记录类型
Type Record_Type Is Record(
Field1 Type1[Not Null][:=Expr1],
Field2 Type2[Not Null][:=Expr2],
…
FieldN TypeN[Not Null][:=ExprN],
);
Rec_Sample1 Record_Type;
2.
三、游标操作
1.操作方式:
声明游标
CURSOR cursor_name IS SELECT_statement
Type cur_TypeName Is Ref Cursor Return ReturnType;
为查询打开游标
Open cursor_name
Open cursor_variable For select_statement;
将结果提取( FETCH )到PL/SQL变量中
FETCH cursor_name INTO list_of_variables
FETCH cursor_name INTO pl/sql_record
关闭游标
CLOSE cursor_name
2.示例
静态游标
Declare
Cursor cur_cstest Is
Select *
From stm_constant;
rec_cstest cur_cstest%Rowtype;
Begin
Open cur_cstest;
Fetch cur_cstest Into rec_cstest;
While cur_cstest%Found Loop
dbms_output.put_line(stantkey);
Fetch cur_cstest Into rec_cstest;
End Loop;
Close cur_cstest;
End;
游标变量
Declare
Type Cur_Sctype Is Ref Cursor Return Stm_Constant%Rowtype;
Cur_Cstest Cur_Sctype;
Rec_Cstest Cur_Cstest%Rowtype;
Begin
Open Cur_Cstest For
Select * From Stm_Constant Sc;
Fetch Cur_Cstest
Into Rec_Cstest;
While Cur_Cstest%Found Loop
Dbms_Output.Put_Line(Rec_Cstest.Constantkey);
Fetch Cur_Cstest
Into Rec_Cstest;
End Loop;
Close Cur_Cstest;
End;
3.游标属性
%FOUND :如果前一个FECTH返回一行,那么返回TRUE
%NOTFOUND :与%FOUND的逻辑相反
%ISOPEN :相关的游标是否已经打开。如果被打开了,%ISOPEN将返回TRUE。
%ROWCOUNT :返回目前位置由游标返回的行的数目。
(附,隐式游标通过使用SQL%ROWCOUNT实现获取游标的行数。)
四、过程和函数
1.过程
1.1创建过程
CREATE[ OR REPLACE] PROCEDURE procedure_name
[(argument[ {IN|OUT|IN OUT}] type,
…
argument[{IN|OUT|IN OUT}] type)] {IS |AS}
procedure_body
2.函数
2.1创建函数
CREATE[ OR REPLACE] FUNCTION function_name
[(argument[ {IN|OUT|IN OUT}] type,
…
argument[{IN|OUT|IN OUT}] type)]
RETURN return_type {IS |AS}
function _body
说明:
3.1结构
CREATE OR REPLACE PROCEDURE procedure_name AS
/*Declarative section is here*/
BEGIN
/*Executable section is here*/
EXCEPTION
/*Exception section is here*/
END[procedure_name]
3.2参数的缺省值
parameter_name [mode ] parameter_type [:=DEFAULT] initial_value zz
3.3注:在过程声明中,试图限制CHAR、V ARCHAR2参数的长度以及限制NUMBER参数的精度/刻度范
围都是非法的(使用%TYPE例外)。限制来自传递给形参的实参。
3.4删除过程和函数
DROP PROCEDURE procedure_name;
DROP FUNCTION function_name;
五、包
1.创建包头
CREATE [OR REPLACE] PACKAGE package_name {IS|AS}
Procedure_specification|
Function_specification|
V ariable_declaration|
Type_definition|
Excetion_declaration|
Cursor_declaration
END [package_name];
2.194
六、触发器
1.CREA TE [OR REPLACE] TRIGGER trigger_name
|BEFORE|AFTER|trigger_event ON table_reference
[FOR EACH ROW[WHEN trigger_condition]]
trigger_body;
注:语句:INSERT、DELETE、UPDA TE定义哪种DML语句会使触发器点火。
定时:BEFORE或AFTER定义在DML语句执行之前/之后点火触发器。
级别:行级(FOR EACH ROW:影响到的每行都触发一次)、语句(共[只]触发一次)
2.禁用/启用触发器:
ALTER TRIGGER triggername [DISABLE|ENABLE];
3.触发器点火次序
1.执行BEFORE 语句级触发器
2.对于受语句影响的每一行:
a)执行BEFORE行级触发器
b)执行DML语句
c)执行AFTER行级触发器
3.执行AFTER语句级触发器
4.
5.触发器谓词: Inserting、Updating、Deleting
如果触发的是Insert,则Inserting为True;
如果触发的是Update,则Inserting为True;
如果触发的是Delete,则Inserting为True;
七、其它
1.––Decode妙用
Select decode(sign(2-1),-1,-1,1) From dual
2.--CASE用法
字符串截取第几行Select (Case
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论