oracle存储过程 语法 函数 总结.docx

上传人:b****5 文档编号:7962661 上传时间:2023-01-27 格式:DOCX 页数:7 大小:16.44KB
下载 相关 举报
oracle存储过程 语法 函数 总结.docx_第1页
第1页 / 共7页
oracle存储过程 语法 函数 总结.docx_第2页
第2页 / 共7页
oracle存储过程 语法 函数 总结.docx_第3页
第3页 / 共7页
oracle存储过程 语法 函数 总结.docx_第4页
第4页 / 共7页
oracle存储过程 语法 函数 总结.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

oracle存储过程 语法 函数 总结.docx

《oracle存储过程 语法 函数 总结.docx》由会员分享,可在线阅读,更多相关《oracle存储过程 语法 函数 总结.docx(7页珍藏版)》请在冰豆网上搜索。

oracle存储过程 语法 函数 总结.docx

oracle存储过程语法函数总结

oracle存储过程语法函数总结

对于oracle 存储过程是很优秀的一种脚本语言。

下面是一些整理:

 

 

一,Plsql调试存储过程:

1、 在oracle的配置和移植工具àNETMANAGER中配置连接

2、 在plsql中新建SQL窗口,编写存储过程

3、 在plsql中新建测试窗口,在begin end之间调用

4、 查看编译错误:

在命令窗口中showerrorsprocedureprocedure_name 

或者 编辑的方式打开存储过程,在编译时会有错误提示

 

一,Plsql调试存储过程:

1、 在oracle的配置和移植工具àNETMANAGER中配置连接

2、 在plsql中新建SQL窗口,编写存储过程

3、 在plsql中新建测试窗口,在begin end之间调用

4、 查看编译错误:

在命令窗口中showerrorsprocedureprocedure_name 

或者 编辑的方式打开存储过程,在编译时会有错误提示

二,oracle存储过程基本语法

1、 oracle存储过程结构:

CREATEORREPLACEPROCEDURE存储过程名

输入输出参数

IS

变量定义

BEGIN

代码;

END存储过程名;

2、 if语句:

If逻辑表达式then

Begin

End;

Endif;

If 逻辑表达式then

Begin

End;

Else

Begin

End;

Endif;

If逻辑表达式then

Begin

End;

Elseif逻辑表达式then

Begin

End;

Else

Begin

End;

Endif;

3、 For循环

For in loop

Endloop;

E.g:

CREATEORREPLACEPROCEDURETEST

is

BEGIN

foriin1..100LOOP

DBMS_OUTPUT.put_line(i);

endLOOP;

ENDTEST;

注:

这里的i可以不用申明,并且在循环体中,i会自增

4、 while循环

While条件语句loop

Begin

End;

EndLOOP;

E.g:

CREATEORREPLACEPROCEDURETEST

is

iint:

=1;

BEGIN

whilei<100LOOP

DBMS_OUTPUT.put_line(i);

i:

=i+1;

endLOOP;

ENDTEST;

注:

这里的i需要申明,并且循环体中,要对i进行改变

5、 游标的使用:

定义游标

打开游标

提取数据

关闭游标

E.g:

CREATEORREPLACEPROCEDURETEST

is

v_fidnvarchar2(80);

Cursorcur_testis

selectfidfromt_pm_user;--定义游标

BEGIN

opencur_test;--打开游标

ifcur_test%notfound 

then --判断游标中数据是否为空

rollback;

endif;

loop--循环游标

fetch 

cur_testintov_fid;--提取游标数据

DBMS_OUTPUT.put_line(v_fid);

EXIT 

WHENcur_test%NOTFOUND; --游标数据为空后退出循环

endloop;

closecur_test;--关闭游标 

ENDTEST;

三,oracle与sqlserver部分差异

1、 常用函数差异

Ø 绝对值

  S:

selectabs(-1)value

  O:

selectabs(-1)valuefromdual

Ø 取整(大)

  S:

selectceiling(-1.001)value

  O:

selectceil(-1.001)valuefromdual

Ø 取整(小)

  S:

selectfloor(-1.001)value

  O:

selectfloor(-1.001)valuefromdual

Ø 取整(截取)

  S:

selectcast(-1.002asint)value

  O:

selecttrunc(-1.002)valuefromdual

Ø 四舍五入

  S:

selectround(1.23456,4)value1.23460

  O:

selectround(1.23456,4)valuefromdual1.2346

Ø 取随机数

  S:

selectrand()value

  O:

selectsys.dbms_random.value(0,1)valuefromdual

Ø 如何处理null值(F2中的null以10代替)

  S:

selectF1,IsNull(F2,10)valuefromTbl

  O:

selectF1,nvl(F2,10)valuefromTbl

Ø 连接

  S:

select'11'+'22'value

  O:

selectCONCAT('11','22') value fromdual 

Ø 子串位置--返回3

  S:

selectCHARINDEX('s','sdsq',2)value

  O:

selectINSTR('sdsq','s',2)valuefromdual

Ø 求子串

  S:

selectsubstring('abcd',2,2)value

  O:

selectsubstr('abcd',2,2)valuefromdual

Ø 子串代替返回aijklmnef

  S:

SELECTSTUFF('abcdef',2,3,'ijklmn')value

  O:

SELECTReplace('abcdef','bcd','ijklmn')valuefromdual

Ø 子串全部替换

  S:

没发现

  O:

selectTranslate('fasdbfasegas','fa','我')valuefromdual

Ø 长度

  S:

len,datalength

  O:

length

Ø 左补空格(LPAD的第一个参数为空格则同space函数)

  S:

selectspace(10)+'abcd'value

  O:

selectLPAD('abcd',14)valuefromdual

Ø 右补空格(RPAD的第一个参数为空格则同space函数)

  S:

select'abcd'+space(10)value

  O:

selectRPAD('abcd',14)valuefromdual

Ø 删除空格

  S:

ltrim,rtrim

  O:

ltrim,rtrim,trim

Ø 系统时间

  S:

selectgetdate()value

  O:

selectsysdatevaluefromdual

Ø 求日期

  S:

selectconvert(char(10),getdate(),20)value

  O:

selecttrunc(sysdate)valuefromdual

  selectto_char(sysdate,'yyyy-mm-dd')valuefromdual

Ø 求时间

  S:

selectconvert(char(8),getdate(),108)value

  O:

selectto_char(sysdate,'hh24:

mm:

ss')valuefromdual

Ø 字符串转时间

  S:

可以直接转或者selectcast('2004-09-08'asdatetime)value

  O:

SELECTTo_date('2004-01-0522:

09:

38','yyyy-mm-ddhh24-mi-ss')vauleFROM 

DUAL

Ø 求两日期某一部分的差(比如秒)

  S:

selectdatediff(ss,getdate(),getdate()+12.3)value

  O:

直接用两个日期相减(比如d1-d2=12.3)

  SELECT(d1-d2)*24*60*60vauleFROMDUAL

Ø 根据差值求新的日期(比如分钟)

  S:

selectdateadd(mi,8,getdate())value

O:

SELECTsysdate+8/60/24vauleFROMDUAL

2、 其它差异

Ø 返回记录集

S:

直接在存储过程中用select即可

O:

一般在参数中定义一个游标类型的输出参数,在过程体中用open游标名称for select的方式返回记录集

Ø 代码格式

S:

语句结尾不用加分号

O:

语句结尾需要加分号

Ø 临时表

S:

一般动态创建临时表,临时表是一种”内存表”,不用后会自动删除表结构

O:

提前创建好临时表,oracle中临时表保存的是一个会话或者事务的数据,当断开连接或事务提交回滚后,临时表中的数据自动清空(清空的只是当前会话的临时表数据),但表结构还存在。

由于Oracle不是一种内存中的数据库. 

所以如果Oracle类似SQLServer频繁的对临时表进行建立和删除,必定会影响性能.所以Oracle会保留临时表的定义直到用户DROP 

TABLE。

Ø 自增长字段

S:

有专门的自增长字段

O:

需要在数据库中创建序列(sequence),使用时用序列名称.Nextval获得

Ø 执行字符串的sql语句

S:

exec(sql字符串)

O:

executeimmediatesql字符串;

Ø 字符串连接

S:

用+号

O:

用||号

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1