加入收藏 | 设为首页 | 会员中心 | 我要投稿 淮南站长网 (https://www.0554zz.cn/)- 管理运维、图像技术、智能营销、专属主机、5G!
当前位置: 首页 > 教程 > 正文

ORACLE存储过程简明教程

发布时间:2022-08-05 09:58:20 所属栏目:教程 来源:互联网
导读:本教程为我参考文档结合实践所写,原创。 26.1 创建做试验的表及数据 create table emp_ly as select * from emp; 说明:注意复制表结构及数据不是sql server里面的语法select * into emp_ly from emp,这在oracle里面行不通,当然如果仅复制结构的话使用 cr

  本教程为我参考文档结合实践所写,原创。
 
 
 
 
  26.1 创建做试验的表及数据
 
  create table emp_ly as
 
  select * from emp;
 
  说明:注意复制表结构及数据不是sql server里面的语法select * into emp_ly from emp,这在oracle里面行不通,当然如果仅复制结构的话使用
 
  create table emp_ly as
 
  select * from emp
 
  where 1<>1;
 
  即可。
 
  26.2创建一个存储过程用来做试验
 
  create or replace procedure Sal_raise(emp_no number,shuliang number)
 
  as
 
  begin
 
  update emp_ly set sal=sal + shuliang where empno=emp_no;
 
  end;
 
  /
 
  说明:一定不能少begin end;这两个关键字,不然创建存储过程会有提示
 
  Warning: Procedure created with compilation errors
 
  意思是:警告,存储过程虽然创建了,但是有编译错误。
 
  查看运行错误可以输入 SHOW ERRORS;
 
  存储过程的声明参数类型时不能带长度,精度或者范围,比如这个存储过程emp_no number这个参数,就不能声明为emp_no number(4),同理,varchar2作为参数的类型是可以的,但是以varchar2(10)作为参数类型是不行的。
 
  在sql plus里面创建存储过程,最后一个反斜线不能少,这是告诉编译器运行这个PL/SQL块,但是在pl/sql developer的SQL Window创建则不需要这个反斜线,选择输入的代码按F8键执行即可,缺点是编译出错不会提示。
 
  26.3 调用存储过程
 
  A.在存储过程或者触发器中调用存储过程
 
  使用存储过程名和参数即可,比如Sal_raise(7369,200);
 
 
 
  B. 从交互式oracle工具中调用存储过程
 
  在sql plus中调用,可以使用匿名块的方式调用,如
 
  begin
 
  Sal_raise(7369,200);
 
  end;
 
  /
 
  还可以使用EXECUTE或者CALL的语法调用,如
 
  execute Sal_raise(7369,200);
 
  call Sal_raise(7369,200);
 
 
 
  值得注意的是,在sql plus中执行完了,如果没有输入明确的commit;命令数据是不会实际写到表的,但是在SQL Window窗口中只能通过
 
  begin
 
  Sal_raise(emp_no=>7369,shuliang=>200);
 
  end;
 
  方式调用存储过程,而且执行结果不需要输入commit;命令也会直接写入表。
 
 
 
  26.4传入存储过程参数的三种方法:
 
  Execute Sal_raise(7369,200);  
 
  Execute Sal_raise(shuliang=>200, emp_no=>7369);
 
  execute Sal_raise(7369,shuliang=>200);
 
  第一种为常用方法,传入参数顺序和存储过程声明参数顺序一样
 
  第二种为参数名称和参数值一一对应法,可以不按照存储过程声明参数顺序传入。
 
  第三种为混合法,要求没有参数名称的值要写在前面,还需要按照声明参数的顺序才行,比如execute sal_raise(200,emp_no=>7369);就是不行的。
 
 
 
  26.5 查看存储过程代码
 
  如果查看存储过程的所有者,创建时间,是否有效等信息可以使用如下语句:
 
  select * from all_objects where object_name='SAL_RAISE';
 
  如果要查看存储过程的代码,则可以使用如下代码:
 
  select text from all_source where name='SAL_RAISE' order by line;
 
  请一定注意的是:上面着两个sql要有记录返回,一定要将存储过程的名字全部用大写,否则会没有记录返回。
 
 
 
  26.6 带输出参数的存储过程
 
  稍微改造下成为带输出参数的存储过程:
 
  create or replace procedure Sal_raise(emp_no number,shuliang number,sal_now out number)
 
  as
 
  begin
 
  update emp_ly set sal=sal + shuliang where empno=emp_no;
 
  select sal into sal_now from emp_ly where empno=emp_no;
 
  end;

(编辑:淮南站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读