oracle笔记——第六天:pl/sql 编程

来源:互联网 发布:电脑画画用什么软件 编辑:程序博客网 时间:2024/06/08 08:30
--掌握pl/sql编程技术(过程,函数,触发器)
优点
1.提高应用程序的运行性能
2.模块化的设计思想
3.减少网络传输
4.提高安全性
缺点
1.移植性不好
--------------
create procedurec sp_pro1 is
begin
    insert into mytest('j','123',123);
end;
------------
块:
    过程
    函数
    触发器
    包
------------案例
declare
v_ename varchar2(5);
begin
select ename into v_ename from emp where empno=&aa;
dbms_output.put_line('用户名:'||v_ename);
exception
when no_data_found then
dbms_output.put_line('编号输入有误');
end;
-----------------------过程
create procedure sp_pro3(spName varchar,newSal number) is
begin
update emp set sal=newSal where ename=spName;
end;
/*
1.调用存储过程的两个方式 exec call
2.如何在java程序中调用存储过程
   2.1、加载驱动
   2.2、得到连接
   2.3、创建Callablestatment
   2.4、执行
   2.5、关闭资源
*/
--触发器
触发器是指隐含对象的执行的存储过程。当定义触发器时候。
必须要制定触发器的事件和触发的操作,
常用的触发事件有(insert,update,delete)
并且触发器其实就是一个pl/sql块。
--定义并且使用变量
1.标量类型
   1.1、定义一个变长的字符串 v_name varchar2(10)
   1.2、定义一个小数 v_sal number(6,2)
   1.3、定义小数并且赋值 v_sal number(6,2):=5.4
   1.4、定义一个日期类型 v_hiredate date
2.复合类型(多个变量)
   2.1、pl/sql记录(类使用高级语言的结构体)
   2.2、pl/sql表
   2.3、嵌套表
3.参照类型
4.lob类型
-----------------------
输入员工号,显示雇员的姓名、工资、个人所得税(税率0.03)
declare
c_tax_rate number(3,2):=0.03;--赋值
--用户名
v_ename varchar2(5);--姓名
v_sal number(7,2);--工资
v_tax_sal number(7,2);--所得税
v_job varchar2(9);--定义变量保存工作
begin
select ename,sal,job into v_ename,v_sal,v_job from emp where empno=&no;--查询出雇员的姓名和工资放在变量中
v_tax_sal:=v_sal*c_tax_rate;
dbms_output.put_line
('姓名是:'||v_ename||' 工资是:'||v_sal||' 交税是:'||v_tax_sal||' 工作是:'||v_job);
end;
--定义成存储过程
create or replace procedure emp_sal_job(empno1 number) is
c_tax_rate number(3,2):=0.03;--赋值
--用户名
v_ename varchar2(5);--姓名
v_sal number(7,2);--工资
v_tax_sal number(7,2);--所得税
v_job varchar2(9);--定义变量保存工作
begin
select ename,sal,job into v_ename,v_sal,v_job from emp where empno=empno1;--查询出雇员的姓名和工资放在变量中
v_tax_sal:=v_sal*c_tax_rate;
dbms_output.put_line('姓名是:'||v_ename||' 工资是:'||v_sal||' 交税是:'||v_tax_sal||' 工作是:'||v_job);
end;
------------------------------
/*
     标量使用%type
     标示符明 表名.列名%type
*/
declare
c_tax_rate number(3,2):=0.03;--赋值
--用户名
v_ename emp.ename%type;--姓名
v_sal emp.sal%type;--工资
v_tax_sal emp.sal%type;--所得税
v_job emp.job%type;--定义变量保存工作
begin
select ename,sal,job into v_ename,v_sal,v_job from emp where empno=&no;--查询出雇员的姓名和工资放在变量中
v_tax_sal:=v_sal*c_tax_rate;
dbms_output.put_line
('姓名是:'||v_ename||' 工资是:'||v_sal||' 交税是:'||v_tax_sal||' 工作是:'||v_job);
end;
--------pl/sql记录实例-------------------------
declare
type emp_record_type is receord(name emp.ename%type,salary emp.sal%type,title emp.job%type);
p_record emprecerd_type;
begin
select ename,sal,job into sp_record from emp where empno=7788;
dbms_output.put_line('员工表:'||emp_record.name);
end;
-------复合pl/sql表(相当于高级语言中的数组)
declare
type sp_table_type is table of emp.ename%type
--sp_table_type 是pl/sql表的类型 emp.ename%type 指定表的元素的类型和长度
index by binary_integer;
sp_table sp_table_type;--sp_table 为pl/sql变量
begin
   select ename into sp_table(0) from emp where empno=7788;
   dbms_output.put_line('员工号:'||sp_table(0));
end;
-------参照变量 :用于存放数组值指针的变量(1.游标变量,2.对象变量)
1.参照变量
/*
  使用pl/sql编写一个块,可以输入部门号,并且显示该部门所有的员工姓名和他的工资
*/
declare
--定义游标类型
type sp_emp_cursor is ref cursor;
--定义一个游标变量
test_cursor sp_emp_cursor;
--定义变量
v_ename emp.ename%type;
v_sal emp.sal%type;
begin
   --把test_cursor 和一个select结合            
   open test_cursor for select ename,sal from emp where deptno=&no;
loop
   fetch test_cursor into v_ename,v_sal;
   --判断是否test_cursor是否为空
   exit when test_cursor%notfound;
   dbms_output.put_line('名字:'||v_ename||'工资:'||v_sal);
end loop;
end;

















0 0