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

[oracle编程]pl/sql --标量 复合变量以及游标的简单使用

2014-07-31 00:29 751 查看
说明: 使用oracle10.2 scott方案下的emp表做的练习,所有块都验证过
注意: 要先打开oracle的打印选项
声明:  多处参照韩顺平oracle视频,所以命名基本出现为sp_..
 
这里用的都是块,如果要写成过程,请参照下面的语法,调用方法为
exec 过程名
call 过程名  2种
--过程的语法 更改某个人的工资
create or replace procedure sp_pro3(spName varchar2,newSal number) is
begin
update emp set sal=newSal where ename=spName;
end;
--包   生成一个包的语法
create or replace package abc is

end;

--有了块之后我们很容易就可以进行封装,所以为了简单起见使用块来学习和试验
 
--如何使用标量****************************************常量,一般变量

--输入员工号得到工资等信息
--税率为0.03
declare
--常量用c开头,变量让v开头
c_tax_rate number(7,2):=0.03;
v_ename varchar(10);
v_sal number(7,2);
v_tax_sal number(7,2);
begin
select ename,sal into v_ename,v_sal from emp where empno=&no;
--计算所得税,赋值符号一定不能错
v_tax_sal:=v_sal*c_tax_rate;
--输出信息
dbms_output.put_line('此员工的信息如下:'||v_ename||'  工资:'||v_sal||'  税:'||v_tax_sal);
end;


--使用%type方式复制变量类型,减少错误。
v_ename varchar(10);
--可以写为
v_ename emp.ename%type;

--让我们对上述的代码改写下
declare
c_tax_rate number(7,2):=0.03;
v_ename emp.ename%type;
v_sal emp.sal%type;
v_tax_sal emp.sal%type;
begin
select ename,sal into v_ename,v_sal from emp where empno=&no;
v_tax_sal:=v_sal*c_tax_rate;
dbms_output.put_line('此员工的信息如下:'||v_ename||'  工资:'||v_sal||'  税:'||v_tax_sal);
end;
--复合变量的使用方法***************************************记录和表
--记录类似高级语言中的结构体,表相当于数组
--使用记录变量的实例
declare
--定义一个pl/sql记录类型
type emp_record_type is record(name emp.ename%type,sal emp.sal%type);
--给记录一个别名
sp_record emp_record_type;
begin
select ename,sal into sp_record from emp where empno=&no;
--获取记录里的信息的方法
dbms_output.put_line('此员工的信息如下:'||sp_record.name||'  工资:'||sp_record.sal);
end;

--表类型使用的案例(接受一个值)
declare
--定义一个table类型的变量,存放的类型是emp.ename%type
--使用的下标是整数型的
type sp_table_type is table of emp.ename%type index by binary_integer;
sp_table sp_table_type;
begin
--下标要对应才可以,可以自己定义,这样写只能取出一个记录
select ename into sp_table(0) from emp where empno=7788;
dbms_output.put_line('员工名'||sp_table(0));
end;


 
--参照变量(使用最多的)****************************游标和对象类型
--一般都是用游标变量cursor
--案例1  写一个块 输入部门号得到所有所属部门人员的信息(姓名和工资)

declare
--定义游标类型  sp_cursor
type sp_emp_cursor is ref cursor;
--定义游标变量
test_cursor sp_emp_cursor;
--定义变量接受姓名和工资
v_ename emp.ename%type;
v_sal emp.sal%type;
begin
--把一个游标和select结合
open test_cursor for select ename,sal from emp where deptno=&no;
--循环取出数据,循环结构使用loop结构
loop
--fetch是取出游标的意思
fetch test_cursor into v_ename,v_sal;
--判断退出的条件,没有就是死循环了哦
exit when test_cursor%notfound;
--输出
dbms_output.put_line('姓名:'||v_ename||'  工资:'||v_sal);
end loop ;
end ;
结果

姓名:ALLEN  工资:1600
姓名:WARD  工资:1250
姓名:MARTIN  工资:1250
姓名:BLAKE  工资:2850
姓名:TURNER  工资:1500
姓名:JAMES  工资:950

PL/SQL procedure successfully completed


常用的就是标量 记录 和游标了。 只要能取到值,其他的业务逻辑就可以使用变量来实现了。

本文出自 “orangleliu笔记本” 博客,请务必保留此出处http://blog.csdn.net/orangleliu/article/details/38309417
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息