打破沙锅__Oracle

一、动态Sql

       在PL/Sql中DML和事务控制语句可以使用,然而DDL和会话控制语句却不能使用,只有通过动态Sql可以实现。
       Execute Imediate ' strCmd' [using argsList]

二、异常

       有三种类型的异常。

       1、预定义异常---由数据库系统触发

       2、非预定义异常---可以把自定义异常注册为预定义级别的或系统级的异常。
              Declare
                  Exception myEpt;
                  Pragma Exception_Init(myEpt,-1);//-1或者别的数字特指系统预定义异常
              Begin
                     ----
                        Exception
                               when myEpt then
                                    -----;
 
              End
             
       3、自定义异常
             注意:用户自定义错误信息Raise_Applicion_Error(-20000- -20999,'自定义错误信息');
三、游标管理---数据库的任何操作都离不开游标的使用。
        游标的属性:%Found、%NotFound、% RowCount、%IsOpen
       1、游标类型:
             静态游标:分为隐式游标和显式游标。
                                 隐式游标指Dml语句执行时数据库系统所使用的游标。游标的属性加‘SQL’前缀
                                 显式游标----
                                   A、声明:Cursor cursor_name [params...] [Return return_type]
                                    is/as  selectstr 
                                   B、打开:open cursor_name ;
                                   C、提取:Fetch  cursor_name  into ...
                                    D、Close cursor_name ;
                注意:select 语句只能包括一个表(指更新时),而且update和Delete 语句只能在打开游标并提取特定行后才能使用。
              在plSql中利用游标使用where current of  cursor_name 字句进行每行记录的更新或修改。
                                 游标是可以带参数的。Sql中不行。
            ref游标:动态游标或引用游标。
                             A、Type ref_type is Ref Cursor定义游标类型
                             B、ref_type  VariantName声明游标变量
                            C、open VariantName for 'selectStr'  [using argsList]打开游标运行时获得结果集
                            D、Close VariantName;关闭游标
          注意:Execute Imediate 只能返回单行或不返回,而ref游标可以返回任何结果集合。
         注意它是一个引用,可以返回到客户端程序。在存储过程中不允许出现select * from tb语句,只能出现select into 语句。只能使用ref 游标返回结果集。这与sqlServer是不同的。
          不能在程序包中声明游标变量,但是可定义游标类型。
          不能null
          不能使用比较运算
         不能在数据库列中存储游标变量。
四、子程序和程序包
        1、子程序包括存储过程和函数。
              存储过程不能有返回值,但可以有输入输出参数。而函数有返回值,只有输入数据库类型参数。
              存储过程中可以有return 语句。
       2、程序包是子程序和变量、常量的集合,它更象是一个包含了数据成员和成员方法的类。
           性能上包内的成员同时加载性能更优。
       3、独立事务的声明---- PragMa Autonomous Transaction在begin之前。
       4、函数和过程的纯度级别--
                WNDS|RNDS|WNPS|RNPS(不允许写数据库、不允许读数据库、不允许写程序包变量、不允许读程序包变量)
               语法:pragma restrict_references(函数过程名字,纯度级别)
        5、程序包中的游标。游标必须要有返回类型
五、触发器
        当在插入数据时,用before 触发器,当审计数据时用after触发器。注意when字句的使用,设计触发的条件
       触发器类型:
         1、行级触发器for each row
         2、语句触发器
         3、before/after/instead of(视图触发器)
         4、模式触发器(ddl 触发器)
         5、数据库触发器
             
                                  
                                               

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值