pl/sql块由三个部分构成:定义部分、执行部分、例外处理部分.如下所示:
declear
/*定义部分-----定义常量、变量、游标、例外、复杂数据类型*/
begin
/*执行部分-----要执行的pl/sql语句和sql语句*/
exception
/*例外处理部分----处理运行的各种错误*/
end;
1,
DECLARE
salk NUMBER;
BEGIN
SELECT sal INTO salk FROM emp WHERE ename='KING';
dbms_output.put_line(salk);
END;
2,
DECLARE
TYPE my_record IS RECORD(
record_empno emp.empno%TYPE,
record_ename emp.ename%TYPE,
record_job emp.job%TYPE,
record_mgr emp.mgr%TYPE,
record_hiredate emp.hiredate%TYPE,
record_sal emp.sal%TYPE,
record_comm emp.comm%TYPE,
record_deptno emp.deptno%TYPE
);
i_record my_record;
BEGIN
SELECT * INTO i_record FROM emp WHERE emp.empno=7369;
dbms_output.put_line(i_record.record_ename);
END;
3,
DECLARE
deptnono emp.empno%TYPE:=&NO;
BEGIN
dbms_output.put_line(deptnono);
END;
4,建立一个简单的procedure
CREATE PROCEDURE pro2 IS
BEGIN
INSERT INTO emp(empno,ename) VALUES(777,'zt');
END;
注意:需要在pl/sql执行exec pro2,这样procedure才会提交
跟java程序连接
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class proinjava {
public static void main(String args[]){
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection co=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl","scott","tiger");
CallableStatement ct=co.prepareCall("{call pro2}");
ct.execute();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
注意:在myeclipse中执行,他需要等待pl/sql的事物提交,所以需在pl/sql中的command window中commit一下,程序才会执行
5,精进版
①请考虑编写一个过程,可以输入雇员名,新工资 可修改雇员的工资
②如何调用过程有两种方法:
exec .. call
pl/sql程序:
java程序: