ORACLE存储过程简明教程
本教程为我参考文档结合实践所写,原创。 26.1 创建做试验的表及数据 create table emp_ly as select * from emp; 说明:注意复...

本教程为我参考文档结合实践所写,原创。
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;
调用方法和不带输出参数的存储过程差不多,只不过需要声明一个合适类型的变量来接收输出参数而已。
set serveroutput on; --主要用于后面的DBMS_OUTPUT要显示结果
declare sal_now number;
begin
Sal_raise(7369,200,sal_now);
DBMS_OUTPUT.PUT_LINE(TO_CHAR(sal_now));
end;
26.5 删除存储过程
DROP PROCEDURE Sal_raise
参考文档:
1. Application Developer’s Guide – FundamentalsSQL Reference
2.SQL Reference
本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!
本文地址: https://www.juheyunku.com/sql/oracle/873.shtml
上一篇:新手学oracle常见疑问
相关文章
热门TAG
命令 权重 外链 企业网站 白帽 php 织梦教程 dedecms修改内容 javascript 织梦 功能 标签 调用 详解 服务器 网站流量 实例解析 Dedecms 织梦cms HTML tags标签 python jquery教程 jquery windows SEO优化 蜘蛛 搜索引擎 网站收录 JSP最新文章
-
Window下Oracle Database 11g 发行
时间:2020-12-29
-
Oracle如何实现like多个值的
时间:2020-12-29
-
maven添加oracle依赖失败问题
时间:2020-12-29
-
OracleRAC基本概念及入门
时间:2020-12-29
-
Azure File Storage 基本用法
时间:2020-12-26
-
Oracle 权限(grant revoke)
时间:2020-12-26
-
Azure Queue Storage 基本用法
时间:2020-12-26
-
如何对比迁移前后的Orac
时间:2020-12-26
热门文章
-
Azure Queue Storage 基本用法 Azure Storage 之
时间:2020-12-26
-
Oracle存储过程编程详解
时间:2020-12-07
-
win10下oracle 11g安装图文教程
时间:2020-12-25
-
oracle 数据库学习 基本结构介绍
时间:2020-12-13
-
Azure File Storage 基本用法 Azure Storage 之 F
时间:2020-12-26
-
windows使用sqlpus连接oracle 数据库的教程图
时间:2020-12-25
-
Window下Oracle Database 11g 发行版2安装教程
时间:2020-12-29
-
Oracle解锁的方式介绍
时间:2020-12-14
-
linux下oracle设置开机自启动实现方法
时间:2020-12-13
-
Oracle学习记录之使用自定义函数和触发器
时间:2020-12-07
