设为首页 加入收藏

TOP

玩转oracle学习第六天(二)
2015-11-21 01:47:54 来源: 作者: 【 】 浏览:1
Tags:玩转 oracle 学习
archar2,newsal number);
function annual_income(name varchar2) return number;
end;
/

给包实现包体:
create or replace package sp_package is
procedure update_sal(name varchar2,newsal number)
is
begin
update emp set sal=newsal where ename=name;
end;
function annual_income(name varchar2)
return number is
annual_salary number;
begin
select sal*12+nvl(comm,0) into annual_salary from emp
where ename=name;
return annual_salary;
end;
end;
/

如何调用包,调用包中的过程和函数,调用的时候,需要在过程和函数面前添加包名
exec sp_package.update_sal('SCOTT',120);


PL/SQL基础 定义并使用变量
标量(scalar)-常用类型
在PL/SQL中
标量定义的案例:
(1)定义一个变长的字符串
v_ename varchar2(20)

(2)使用一个变量
数据赋值: :=
declare
c_tax_rate number(3,2) := 0.03;

v_ename varchar2(5);
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;

标量(scalar)-使用%type类型:
v_ename emp.ename%type;//表示变量v_ename定义的大小和表emp的字段enamel大小一致

复合变量(composite)介绍:
用于存放多个值的变量,主要包括:
类似高级语言的结构体
type emp_recode_type is recode
(
name emp.ename%type,
salary emp.sal%type,
title emp.job%type
);
//定义了一个PL/SQL记录类型emp_recode_type,类型包含是哪个数据name,salary,title
sp_recode emp_recode_type;//定义了一个变量sp_recode,它的类型为emp_recode_type

具体编写:
declare
type emp_recode_type is record(name emp.ename%type,
salary emp.sal%type,
title emp.job%type);
sp_recode emp_recode_type;
begin
select ename,sal,job into sp_record from emp where empno=7788;
dbms_output.put_line('员工名:' || sp_record.name || '工资是' || sp_record.salary);
end;

复合类型:
相当于高级高级语言中的数组,但是需要注意的是在高级语言中数组的下标不能为负数,但是此处是可以为负数的

PL/SQL表实例:
declare
--index by binary_integer表示下标是整数,正整数和负整数都可以的
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;

?如何返回多条数据类型??

复合变量-参照变量
参照变量是指用于存放数值指针的变量,通过使用参照变量,可以使得应用程序共享相同的对象,从而降低占用的控件,在编写
PL/SQL程序时,可以使用游标比那辆(ref cursor)和对象类型变量(ref obj_type)两种参照变量类型

参照变量-ref cursor游标变量
使用游标时,当定义游标时不需要

declare
--定义游标类型sp_emp_cursor
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结合,即test_cursor指向结果集
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_name || '工资:' || v_sal);
end loop;
end;

复合变量-嵌套表

复合变量-复合表

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Oracle启动服务详解 下一篇命令行对mysql的基本操作

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: