oracle菜鸟日记5

本文深入探讨了PL/SQL编程中的关键概念和技术,包括游标的使用、异常处理、函数与过程的区别、程序包的优势及触发器的限制等。此外,还介绍了如何创建并调用函数、处理编译错误以及维护程序包等内容。
pl/sql编程部分:
1. 游标一般都要和loop循环一起使用,因为,游标是一行一行的取,取完一行就往下移一行。


2. 对于for循环的游标,for循环语句隐含申明的索引变量,该变量是记录变量,其结构与游标查询返回的结构集合的结构相同;


3. 隐式游标的名字叫SQL,对于增删改查这四个dml语句,系统会自动打开一个隐式的游标SQL来指向这四个操作所对应的行;


4. 游标变量: type cuosor_name is ref cursor;


5. 记录类型,记录变量


6. 记录表


7. 对于游标变量,当它进行完毕一个loop循环的时候(因为游标是个处理区域),他会释放这个游标,接下来,它又可以指向另一个select语句了


8. oracle中的非预定义异常其实就是自己定义一个异常,然后再与oracle错误代码联系起来,在进行执行
(1).《异常情况》 exception;
(2).pragma exception_init(<异常情况>,<错误代码>);


9. 函数的话最后都要明确的return+变量,而过程则不需要return,只要形参中有out的变量,则都可以返回;


10. 创建函数或者存储过程时可以指明过程,函数的调用权限,create function/procedure(.....) authid definer(函数,包,过程)
授权的话是:grant execute on 函数名/存储过程名 to 用户名或者public(全部用户);


11. 使用程序包的好处:当第一次使用某个程序包的是时候,系统会将该包全部调到内存中去,第二次访问程序包里面的元素的时候,oracle将直接从
内存中读取,而不需要进行i/o操作而影响速度;


12. 异常的定义:异常名 exception;抛出异常:raise 异常名;
   如果要处理未命名的内部异常,则需要使用others异常处理器
?????????????????dbms_output.put_line(sqlcode||'------'||sqlerrm)?????????????????????


13. 对于for循环里面的循环变量,是可以随意隐式定义的,它的类型也是隐式定义的,对于for循环的游标,for 循环变量 in 游标名,都是隐式定义好
的,而对于表类型的for循环,表类型变量(主键),这里面的主键的类型是binary_integer,当你直接用循环变量的时候作为表类型的主键时,默认那
个类型,而当你要用其他自定义的变量来当表类型的主键的时候,那么那个自己定义的变量的类型应该是binary_integer


14. 函数的调用方式:(1).利用一个简单的匿名过程来调用
                            begin
                              dbms_output.put_line(函数名(参数1,参数2.....));
                            end;
                            /
                 (2).利用select 函数名(参数1,参数2......) from dual;
                 (3).利用绑定变量    ariable 绑定变量名 类型                       --注意这里没有分号
                                      execute :绑定变量名 :=函数名(参数1,参数2)   --注意这里的绑定变量只能调用返回一个值的函数         
                 (4).因为只返回一个值,所以可用一个变量取出它的返回值即可


15. 在更新表的结构后,一定要记得重新编译依赖于它的程序包,在更新包说明或包体后,也应该重新编译包说明和包体
  alter package package_name compile [package|body|specification];
        与包有关的视图 user_source,dba_source,all_source,通过这些视图可以查找包的源代码


16. 一张表上最多只能放12个触发器,如果一张表上的触发器越多,那么对表上的dml操作性能的影响就越大。


17. 对于行触发器的pl/sql块和when 子句中可以使用相关名称参照当前的新,旧列值,默认的相关名称分别为 old和new,在pl/sql块里面必须在new和
old前面加上“:”,而在when后面不用加“:”,因为,when后面加的是关系表达式,也不能加select子句


18. 触发器中不能有数据库事务控制语句 commit;roolback;savepoint,,但是过程或函数中可以使用commit或者rollback;


19. 触发器中的多个触发事件的组合必须用or隔开,而不能用and相连


20. 对于条件谓词,inserting,updating(列1,列2,列.....),deleting,都是用在if语句后面的,当insert时,insrting就为true,当undate
括号中的列时,undating就为true,当delete时,deleting就为true。


21. create table 表名 as select* from emp where 1=2;该语句是创建一张表,并赋值emp的表结构


22. 触发器中,when (old.deptno=10),值得注意的地方是这个old的应用


23. 创建触发器的时候在create 和begin之间不需要一个分号,在oracle中分号表示执行之前的语句,因为在begin和create之间都是创建trigger的
语句,来修饰trigger,所以不需要一个分号


24. 一般我们在创建函数或者过程的时候,如果出现了编译错误,那么可能有以下原因:[解决方法,可以使用show error]
(1).在中文输入法下输入了单引号,逗号,分号,冒号
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值