编写一个存储过程,该过程可以向某表中添加记录.
(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{
}
}
}