PL/SQL学习笔记
来源:互联网 发布:json数据格式 编辑:程序博客网 时间:2024/05/18 17:57
PLSQL是什么?
首先我们看一下什么是PLSQL,oracle给出的定义是:PL/SQL is a procedural language designed specifically to embrace SQL statements within its syntax. PL/SQL program units are compiled by the Oracle Database server and stored inside the database. And at run-time, both PL/SQL and SQL run within the same server process, bringing optimal efficiency. PL/SQL automatically inherits the robustness, security, and portability of the Oracle Database.
PL/ SQL是一种在其语法上接受SQL语句的过程化语言。PL/ SQL程序单元由Oracle数据库服务器编译,并存储在数据库中。在运行时,PL / SQL和SQL在相同的服务进程中运行,带来了最佳效率。PL/ SQL自动继承Oracle数据库的健壮性、安全性和可移植性。
为什么我们要用PL/SQL?
Oracle给出的why是这样一段话:An application that uses Oracle Database is worthless unless only correct and complete data is persisted. The time-honored way to ensure this is to expose the database only via an interface that hides the implementation details – the tables and the SQL statements that operate on these. This approach is generally called the thick database paradigm, because PL/SQL subprograms inside the database issue the SQL statements from code that implements the surrounding business logic; and because the data can be changed and viewed only through a PL/SQL interface.
一个没有正确和完整的持久化数据的使用Oracle数据库的应用程序是毫无价值的。确保正确使用oracle的一种由来已久的方法是只通过隐藏实现细节(操作这些表和SQL语句)的接口来公开数据库,这种方法通常被称为粗数据库范例,因为数据库中的PL / SQL子程序会从实现周围业务逻辑的代码中发出SQL语句,同时仅可以通过PL / SQL接口进行更改和查看数据。
使用PL/SQL可以编写具有很多高级功能的程序,虽然通过多个SQL语句可能也能实现同样的功能,但是相比而言,PL/SQL具有更为明显的一些优点:(以下优点来自百度知道)
- 能够使一组SQL语句的功能更具模块化程序特点;
- 采用了过程性语言控制程序的结构,程序代码易于理解
- 可以对程序中的错误进行自动处理,使程序能够在遇到错误的时候不会被中断;
- 具有较好的可移植性,可以移植到另一个Oracle数据库中;
- 集成在数据库服务器中,可以对数据进行快速高效的处理;
- 减少了网络的交互,有助于提高程序性能;
如果涉及到大量的增删改查操作,在PL/SQL中执行的效率是远远高于sql的。实际上PL/SQL和sql更多的是一种弥补关系。
PL/SQL的迭代控制
应用场景设想:
预先查询大量数据并且循环处理这些数据获取结果,再根据这些结果对数据库进行操作。在这种情况下(默认使用Oracle数据库,否则哪会有PL/SQL -_-||)提高程序效率的最佳方法应该是使用PL/SQL直接对数据库进行操作返回最终结果。
sqlplus多行粘贴的小提示
由于sqlplus命令行中无法按方向键调节输入指针位置,导致在发现输入语法错误的时候很难修改多行以前的代码。这里建议大家直接在记事本中编写PL/SQL代码,复制之后直接粘贴到sqlplus命令行窗口中,输入斜杠/运行程序。如最后一图。
如果在复制粘贴的时候命令行报错,则尝试以下操作:
复制的时候不要复制最后一行end;中的分号,我们在sqlplus命令行窗口中手动输入分号,然后回车,输入斜杠/,即可正常运行程序,如下图二。
loop循环
- Loop-exit-end循环:此循环由三部分组成,见下例
declarecnt number;begin cnt:=1; loop cnt:=cnt+1; if cnt>=100 then exit; end if; end loop;end;
- Loop-exit-when-end循环:
declare cnt binary_integer:=1;begin loop dbms_output.put_line(cnt); cnt:=cnt+1; exit when cnt>=5; end loop;end;
while-Loop循环
在while部分测试退出条件。
declare cnt binary_integer:=1;begin while cnt<=5 loop dbms_output.put_line(cnt); cnt:=cnt+1; end loop;end;
for循环
- 语法规则
for loop_counter in [reverse] low_bound ..high_bound loop
..
end loop;
这里loop_counter是隐式声明的索引变量。例:
begin for v_counter in 1..10 loop dbms_output.put_line(v_counter); end loop;end;
域法则
for循环的循环索引被隐式声明为binary_integer,在循环前面没有必要声明他。如果对他进行了声明,那么循环索引将隐蔽外层的声明。正如内部块的声明会隐蔽外部块的声明一样。使用reverse
如果在for循环中有reverse关键字,则循环索引将从最大值向最小值进行迭代。仍然是先写小值,后写大值。
begin for v_counter in reverse 0..10 loop dbms_output.put_line(v_counter); end loop;end
- 循环范围
最大值和最小值没有必要是数值文字,他们可以是能够被转换为数字值的任何表达式。
declare v_lowervalue number:=0; v_highvalue number:=10;begin for v_counter in v_lowervalue ..v_highvalue loop dbms_output.put_line(v_counter); end loop;end;
关于在PL/SQL中使用正确的循环控制
当你在 PL/SQL 中处理一个被索引的表时,很多情况下你不能确定表上是否存在索引,所以你不能使用最明显的 FOR 循环方式来循环表中的值。例如:
declare type my list_type is table of number index by pls_integer; mylist mylist_type;begin -- start at 2, instead of 1 mylist(2) := 2; mylist(3) := 3; -- skip 4 and 5 mylist(6) := 6; for i in 1..mylist.count loop dbms_output.put_line(mylist(i)); end loop;end;
前面的代码将返回 ORA-01403 错误:由于缺少索引1,没有发现数据。详细了解
- PL/SQL学习笔记
- PL/SQL学习笔记
- PL/SQL学习笔记
- PL/SQL学习笔记
- PL/SQL学习笔记
- PL/SQL学习笔记
- PL/SQL学习笔记
- PL/SQL学习笔记
- PL/SQL学习笔记
- PL/SQL 学习笔记!
- PL/SQL 学习笔记!
- PL/SQL学习笔记
- pl/sql学习笔记
- PL/SQL 学习笔记
- PL/SQL学习笔记
- PL/SQL学习笔记
- PL/SQL学习笔记
- PL/SQL 学习笔记
- Mybatis Collection查询集合只出现一条数据
- 基于FullCalendar插件的简单个人日程安排系统(1)
- ZigZag Conversion
- 欢迎使用CSDN-markdown编辑器
- javaScript中的if(变量)和if(变量== true)的区别
- PL/SQL学习笔记
- 提升Xcode编译性能--RAM磁盘编译,编译速速飞起来
- Maven項目的創建及SSM環境的搭建
- 多态部分作业 3..创建Rodent(啮齿动物):Mnouse(老鼠),Gerbil(鼹鼠),Hamster(大颊鼠)
- [面试]进程与线程的区别联系,并发和并行的区别
- 线程的同步
- git葵花宝典,GitLabWeb
- Oozie
- “自顶向下,逐步求精”的方法