Pl/sql块的结构和java比较
Java程序结构
Public static void main(String [ ] args){
//定义部分
Int a;
Int b;
Try {
a++;//执行的部分
}
Catch (Exception ){
//出现异常的情况执行
}
}
实例讲解
案例1
只包括执行部分的pl/sql块
Set serverout on; 打开输出服务
Begin
Dbms_output.put_line(‘hello’);
End;
/
说明:Dbms_output是oracle提供的包(类似的和java的包)该包包含一些过程,put_line就是dbms_line就是dbms_output包的一个过程。
案例2 一个带有定义的例子
开启输出服务
set serveroutput on;
定义变量
declare
v_name varchar2(5);
执行内容
begin
select ename into v_name from emp where empno=&编号;(查出来的内容放到变量里)&编号代表的是从控制台接收一个值进行查询
dbms_output.put_line('雇员名字:'||v_name);
end;
/
执行结束
问题:再把用户的薪水也显示出来
set serveroutput on;//开服务
定义部分
declare
v_name varchar2(5);
v_sal number(7,2);
执行部分
begin
select ename,sal into v_name,v_sal from emp where empno=&编号;(对应关系一定要正确)
dbms_output.put_line('雇员名字:'||v_name||'薪水为:'||v_sal);
end;
/
结束
如果查出来的结果不是一个,是多个的话怎么做。要用到参数,使用游标。后面进行讲解。
案例3 结合三个部分,变量的定义,执行过程,错误处理。
为了避免pl/sql程序的运行错误,提高pl/sql的健壮性,应该对可能的错误进行处理:这里很有必要:
1. 例如在上一个例子中输入了不存在的雇员号,应当做例外处理。
2. 有事出现异常,希望用另外的逻辑处理。
相关说明:
Oracle事先预定义了一些例外,no_data_found 就是找不到数据的例外。
set serveroutput on;
定义部分
declare
v_name varchar2(5);
v_sal number(7,2);
开始
begin
select ename,sal into v_name,v_sal from emp where empno=&编号;
dbms_output.put_line('雇员名字:'||v_name||'薪水为:'||v_sal);
异常处理
exception
when no_data_found then
dbms_output.put_line('朋友你输入的编号有问题,请查证后再输入!!');
end;
/
结束
存储过程(plsql基础)
过程用于执行特定的操作:当建立过程时,既可以指定输入参数(in),也可以指定输出参数(out)。通过在过程中使用输入参数,可以将数据传递到执行部分,通过输出参数,可以将执行部分的数据传递到应用的环境。在sql中可以使用 create procedure 命令来建立过程。
案例4
1. 编写一个过程,可以输入雇员的名,新工资,可修改雇员的工资
2. 如何调用过程的两种方法
3. 如何在java中调用存储过程
特别说明:过程会详细说明,先有个概念。
创建一个过程
create procedure hfc_a12 (cxname varchar2,newsal number)is
开始执行
begin
update emp set sal=newsal where ename=cxname;
end;
执行:exec hfc_a12(‘SCOTT’,8000);
查询一次看看。
Java调用存储过程
//加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection ct=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "scott", "tiger");
//创建CallableStatement调用过程
CallableStatement cs=ct.prepareCall("{call hfc_a12(?,?)}");
//传进去参数,也就是赋值
cs.setString(1,"SCOTT");//第一个值
cs.setInt(2, 3423); //第二个值
//执行
cs.execute();
cs.close();
ct.close();