Oracle存储过程的疑难问题

Oracle存储过程
1、AS和IS
  Oracle中的AS和IS是Oracle为了方便而设置的同义词基本上没有不同 。
  使用规则:
 (1)在创建存储过程(procedure)/函数(function),以及自定义类型(type)和包(package)时,使用AS和IS无区别。
 (2)在创建视图(view)时,只能使用AS而不能使用IS。
 (3)在声明游标(cursor)时,只能使用IS而不能使用AS。
2、=>:
3、in、out、inout
 (1)in:in模式是参数的默认模式,这种模式就是在程序运行的时候已经具有值,在程序体中值不会改变。

      参数in的使用(代表输入,意思说你的参数要传到存过过程的过程里面去)

      in 表示p_parameter是输入参数,就是运行过程前,要你输入

      in 表示本参数只是传入参数(默认选项),在程序中不能够修改它的值,你可以试验下,如果在程序中试图修改它的值,就会报错。

                          
 (2)out:out模式定义的参数只能在过程体内部赋值,表示该参数可以将某个值传递到存储过程的调用处。

       参数out的使用(代表往外输出)

       out 表示输出参数 就是运行过程后,显示出来的结果,PLSQL中会用黄色标出

       out 表示本参数只是传入参数,在程序中可以对他进行编辑修改它的值,而且不会受你传入参数有没有值的影响,

         比如一个变量初始值为a=100,你把它作为out参数传入,即使在程序中不编辑它,这个100也不会被带入程序中。


 (3)inout:inout模式通俗来说就表示既可以向过程体外传递参数也可以从过程体内传出数值。

        参数inout的使用(既能输入一个值又能传出来一个值)

        in out 就是输入输出参数,就是运行过程前,要你输入,运行过程后,显示出来的最终的这个参数的值

        in out 表示是上面两个的合并了,既能传入值,也能穿出值。

                                 
4、:=和=:和=
 (1):=表示是赋值语句
 (2)=:是oracle触发器里的:new和:old行处理时的新值和旧值的行记录
         就是固定用法,和=没有关系。
   例:(1)UPDATE E1 SET DEPTNO = 'ABC'||:NEW.DEPTNO WHERE DEPTNO =:OLD.DEPTNO;
        也可以在触发器中定义一个变量 v_aaa,然后赋值:      
        v_aaa := :NEW.DEPTNO;
     (2)变量绑定:变量绑定是指在sql语句的条件中使用变量而不是常量。比如shared pool
        里有两条sql语句,select * from tab1 where col1=1;select * from tab1 where col1=2;
        对oracle数据库来说,这是两条完全不同的SQL,对这两条语句都需要进行hard parse。
        因为oracle会根据sql语句的文本去计算每个字符在内存里的hash值,因此虽然上述两条SQL
        只有一个字符不一样,oracle根据hash算法在内存中得到的hash地址就不一样,所以oracle
        就会认为这是两条完全不同的语句。而如果将上述SQL改写成select * from tab1 where col1=:var1;,
        然后通过对变量var1的赋值去查询,那么oracle对这条语句第一次会进行hard parse,
        以后就只进行soft parse。假设某条语句被重复执行了几十万次,那么使用bind var带来的好
        处是巨大的。一个应用程序如果bind var使用不充分,那么几乎一定会伴随着严重的性能问题。
        绑定变量是相对文本变量来讲的,所谓文本变量是指在SQL直接书写查询条件,这样的SQL在不同
        条件下需要反复解析,绑定变量是指使用变量来代替直接书写条件,查询bind value在运行时传
        递,然后绑定执行。优点是减少硬解析,降低CPU的争用,节省shared_pool ;缺点是不能使
        用histogram,sql优化比较困难。
     (3)=是比较操作符,判断两边参数是否相等,或者在更新语句中进行赋值。

5、过程和函数的使用
  核心提示:本质上没区别。只是函数有限制只能返回一个标量,而存储过程可以返回多个。并且函数是可以
  嵌入在SQL中使用的,可以在SELECT等SQL语句中调用,而存储过程不行。执行的本质都一样。
6、触发器
7、同义词
  synonym:同义词相当于是对象的小名,作用是缩短对象的长度,便于书写与访问。
  例:1、假设有表s_student,为表t_student创建同义词std
      create synonym std for t_student
    2、此时使用同义词std查询表t_student中所有数据    
      select * from std
    3、删除同义词
      drop synonym std

原文地址:https://www.cnblogs.com/lxm11/p/12187161.html