{传智播客} (学习笔记)--通过一些简单案例,了解Oracle存储过程编写和调用

编写一个存储过程,该过程可以向某表中添加记录.

(1)建立一个测试表

create table mytest (name varchar2(30),passwd varchar2(30));

(2)一个过程

create or replace procedure ly_pro1 is

begin

--添加数据

insert into mytest values('iliya','iliya');

end;

---ly_pro1:就是  过程名字

(3)如何调用

exec ly_pro1;

 

编写一个存储过程,该过程可以删除某表记录

create or replace procedure ly_pro2 is

begin

--添加数据

delete from mytest where name='iliya';

end;

 

请考虑编写一个过程,可以输入雇员名,新工资 可修改雇员的工资

create or replace procedure ly_pro3(in_enam varcher2,in_sal number) is

begin

--执行

update emp set sal=in_sal where ename=in_ename;

end;

--调用

exec ly_pro3('SMITH',100);

 

以输入员工号,显示雇员姓名、工资、个人所得税(税率为0.03)为例。说明变量的使用,看看如何编写.

Create or replace procedure ly_pro4(in_empno number) is

C_tax_rate number(3,2):=0.03;

V_ename emp.ename%type; --定义用户变量名

V_sal emp.sal%type; --定义工资变量

V_tax number;--定义所得税

Begin

--编号唯一,单行,如果多行用游标

Select ename,sal into v_ename,v_sal from emp where empno=in_empno;

--计算该用户的所得税收

V_tax:=v_sal*c_tax_rate;

--显示

dbms_output.put_line(v_ename||'应交 '||v_tax);

End;

 

使用pl/sql编写一个块,可以输入部门号,并显示该部门所有员工姓名和他的工资.(游标的使用发方法)

create or replace procedure ly_pro5(in_deptno number) is

--定义需要的游标

type my_cursor is ref cursor;

emp_cursor my_cursor;

--定义两个变量

v_ename emp.ename%type;

v_sal emp.sal%type;

begin

--把游标和一个查询结果关联

open emp_cursor for select ename,sal from emp where  deptno=in_deptno;

--显示

loop

--取出记录

fetch emp_cursor into v_ename,v_sal;

--判断是否结束

exit when emp_cursor%notfound;

dbms_output.put_line('名字'||v_ename||' 薪水 '||v_sal);

end loop;

close emp_cursor;

end;

 

 

Java中调用存储过程的简单例子:

存储过程代码:

create or replace procedure iliya_test(in_empno number,out_ename out varchar2) is

begin

select ename into out_ename from emp where empno=in_empno;

end;

---------------------------------------------------------------------------------------------------

Java调用过程代码:

public class iliyaTest {

    public static void main(String[] args) {

       Connection ct=null;

       CallableStatement cs=null;

       try { 

           Class.forName("oracle.jdbc.driver.OracleDriver");           ct=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:iliya","scott","tiger");      

           //调用有返回值的存储过程,存储过程名为:iliya_test

           cs=ct.prepareCall("{call iliya_test(?,?)}");

           cs.setInt(1, 7369);

           cs.registerOutParameter(2, oracle.jdbc.OracleTypes.VARCHAR);

           //执行过程

           cs.execute();    

           //得到结果

           String name=cs.getString(2);

           System.out.println("用户名是"+name);   

       } catch (Exception e) {

           e.printStackTrace();

       }finally{

       }

    }

}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值