1.
简介
1.1
结构
DECLARE --
定义
BEGIN --
执行部分
EXCEPTION --
例外处理
END; --
结束
<!---->
<o:p> </o:p>
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;
/
<o:p> </o:p>
1.2
块分类
<<outer>> <<inner>>
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;
/<o:p></o:p>
调用:
<o:p>
</o:p>
exec update_sal(
'SMITH'
,
10
)
call update_sal(
'SMITH'
,
800
)<o:p></o:p>
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;
/<o:p></o:p>
调用
:
SQL> VAR income NUMBER<o:p></o:p>
SQL> CALL annual_income('scott') INTO : income;<o:p></o:p>
调用完成。
<o:p>
</o:p>
SQL> print income<o:p></o:p>
INCOME<o:p></o:p>
----------<o:p></o:p>
36000<o:p></o:p>
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<o:p></o:p>
SQL> CALL emp_pkg
.
annual_income('scott') INTO : income;<o:p></o:p>
调用完成。
<o:p>
</o:p>
SQL> print income<o:p></o:p>
INCOME<o:p></o:p>
----------<o:p></o:p>
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;
/
2.
定义并使用变量
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;
/ <o:p></o:p>
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;
/
<o:p></o:p>
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;<o:p></o:p>
<o:p> </o:p>
1.1.9
VARRAY<o:p></o:p>
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
);<o:p></o:p>
1.7
参照变量
<o:p>
</o:p>
用于存放数值指针的变量。使得应用程序共享相同对象,从而降低占用空间。
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;
/<o:p></o:p>
1.1.11
REF obj_type<o:p></o:p>
为了共享相同对象,可以用
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 <o:p></o:p>
<o:p> </o:p>
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);
分享到:
相关推荐
Oracle 10g PL/SQL 是Oracle数据库系统中用于创建和管理存储过程、函数、触发器等数据库对象的编程语言。本教程旨在为初学者提供一个全面的学习平台,同时也为经验丰富的开发者提供参考资料。PL/SQL是Oracle特有的...
Oracle TimesTen In-Memory Database PL/SQL Developer's Guide 11g Release 2 (11.2.2)-148
T-SQL 是微软公司开发的 SQL Server 数据库管理系统的脚本语言,而 PL/SQL 是 Oracle 公司开发的 Oracle 数据库管理系统的脚本语言。 数据类型 在 T-SQL 中,numeric(p,s) 用于定义一个带有精度和小数位的数字类型...
本书是专门为oracle开发人员而提供的编程指南 通过学习本书 读者不仅可以掌握编写sql语句和pl/sql块的基础知识 而且还可以掌握sql高级特征 正则表达式 flashback查询 merge语句 sql:1999连接 和pl/sql高级特征 ...
《Oracle PL/SQL专家指南-高级PL/SQL解决方案的设计与开发》是一本深入探讨Oracle数据库中的PL/SQL编程的专业书籍。PL/SQL是Oracle数据库特有的编程语言,它结合了SQL的查询能力与过程式编程语言的功能,使得数据库...
通过学习本书,读者不仅可以掌握oracle常用工具oracle universal installer、net comfiguration assistant、sql developer、sql*plus的作用及使用方法,而且可以掌握sql语句和pl/sql的各种基础知识和高级特征(记录...
Oracle 11g SQL和PL SQL从入门到精通 pdf格式电子书 下载(一) http://download.csdn.net/source/3268267 Oracle 11g SQL和PL SQL从入门到精通 pdf格式电子书 下载(二) ...
以上只是Oracle 9i与PL/SQL的一些基础概念和关键特性,实际学习过程中还需要深入理解事务管理、性能优化、安全性控制等多个方面。"Oracle9i--pl/sql"这本书应该会详细讲解这些内容,帮助初学者逐步掌握数据库管理和...
《Oracle PL/SQL程序设计(第5版)》是一本全面介绍Oracle 11g中PL/SQL特性的书籍,适合数据库开发人员、管理员及相关从业人员阅读。本书不仅覆盖了PL/SQL的基础知识,还包括了大量的实战经验和高级主题,对于想要深入...
Oracle 10g WDP-PL/SQL 官方培训PPT是一套全面且深入的教程,旨在帮助学习者掌握Oracle数据库系统中的编程语言PL/SQL。PL/SQL(Procedural Language/Structured Query Language)是Oracle专为数据库管理设计的一种...
《Oracle PL/SQL程序设计(第5版)(套装上下册)》基于Oracle数据库11g,从PL/SQL编程、PL/SQL程序结构、PL/SQL程序数据、PL/SQL中的SQL、PL/SQL应用构建、高级PL/SQL主题这6个方面详细系统地讨论了PL/SQL以及如何...
ORACLE PL/SQL是从入门到精通的专业知识,涵盖了数据库开发与管理的多个方面,包括触发器、过程、函数、软件包、异常处理、游标、循环、分支、变量使用、数据库安装等关键知识点。 触发器是数据库中用来保证数据...
本书详细讲解了Oracle 11g版本中的PL/SQL语言,这涵盖了从基础语法到高级特性的广泛范围。PL/SQL是Oracle数据库中用于创建存储过程、函数、触发器、包等数据库对象的主要工具。第4版特别关注了在Oracle 11g环境下的...
Oracle PL/SQL是一种强大的编程语言,它结合了SQL(结构化查询语言)的数据库操作功能与PL/SQL的程序设计特性,广泛应用于Oracle数据库的开发和管理。这本书"Oracle PL/SQL从入门到精通"的配套源代码,显然是为了...
- "How to unwrap PL/SQL-BH-US-06-Finnigan.pdf"可能是对这个主题的详细讲解,涵盖了PL/SQL的解析和调试技巧。 - Oracle官方文档是了解PL/SQL的权威来源。 - 在线教程、论坛和社区(如Stack Overflow)提供了...
### Win7 x64 安装 Oracle 10g x64 及 PL/SQL Developer 相关知识点 #### 一、Oracle 10g 的安装步骤与注意事项 **1. 下载安装文件** - **来源**: 访问 Oracle 官方网站,下载适用于 Microsoft Windows Vista x...
PL/SQL Developer是一款专为Oracle数据库设计的集成开发环境,它极大地简化了PL/SQL语言的编写、调试和管理任务。远程连接Oracle数据库是PL/SQL Developer的一项关键功能,允许用户在本地计算机上操作和管理远程...
10. **PL/SQL对象类型**:这部分可能涉及Oracle的面向对象特性,如定义对象类型、对象变量、对象表和继承。 11. **PL/SQL与Java、C等其他语言的互操作性**:Oracle提供了与多种编程语言接口的机制,手册会讲解如何...
总的来说,学习并熟练掌握Oracle Database 12c的PL/SQL开发不仅能够提升数据库管理能力,还能为构建高效、稳定且易于维护的企业级应用打下坚实的基础。而"Oracle Database 12c PL/SQL开发指南(第7版)"的源代码示例...