您的位置:首页 > 数据库 > Oracle

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

2013-12-27 16:46 399 查看
--掌握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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: