PL/SQL 条件分支(二)

--goto案例
declare
i int:=1;
begin
  loop
  dbms_output.put_line('输出i='||i);
  if i = 10 then 
  goto end_loop;
  end if;
  i:=i+1;
  end loop;
  <<end_loop>>
  dbms_output.put_line('循环结束');
end;

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

测试结果为:

输出i=1
输出i=2
输出i=3
输出i=4
输出i=5
输出i=6
输出i=7
输出i=8
输出i=9
输出i=10
循环结束

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


案例:将7788雇员(SCOTT)的comm改为sal的0.1倍

declare
v_sal emp.sal%type;
v_ename emp.ename%type;
begin
  select ename,sal into v_ename,v_sal from emp where empno=&no;
  if v_sal<3000 then
  update emp set comm=sal*0.1 where ename=v_ename;
  else
  null;
  end if;
end;

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

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

分页案例:

--有一张book表,三个字段(书号,书名,出版社),编写存储过程向book表中添加书,用java调用该过程
create table book(
  bookId number(3),
  bookName varchar2(50),
  publishHouse varchar2(50)
);
--编写过程(in表示一个输入参数,可以省略)
create or replace procedure sp_pro22
(spBookId in number,spbookName in varchar2,sppublishHouse in varchar2) is
begin
insert into book values (spBookId,spbookName,sppublishHouse);
end;

--java代码
/*
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","scott","jsd161102");
//创建CallableStatement
CallableStatement cs = conn.prepareCall("{call sp_pro22(?,?,?)}");
//给?赋值
cs.setInt(1, 10);
cs.setString(2, "笑傲江湖");
cs.setString(3, "人民出版社");
//执行
cs.execute();
*/

==================================================


--有输入和有返回值的存储过程
--输入雇员编号,返回雇员的姓名
create or replace procedure sp_pro33
(spNo in number,spName out varchar2) is
begin
select ename into spName from emp where empno=spNo;
end;


--java代码
/*
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","scott","jsd161102");
//创建CallableStatement
CallableStatement cs = conn.prepareCall("{call sp_pro33(?,?)}");
//给第一个?赋值
cs.setInt(1, 7788);
cs.registerOutParameter(2, oracle.jdbc.OracleTypes.VARCHAR);
//执行
cs.execute();
//取出返回值,要注意?的顺序
String name = cs.getString(2);//第二个?,写2
System.out.println("7788的名字是:"+name);
*/


=================================================================================

扩展案例

--输入雇员编号,返回雇员的姓名,工资,岗位
create or replace procedure sp_pro44
(spNo in number,spName out varchar2,spSal out number,spJob out varchar2) is
begin
select ename,sal,job into spName,spSal,spJob from emp where empno=spNo;
end;
--java代码
/*
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","scott","jsd161102");
//创建CallableStatement
CallableStatement cs = conn.prepareCall("{call sp_pro44(?,?,?,?)}");
//给第一个?赋值
cs.setInt(1, 7788);
cs.registerOutParameter(2, oracle.jdbc.OracleTypes.VARCHAR);
cs.registerOutParameter(3, oracle.jdbc.OracleTypes.DOUBLE);
cs.registerOutParameter(4, oracle.jdbc.OracleTypes.VARCHAR);
//执行
cs.execute();
//取出返回值,要注意?的顺序
String name = cs.getString(2);//第二个?,写2
double sal = cs.getDouble(3);
String job = cs.getString(4);
System.out.println("7788的名字是:"+name+"工资是:"+sal+"工作是:"+job);
*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荒--

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值