PLSQL

PLSQL
是Oracle公司在SQL基础上进行扩展而成的一种过程语言。PLSQL提供了典型的高级语言特性,包括封装,例外处理机制,信息隐藏,面向对象等;并把最新的编程思想带到了数据库服务器和工具
集中。 与Java, C#相比 ,PLSQL的优势是:SQL语言可以直接写到PLSQL的“块”中或者是PLSQL的过程、函数中。没有必要向java那样先创建Statement对象来执行SQL; 这使得PLSQL成为很强大的事务处理语言,即:使用SQL来处理数据,使用控制结构来处理业务逻辑。
在这里插入图片描述

PLSQL在Oracle 数据库服务器(在存储过程、函数、数据库触发器,Package包中使用)和Oracle开发 工具集(在开发工具组件的触发器中使用);Form Developer,Report Developer 还可以使用共享库(包含使用PLSQL写的过程和函数,扩展名为PLL的文件); SQL数据类型也可以在PLSQL中使用,结合 SQL提供者的直接访问,这些共享数据类型整合了PLSQL和Oracle的数据库字典。PLSQL消除了存取数据库的便利性与过程语言之间的障碍。

PLSQL的块包括三种:匿名块、存储函数、函数
在这里插入图片描述
PLSQL变量声明:
语法:

identifier [CONSTANT] datatype [NOT NULL] [:= | DEFAULT expr]

例子:

DECLARE
v_hiredate DATE;
v_deptno NUMBER(2) NOT NULL := 10;
v_location VARCHAR2(13) := ‘Atlanta’;
c_comm CONSTANT NUMBER := 1400;

变量命名建议:
1、v_name表示一个变量,c_name表示一个常量
2、每一行声明一个变量,可读性比较好
3、命令避免与数据库字段名相同

DECLARE
employee_id NUMBER(6);
BEGIN
SELECT employee_id
INTO employee_id  --变量名和字段名相同,可以给变量加一个v_
FROM employees
WHERE last_name = 'name';
END;

将变量类型声明为表中的字段类型相同

identifier Table.column_name%TYPE;
举例:
v_name emp.last_name%type;

变量输出:DBMS_OUTPUT.PUT_LINE()类似printf()

DECLARE
v_sal NUMBER
BEGIN
v_sal := 12;
DBMS_OUTPUT.PUT_LINE (v_sal);
END;

注释语句
1、多行注释类似java:/* 注释的内容 */
2、单行注释使用:- -

SQL函数在PLSQL语句中的使用
不能使用:Decode函数、分组函数(avg,min,max,count,sum,stddev,and variance)等

PLSQL块是可以嵌套的,作用范围与其他语言类似


x number;
begin
      declare
      y number
      begin
      y:=x;
      end;
end;

select into 语句:用于把从数据库查询出来的内容存入变量中

begin
select x,y - -查询出来的x,y字段
into v_x,v_y,将x,y存入声明的v_x,v_y变量
end

PLSQL中的控制语句
和其他语言一样,主要包括判断和循环
if判断语句

IF condition THEN
statements;
[ELSIF condition THEN
statements;]
[ELSE
statements;]
END IF;

循环
1、基本循环

LOOP
statement1;
. . .
EXIT [WHEN condition];
END LOOP;

2、for循环

WHILE condition LOOP
statement1;
statement2;
. . .
END LOOP;

举例:

FOR i IN 1…3 LOOP
INSERT INTO locations(location_id, city, country_id)
VALUES((v_location_id + i), v_city, v_country_id );
END LOOP;

3、while循环

FOR counter IN [REVERSE]
lower_bound…upper_bound LOOP
statement1;
statement2;
. . .
END LOOP;

4、嵌套循环

<<Outer_loop>>
LOOP
v_counter := v_counter+1;
EXIT WHEN v_counter>10;
<<Inner_loop>>
LOOP

EXIT Outer_loop WHEN total_done = ‘YES’;
– Leave both loops
EXIT WHEN inner_done = ‘YES’;
– Leave inner loop only

END LOOP Inner_loop;

END LOOP Outer_loop;

PLSQL例外处理

BEGIN
. . .
EXCEPTION
   WHEN NO_DATA_FOUND THEN
        statement1;
    WHEN TOO_MANY_ROWS THEN
        statement1;
    WHEN OTHERS THEN
        statement1;
        statement2;
END;

PLSQL中的包package
Package组成:Package由包说明(package Specification)和包体(package body)两部分构成; 包说明部分相当于C语言里面的.H文件,包体部分相当于 C语言里面针对.H实现的C文件。
在这里插入图片描述

package常用SQL
1、创建包
create [or replace] package
2、包体
create [or replace] package body
package好处
1、模块化:一般把有相关性的函数和过程放到一个Package中;
2、易设计:可以把包说明和包体分别编写和编译,先编写和编译包说明部分,在编写和说明包体部分;这有利于分工合作;
3、信息隐藏:包体中函数可以部分出现在包说明中,只有出现在包说明中的函数和过程才是该Package的公有函数和过程,可以被其他包中的函数调用,否则对其他包中的函数是不可见的,未在包说明部分出现的函数和过程相当于私有的。
4、加载性能提高:当Package中有一个函数或过程被调用时,整个Packege就被加载到内存中,这样当该Package中其他函数被调用时,就直接从内存读取了,可以减少磁盘IO,从而提高性能。 这个特性也提醒我们不要去搞巨无霸的Package, 把你用到的任何 函数都写到一个Package中,这会导致严重的内存浪费。
5、重载:一个package 中可以定义同名、不同参数的函数或过程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值