当前位置:文档之家› PLSQL应用程序开发

PLSQL应用程序开发

Oracle PL/SQL ProGramming 学习笔记Author:丁俊目录序言-特点介绍 (2)PART1 用PL/SQL设计程序 (4)第一章plsql在10g中的新特性 (4)第二章建立和运行plsql程序 (6)第三章plsql语言基本原理 (9)PART2 PL/SQL应用程序结构 (12)第四章条件和序列控制 (12)第五章循环控制 (19)第六章异常处理 (23)PART3 PL/SQL程序应用 (25)第七章用数据来工作 (25)第八章Strings (27)第九章Numbers (31)第十章Records (36)第十一章集合类型 (38)序言-特点介绍1-1 pl/sql可以做的工作:1.用pl/sql的存储过程和数据库触发器实现至关重要的商业规则。

2.在数据库中生成和完全地管理xml文档。

3.web页面与数据库的结合。

4.实现自动化的数据库管理,用pl/sql建立安全级别来管理回滚段。

1-2 pl/sql特点:从oracle 6开始,模仿Ada语言的实现,Ada语言强调数据抽象,信息隐藏,还有其他现代语言设计中的关键策略。

pl/sql做为3GL语言具有面向过程语言的许多重要特性,如:1.丰富的数据类型,从number到string,从复杂的record到table,以及集合类型等。

2.显示的可读性强的块状结构,可以增强我们维护plsql程序。

3.条件,循环语句,包括if---else,3个loop循环(简单loop,for...loop,while...loop)。

4.完整地异常处理机制。

5.命名的,可重用的代码,如包,函数,过程,触发器,对象类型等。

6.plsql是sql的有力补充,与sql之间的联系紧密,整合性强。

7.plsql是oracle数据库产品的内置语言,不是一个孤立的语言。

8.是一种高性能的语言。

9.pl/sql运行过程Plsql引擎可以接受应用程序的程序,然后将sql部分和plsql部分分离出来,分别交给sql 引擎和plsql引擎执行,提高执行效率。

10.plsql可以每次发送成组的sql语句到服务器端执行,不像sql每次只能发送一句,减少网络负载量,提高效率,而且在oracle的相关工具中,如oracle form中,plsql也得到增强。

11.总结一句话:plsql有应用程序的特性,是sql的有力补充,具有流程控制,申明和使用变量,plsql能运行在任何具有oracle的环境中。

12.plsql支持dml,select语句,不直接支持ddl,用动态语句,execute immediate,不支持权限控制如grant和revoke。

PART1 用PL/SQL设计程序第一章plsql在10g中的新特性1.自动的,最佳代码编译oracle 10g发布的第1版本10.1会重新组织代码从而提高效率。

非sql区域的效率会提高2倍2.编译期警告3.预编译功能,指定条件编译最佳编译(optimized compiler)在10.1中默认为最佳编译,可以通过修改会话session来实现指定编译0无最佳编译1中等最佳编译,可以消除过剩代码和异常2默认级别,最佳编译ALTER SESSION SET PLSQL_OPTIMIZE_LEVEL = 0;也可以指定procedure的编译,先设过程级别,然后用reuseALTER PROCEDURE bigproc COMPILE PLSQL_OPTIMIZE_LEVEL = 0;然后使用ALTER PROCEDURE bigproc COMPILE REUSE SETTINGS;编译期警告ALTER SESSION SET plsql_warnings = 'enable:all'条件编译用$IF指定如CREA TE OR REPLACE PROCEDURE calculate_totals ISBEGIN$IF $$oe_debug AND $$oe_trace_level >= 5$THENDBMS_OUTPUT.PUT_LINE ('Tracing at level 5 or higher');$ENDNULL;END calculate_totals;支持非连续的集合用forall,在10g之间用forall只能是连续的集合,forall与批处理bulk collection联合用,bulk collection可以减少plsql的引擎和sql引擎之间的相互转换的次数,所以能提高效率。

10g之后可以是非连续的单元,用INDICES OF 指定,如FORALL i IN INDICES OF inactivesDELETE FROM ledger WHERE acct_no = inactives(i);forall指定集合的值,用values ofFORALL i IN V ALUES OF inactives_listDELETE FROM ledger WHERE acct_no = inactives(i);提高数据类型的支持oracle 10g的所有数字类型的全部采用机器运算,提高效率,对浮点数运算采用二进制,提高金融业计算的准确性,单精度BINARY_FLOAT,双精度BINARY_DOUBLE支持set操作符支持正则表达式可以定义自己的引号处理,用q',表示分界,指一个单引号,后面可以使用(,{,[,<等分界符封装,如q'[ needs to be closed with ]',对于nchar和nvarchar用nq'^nchar string^',也可以把^改成其他的分界符号传统的是两个引号表示一个引号.看下面例子:SQL> select q'<This's a cat>' from dual;Q'<THIS'SACAT>'------------------------This's a catSQL> select q'_''_' from dual;Q'_'----''SQL> select nq'^a^' from dual;NQ--aSQL> select nq'_a_' from dual;NQ--a更多的built_in 包,并且扩展了原来的包DBMS_SCHEDULER 更新DBMS_JOB. DBMS_SCHEDULERDBMS_CRYPTO 提供加密技术DBMS_MONITOR 监控DBMS_WARNING编译警告控制第二章plsql开始1-1 sql*plus使用登陆连接数据库sqlplus dingjun123/198403 不推荐使用,暴露密码sqlplus 会提示输入用户名,密码sqlplus /nolog不连接数据库,然后在connect dingjun123/198403不会暴露密码show all显示所有sql*plus设置用户定义变量define x = 'test';//注意与绑定变量的区别,直接定义define x=test也是正确的显示define x,显示值和类型Define显示所有的变量定义是define name =value,而绑定变量定义的时候不能赋值引用定义的变量,用&x,要加'',否则就是另一种情况了select '&x' from dual;绑定变量define x = 'test';variable x varchar2(10);//variable 可以简写成varbegin:x := 'ding'; --绑定变量有前缀:end;/select :x,'&x' from dual;SQL> select :x,'&x' from dual;原值1: select :x,'&x' from dual新值1: select :x,'dsadsa' from dual:X 'DSADSA' ---------------------------------------------------------------- ------------dd dsadsaL 显示所有缓冲区内容n 显示第几行del n删除第几行c /old/newn text 插入到第n行i插入1-2绑定变量1.申明:直接在salplus中variable x varchar2(10); 不能赋值。

绑定变量可以直接在plsql中使用,使用要加前缀:绑定变量是直接在主机环境中申明的,不能在plsql块中申明,在运行期赋值。

一般针对可能使用很多变量,但是不清楚的情况下使用。

可以提高效率。

引号绑定变量必须加前缀:如:begin:x := 'dj';end;/这样已经初始化了绑定变量x,看x的结果用print x或print :x2.如果用函数来给绑定变量赋值可以使用call function_name into :x,z只有在单条语句上使用,在过程中用:x := 函数;3.在PLSQL中使用绑定变量有很多优点,可以从外部传参数的值,使过程的执行只进行一次硬分析,其他都是软分析,从而提高程序和语句的执行效率。

1-3 创建函数函数直接可以在sql中使用,有返回类型,不涉及特定表操作,与过程不一样1.创建一个连接字符串的函数--在参数中不写in也可以,也可以初始化,但是不能带长度create or replace function concatestring(a in varchar2, b in varchar2)return varchar2asc varchar2(100);beginc := a||b;return c;end;/--------------------------------------------------select concatestring('ding','jun') result from dual/--------------------------------------------------结果:RESULT---------------------------dingjun注:set echo on是用@命令时候,会把调用的内容显示出来a.所有能使用create语句建立的对象都可以使用drop语句来删除,如删除函数是drop function function_name;过程删除是drop procedure procedure_name等。

相关主题