oracle存储过程练习

---1. 创建一个简单的存储过程update_emp,该过程用于将emp表中empno为6500的员工的姓名修改为CANDY
-----创建存储过程update_emp
create procedure update_emp as
begin   
  update emp set ENAME='CANDY'where empno='6500';
  dbms_output.put_line('empno为6500的员工的姓名修改为CANDY-更新成功');
end update_emp; 
/
-----执行update_emp存储过程
begin  
  update_emp; 
end;
/

---2. 使用EXECUTE语句与CALL语句调用存储过程update_emp

----EXECUTE语句调用存储过程update_emp
----只能在命令行中运行
execute update_emp;

----CALL语句调用存储过程update_emp
----只能在命令行中运行
call update_emp();

-----在sqlplus中这两种方法都可以使用:
-----exec pro_name(参数1..); call pro_name(参数1..);
-----区别:
-----第1.exec是sqlplus命令,只能在sqlplus中使用;call为SQL命令,没有限制.
-----第2.存储过程没有参数时,exec可以直接跟过程名(可以省略()),但call则必须带上()


---3.创建带IN参数的存储过程update_emp2, 为该过程设置两个IN参数,分别用于接受用户提供的empno与ename值
create or replace procedure update_emp2(p_empno in number,p_ename in varchar2)
as
BEGIN
     update emp set ENAME = p_ename where empno = p_empno;
     dbms_output.put_line('更新成功');
END update_emp2;
/

-----执行存储过程update_emp2
begin  
  update_emp2('6500','CANDY'); 
end;
/

---4. 调用update_emp2过程,该过程将empno为7936的员工的ename修改为XIAOQI
---法1
begin  
  update_emp2('7936','XIAOQI'); 
end;
/
---法2--在sqlplus中输入
execute update_emp2('7936','XIAOQI'); 

---5. 创建存储过程select_emp,为该过程设置一个IN参数和一个OUT参数,其中IN参数接收用户提供的empno值,然后在过程中将该empno对应的ename值传递给out参数
create or replace procedure 
    select_emp(p_empno in number, p_ename out varchar2) 
as
BEGIN
  select ename into p_ename from emp where empno = p_empno;
END select_emp;
/


---6. 调用存储过程select_emp,为其IN参数赋值为7369,并声明变量employee_name接收与输出其OUT参数的返回值
----执行存储过程
declare 
  employee_name VARCHAR2(255);---定义out指定输出参数,相当于返回值
begin
  select_emp('7369',employee_name);--执行函数
  dbms_output.put_line(employee_name);--打印返回值 
end;
/


----7. 创建存储过程exchange_value,通过该过程交换两个变量的值。
---然后调用exchange_value过程,调用前声明为IN OUT参数赋值的变量,
---调用后使用SELECT语句 输出交换值后的结果

create or replace procedure exchang_value(a in out number ,b in out number)as
  c number :=0;---a初始化为0
begin
  c:=a;---a赋给c
  a:=b;---b赋给a
  b:=c;---c赋给b
end;
/

------执行存储过程exchange_value
declare
  a number:=1;----声明变量a=1
  b number:=2;----声明变量b=2
begin
  dbms_output.put_line('排序前'||'a='||a||' b='||b);
   exchang_value(a,b);
  dbms_output.put_line('a='||a||' b='||b);  
end;


----法2
create procedure exchange_value
(value1 in out number,value2 in out number)
as
temp1 number;
temp2 number;
begin
        temp1 := value1;
        temp2 := value2;
        value1 := temp2;
        value2 := temp1;
end exchange_value; 

variable value1 number;
variable value2 number;
exec:value1 :=2009;
exec:value2 :=9002;
exec exchange_value(:value1,:value2);
select:value1,:value2 from dual;

猜你喜欢

转载自blog.csdn.net/ThinkPet/article/details/81434357