时间:2021-07-01 10:21:17 帮助过:29人阅读
-- 创建存储过程 输入员工编号 返回员工姓名 基本工资 create or replace procedure pro_emp_test(v_empno number,v_ename out varchar2,v_sal out number) is --变量声明部分 begin --业务逻辑处理部分 select ename ,sal into v_ename,v_sal from emp where empno=v_empno; end;使用匿名块调用存储过程:
--匿名块中调用存储过程 declare -- 声明参数用来接收出参 v_ename emp.ename%type; v_sal emp.sal%type; begin --调用存储过程 pro_emp_test(7369,v_ename,v_sal); -- 调用过程之后 v_ename 和v_sal就有值了 可以打印结果 dbms_output.put_line(‘员工姓名:‘||v_ename||‘员工基本工资:‘||v_sal); end;举例:写存储过程 ,输入员工编号,在过程中打印员工的姓名和基本工资
-- 创建存储过程 输入员工编号 打印员工姓名 基本工资 create or replace procedure pro_emp_test2(v_empno number) is --变量声明部分 v_ename varchar2(100); v_sal emp.sal%type; begin --业务逻辑处理部分 select ename ,sal into v_ename,v_sal from emp where empno=v_empno; --打印结果 dbms_output.put_line(‘员工姓名:‘||v_ename||‘,员工基本工资:‘||v_sal); end;对于没有出参的过程,我们可以通过call关键字执行调用:
-- 通过call 调用没有出参的存储过程
call pro_emp_test2(7369);
过程传递参数的三种方式
举例:写一个过程,在过程中打印三个数的和
--定义存储过程 计算三个数的和 create or replace procedure pro_sum_test(v_num1 number,v_num2 number,v_num3 number) is -- 声明和的变量 v_sum number(10,2); begin v_sum:=v_num1+v_num2+v_num3; dbms_output.put_line(‘v_num1:‘||v_num1||‘+v_num2:‘||v_num2||‘+v_num3:‘||v_num3|| ‘=v_sum:‘||v_sum ); end;按位置传参 原先我们调用存储过程的方式就是通过按位置传递参数。
-- 按位置传递参数
call pro_sum_test(1,2,3);
按名称传参
按位置传参不容易看出哪个参数是什么含义,所以我们也可以使用按形参名称的方式传参数
-- 按名称的方式传递参数
call pro_sum_test(v_num2=>2,v_num1=>1,v_num3=>3);
注意:按名称传递参数使用=>关键字,传递参数的时候名称必须和过程的形参名称一致
按位置传参 优点:容易理解 缺点:不容易看到每个参数代表什么含义
按名称传参 优点:容易看到每个参数代表什么汉含义 缺点:传递参数是名称必须要和形参名称一致,如果修改形
参名称了,调用这个过程的所有的地方都要修改。
按位置和名称传参
传递参数的时候我们可以混合使用按位置和按名称的方式,不过要保证先按位置传递参数,再按名称传递。
-- 按名称的方式传递参数
call pro_sum_test(v_num2=>2,v_num1=>1,v_num3=>3);
-- 混合传递参数 必须先按位置 再按名称传递
call pro_sum_test(1,v_num3=>3,v_num2=>2);
-- 不能先按名称 再按位置传递
call pro_sum_test(v_num2=>2,v_num1=>1,3);
注:创建过程,没有参数可以不写括号,但是call调用需要带括号!!!
Oracle创建存储过程
标签:put exce 声明 打印 默认 不用 rom 理解 逻辑