oracle 10g -凯发k8网页登录
1.1
结构
declare --
定义
begin --
执行部分
exception --
例外处理
end; --
结束
set
serveroutput on;
declare v_ename varchar2(
5
);
begin
select ename into v_ename from emp where empno=&no;
dbms_output.put_line(
'¹íô±ãû:'
|| v_ename);
exception
when no_data_found then
dbms_output.put_line(
'please input correct employees no!'
);
end;
/
1.2
块分类
<> <>
1.3
子程序
1.1.1
过程
执行特定的操作
create or replace
procedure update_sal(namevarchar2,newsal number)
is
begin
update emp set sal=newsal where lower(ename)=lower(name);
end;
/
调用:
exec update_sal(
'smith'
,
10
)
call update_sal(
'smith'
,
800
)
1.1.2
函数
返回特定数据
create
or
replace
function annual_income(namevarchar2)
returnnumberis
annual_salary number(
7
,
2
);
begin
select sal*
12
nvl(comm,
0
) into annual_salary from emp where lower(ename)=lower(name);
return annual_salary;
end;
/
调用
:
sql> var income number
sql> call annual_income('scott') into : income;
调用完成。
sql> print income
income
----------
36000
1.1.3
包
逻辑组合相关的过程和函数
--
包规范
create
or
replace
package emp_pkg is
procedure update_sal(namevarchar2, newsal number);
function annual_income(namevarchar2) returnnumber;
end;
--
包体
create
or
replace
package
body emp_pkg is
procedure update_sal(namevarchar2, newsal number)
is
begin
update emp set sal = newsal where lower(ename) = lower(name);
end;
function annual_income(namevarchar2) returnnumber
is
annual_salary number(
7
,
2
);
begin
select sal *
12
nvl(comm,
0
) into annual_salary from emp where lower(ename) = lower(name);
return annual_salary;
end;
end;
/
调用:
sql> call
emp_pkg
.update_sal('smith',1500);
or
sql> var income number
sql> call emp_pkg
.
annual_income('scott') into : income;
调用完成。
sql> print income
income
----------
36000
1.4
触发器
是隐含执行的存储过程。
create
or
replace
trigger update_cascade
afterupdateof deptno on dept
foreachrow
begin
update emp set deptno=:new.deptno
where deptno=:old.deptno;
end;
/
1.5
标量变量
1.1.4
特殊变量说明
long(32760
字节
)
与
varchar2(32767
字节
)
类似,定义变长的字符串
long raw
用于定义变长的二进制数据
(32760
字节
)
binary_integer
定义整数,范围为:
-2147483647~2147483647 (
非表列使用
)
boolean
为
true/false/null (
非表列使用
)
binary_float/binary_double
:
oracle10
所有
1.1.5
定义使用
identifier [constant] datatype [not null] [:= | default expr]
例如:
v_valid boolean not null default false;
c_tax_rate constant number(3,2):=0.03;
v_ename emp.ename%type;
1.6
复合变量
1.1.6
pl/sql
记录
类似于高级语言中的结构
declare
type emp_record_type isrecord(
name emp.ename%type,
salary emp.sal%type,
title emp.job%type
);
emp_record emp_record_type;
begin
select ename,sal,job into emp_record from emp where empno=
7788
;
dbms_output.put_line(
'
雇员名
'
||emp_record.name);
end;
/
1.1.7
pl/sql
表
类似于高级语言中的数组,下标可以为负
,
个数无限制。
declare
type ename_table_type istableof emp.ename%type
indexbybinary_integer;
ename_table ename_table_type;
begin
select ename into ename_table(-
1
) from emp where empno=
7788
;
dbms_output.put_line(
'
雇员名
'
||ename_table(-
1
));
end;
/
1.1.8
嵌套表
类似于高级语言中的数组,下标不可以为负,个数无限制。
create
or
replace
type emp_type asobject(
namevarchar2(
10
),
salary number(
6
,
2
),
hiredate date
);
/
createorreplacetype emp_array istableof emp_type;
/
createorreplacetable department(
deptno number(
2
),
dname varchar2(
10
),
employee emp_array
)nestedtable employee storeas employee;
1.1.9
varray
varray
类似于嵌套表,它可以作为表列和对象类型属性的数据类型,个数有限制。
create
or
replace
type article_type asobject(
title varchar2(
30
),
pubdate date
);
/
createorreplacetype article_array isvarray(
20
) of article_type;
/
createorreplacetable author(
idnumber(
6
),
namevarchar2(
10
),
article article_array
);
1.7
参照变量
用于存放数值指针的变量。使得应用程序共享相同对象,从而降低占用空间。
1.1.10
ref cursor
游标变量
declare
type c1 isrefcursor;
emp_cursor c1;
v_ename emp.ename%type;
v_sal emp.sal%type;
begin
open emp_cursor for
select ename, sal from emp ;
--where deptno = 10;
loop
fetch emp_cursor
into v_ename, v_sal;
exitwhen emp_cursor%notfound;
dbms_output.put_line(v_ename);
endloop;
close emp_cursor;
end;
/
1.1.11
ref obj_type
为了共享相同对象,可以用
ref
引用对象类型。
create or replace type home_type as object(
street varchar2(50),city varchar2(20),
state varchar2(20),zipcode varchar2(6),
owner varchar2(10)
);
/
create table homes of home_type;
insert into homes values('
呼伦北路
12
号
','
呼和浩特
','
内蒙
','010010','
马鸣
');
insert into homes values('
呼伦北路
13
号
','
呼和浩特
','
内蒙
','010010','
秦斌
');
create table person(
id number(6) primary key,
name varchar2(10), addr ref home_type
);
insert into person select 1,'
马鸣
',ref(p) from homes p where p.owner='
马鸣
';
1.8
lob
变量
内部
: clob
、
blob
、
nclob
;外部:
bfile
。
1.9
非
pl/sql
变量
1.1.12
使用
sql*plus
变量
var namevarchar2(
10
)
begin
select ename into :namefrom emp
where empno=
7788
;
end;
/
print name
1.1.13
使用
procedure builder
变量
.createcharname length
10
begin
select ename into :namefrom emp
where empno=
7788
;
end;
/
text_to.put_line(:name);
1.1.14
使用
pro*c/c
变量
char
name[
10
];
execsqlexecute
begin
select ename into :namefrom emp
where empno=
7788
;
end-exec;
printf(
'
雇员名:
%s\n'
,name);
posted on 2006-08-21 21:39
鱼上游 阅读(3513)
评论(0) 编辑 收藏 所属分类:
爪哇友邻真不少