Oracle存储过程及举例(几种参数情况的存储过程)

Oracle存储过程及举例(几种参数情况的存储过程)Oracle存储过程及举例(几种参数情况的存储过程)

大家好,又见面了,我是你们的朋友全栈君。

存储过程
存储过程可以有多个或者零个输入输出参数,但通常没有返回值。存储过程是已经编译好的代码,所以执行效率非常高
存储过程创建语句

 

create [or replace] procedure 存储过程名 [(输入、输出参数、in/out模式参数)]
is/as
begin
sentences;
[exception
 sentences;]
end 存储过程名;

举例一个没有参数的存储过程

 

create or replace procedure pro_no_par is
begin
update employees set salary=salary+100 where employee_id=100;
commit;
dbms_output.put_line('工资已经调整!!');
end pro_no_par;

结果:

 

begin
pro_no_par;
end;
匿名块已完成
工资已经调整!!

举例一个带in模式参数的存储过程
参数的方式有三种:指定名称传递;按位置传递;混合方式传递
注意混合方式传递从使用【指定名称传递】的位置开始,后面的参数必须使用【指定名称传递】

 

create or replace procedure pro_in_par
( var_1 in nvarchar2,
  var_2 in number)   is
begin
update employees set salary=salary+var_2 where first_name=var_1;
commit;
dbms_output.put_line(var_1||'的工资已经增加了'||var_2||'!');
end pro_in_par;

结果:

 

begin
execute pro_in_par(var_1=>'Steven',var_2=>100);
end
匿名块已完成
Steven的工资已经增加了100!
begin
execute pro_in_par('Steven',var_2=>100);
end
匿名块已完成
Steven的工资已经增加了100!

pl/sql developer下的调用语法
begin
pro_in_par('Steven',100);
end
--举例混合参数输入,后面的参数没有使用【指定名称传递】
execute pro_in_par(var_1=>'Steven',100);
在行 42 上开始执行命令时出错:
execute pro_in_par(var_1=>'Steven',100)
错误报告:
ORA-06550: 第 1 行, 第 34 列: 
PLS-00312: 一个定位相关参数没有说明其相关性
ORA-06550: 第 1 行, 第 7 列: 
PL/SQL: Statement ignored
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
*Action:

观察存储过程中变量的使用(存储过程的输入输入参数,字符型不用定义长度,内部的字符型型变量是需要带长度的)

内部的变量不需要用declare,内部变量的定义在as之后,

 begin end 之前

--表准备
create table chl_simple(fid int,fname  varchar2(200));
--存储过程
create or replace procedure chl_ztablecreate01
(var_fname in varchar2)
as
var_sql varchar2(200);
begin
var_sql:=var_fname;
insert into chl_simple(fid,fname) values(1,var_sql);
end;
--存过程调用
begin
chl_ztablecreate01('12345');
end;

举例一个带out模式和in out模式参数存储过程

create procedure pro_out_par
( var_1 in out number,
  var_2 out employees.first_name%type,
  var_3 out employees.phone_number%type) is
begin
select first_name,phone_number into var_2,var_3 from employees where employee_id=var_1;
end pro_out_par;
--执行
declare 
ex_var_1 number;
ex_var_2  employees.first_name%type;
ex_var_3  employees.phone_number%type;
begin
ex_var_1:=102;
pro_out_par(ex_var_1,ex_var_2,ex_var_3);
dbms_output.put_line('员工号为'||ex_var_1||'的员工姓名是;'||ex_var_2||',联系电话是:'||ex_var_3);
end;

结果;

匿名块已完成
员工号为102的员工姓名是;Lex,联系电话是:515.123.4569

只有努力不会背叛
博文仅供参考,欢迎大家来访。如有错误之处,希望批评指正。

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/160929.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Linux VI文本编辑器

    Linux VI文本编辑器VI文本编辑器  学会使用vi编辑器是学习Linux系统的必备技术之一,因为一般的Linux服务器是没有GUI界面的,Linux运维及开发人员基本上都是通过命令行的方式进行文本编辑或程序编写的。vi编辑器是Linux内置的文本编辑器,几乎所有的类unix系统中都内置了vi编辑器,而其它编辑器则不一定,另外很多软件会调用vi编辑进行内容编写,例如cront…

    2022年7月26日
    9
  • cs与bs模式的优缺点_什么是cs什么是bs

    cs与bs模式的优缺点_什么是cs什么是bscs与bs模式关于CS(Client-Server)模式和BS(Browser-Server)模式的水很深,盆地自己也认为对此了解不够透彻,但作为手机客户端设计,如果不对CS、BS做一定程度的了解,是很容易出现一些方向性的错误、走一些弯路抑或在实现性价比上付出过多代价。本文偏向于基础知识,产品人员很多情况下不仅仅要了解表现、交互,还需要一定程度上了解可实现性、实现代价、实现形式、实现限制等…

    2025年10月11日
    6
  • 最新版本kali安装教程(VMware版本)

    最新版本kali安装教程(VMware版本)一、Kali是什么?KaliLinux是基于Debian的Linux发行版,设计用于数字取证操作系统。每一季度更新一次。由OffensiveSecurityLtd维护和资助。最先由OffensiveSecurity的MatiAharoni和DevonKearns通过重写BackTrack来完成,BackTrack是他们之前写的用于取证的Linux发行版。二、下载kali系统文件温馨提示:在阅读本教程前,请确保你本机已经安装好VMwareWorkstat…

    2022年6月6日
    29
  • typora 免费版, 最后一个beta版本下载[通俗易懂]

    typora 免费版, 最后一个beta版本下载[通俗易懂]连接为官方下载链接,直接复制MD5可迅雷下载亲测可用,和付费版使用体验无差别.1.Windows64bithttps://download.typora.io/windows/typora-setup-x64-0.11.18.exeMD5:12F96372BEE2951ACF5627EA28F8A389**2.Window32bit**https://download.typora.io/windows/typora-setup-ia32-0.11.18.exeMD5:F5036

    2022年10月12日
    7
  • php libpng 不兼容,Python matplotlib和libpng不兼容issu

    php libpng 不兼容,Python matplotlib和libpng不兼容issu我真的受这个问题困扰了这么久 最初 在用 matplotlib 绘制一些东西之后 我可以轻松地保存图像 但是 在安装了 scipy 之后 我再也无法保存我的图像了 我使用 pip 安装了 matplot 和 scipy 我试图查找一些信息 但还是无法解决问题 我的操作系统是 MacOSXLion 10 7 我认为以下链接是一些相关的问题似乎如果我可以重新链接库或设置 DYLD LIBRARY PATH 实际上

    2025年6月15日
    6
  • sched://task scheduler_Task Scheduler

    sched://task scheduler_Task SchedulerSpringBoot自带的任务调度是如何实现的?@EnableScheduling@Scheduled注解在任务调度的实现中承担了怎样的角色?ScheduledAnnotationBeanPostProcessor是如何工作的?都参与了ApplicationContext生命周期的哪些环节?调度是通过TaskScheduler实现的,默认的TaskScheduler是怎么创建的?我们如何通过SchedulingConfigurer创建自己的TaskScheduler?

    2022年10月11日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号