PL/SQL简介

Posted 一只特立独行的_小猫

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PL/SQL简介相关的知识,希望对你有一定的参考价值。

目录

PL/SQL简介

PL/SQL块

1、语法

2、匿名块


PL/SQL简介

        PL/SQL(Procedure Language/SQL)程序语言是 Oracle 对 SQL 语言的过程化扩展,指在 SQL 命令语言中增加了过程处理语句(如:分支、循环等),使 SQL 命令语言具有过程处理能力。把 SQL 语言的数据操纵能力与过程语言的数据处理能力结合起来,使得 PL/SQL 面向过程但比过程语言简单、高效、灵活和实用。其基本语法结构为PL/SQL块。

PL/SQL块

        在 PL/SQL 中,最小的有意义的代码分组被称为块。块代码为变量声明和异常处理提供执行和作用域边界。PL/SQL 允许您创建匿名块和命名块。命名块可以是包、过程、函数、触发器或对象类型。PL/SQL 是 SQL 的过程语言扩展,它具有块结构。每一段代码都在块中执行。

1、语法

PL/SQL有四个关键字:

  • DECLARE:PL/SQL块的声明部分。

        这是为游标、数据类型定义、变量、嵌入函数和过程分配内存的位置。

  • BEGIN:PL/SQL块的可执行部分。

        它以关键字BEGIN开头。BEGIN标志着你把程序逻辑放在哪里的开始。并且每个PL/SQL程序必须至少有一行可执行代码,即使它是关键字NULL,这意味着没有操作。

  • EXCEPTION:PL/SQL块的异常处理部分。

        它以关键字EXCEPTION开头。这是您将捕获任何数据库或PL/SQL错误的地方。

  • END:每个PL / SQL块以关键字END结束。

2、匿名块

  • 匿名块不保存在数据库中。它们非常适合创建测试单元。匿名PL/SQL块的一般语法如下:
[ DECLARE ... declaration statements ... ] 
BEGIN ... one or more executable statements ... 
[ EXCEPTION 
... exception handler statements ... ] 
END; 

        其中, 方括号表示语法的可选部分。您必须具有BEGIN和END语句,并且必须至少有一个可执行语句。

-- This is an anonymous procedure, so it has no name
declare
  /* 
   declare local cursors, variables, and methods here.
   We don't need to have a declaration section.
  */
begin
  -- You write your logic here
  null;  -- at least one command!
exception
  when NO_DATA_FOUND then
    raise_application_error(-20000, 'No Data Found!');
end;
/   -- the forward slash says execute this procedure
  • 最小的匿名块:
-- 告诉SQL * Plus在PL / SQL过程完成后,将您的会话的数据库输出回显到屏幕。注意,这是一个SQL * Plus命令,不是匿名块的一部分。
SET SERVEROUTPUT ON SIZE 1000000

BEGIN
   DBMS_OUTPUT.PUT_LINE(SYSDATE);
END; 
/

PL/SQL语法简介(匿名PL/SQL块)

PL/SQL

 

  • PL/SQLOracle在关系数据库结构化查询语言SQL基础上扩展得到的一种过程化查询语言。
  • SQL与编程语言之间的不同在于,SQL没有变量,SQL没有流程控制(分支,循环)。而PL/SQL是结构化的和过程化的结合体,而且最为重要的是,在用户执行多条SQL语句时,每条SQL语句都是逐一的发送给数据库,而PL/SQL可以一次性将多条SQL语句一起发送给数据库,减少网络流量

SQL执行           

PL/SQL执行

 

 

  • 匿名Pl/SQL块
    • – 动态构造,只能执行一次
    • 一次性完成,没有名字
  • 存储过程,函数,触发器
    • 给它一个名字,保存到数据库,可以反复使用,调用.
    • – 存储在数据库中编译过的代码,可以反复执行。

 

PL/SQL语法结构

语法:

DECLARE

-- 声明部分,例如:定义变量、常量、游标。

BEGIN

-- 程序编写、SQL语句

EXECTPION

-- 处理异常

END ;

/

 

说明:

声明部分(DECLARE

包含变量定义、用户定义的PL/SQL类型、游标、引用的函数或过程;

执行部分(BEGIN

包含变量赋值、对象初始化、条件结构、迭代结构、嵌套的PL/SQL匿名块,或是对局部或存储PL/SQL命名块的调用;

异常部分(EXCEPTION

包含错误处理语句,该语句可以像执行部分一样使用所有项;

结束部分(END

程序执行到END表示结束,分号用于结束匿名块,而正斜杠(/)执行块程序;

默认情况下系统输出显示被关闭的,需要设定 SET SERVEROUTPUT ON

匿名Pl/SQL块

– 动态构造,只能执行一次

一次性完成,没有名字

范例

编写不做任何工作的PL/SQL块

BEGIN

NULL ;

END ;

/

最简单的循环PL/SQL匿名块,null表示什么也没干

BEGIN

for i in 1..10 loop

null;

end loop;    

END;

   /

编写HELLO WORD

SQL> BEGIN

 2 DBMS_OUTPUT.put_line(\'HELLO,WENDY\');

 3 END;

 4 /

HELLO,WENDY

 

PL/SQL procedure successfully completed.

匿名PL/SQL块,循环显示2HELLOW,WENDY

BEGIN

For I in 1..2 loop

DBMS_OUTPUT.put_line(\'HELLO,WENDY\');

End loop;

 END;

   /

匿名PL/SQL块,循环插入数据

SQL> insert into t select rownum,\'x\' from dba_objects where rownum<101;

能用SQL解决的就不要用PL/SQL

PL/SQL会消耗资源,效率很低

BEGIN

 for i in 1..100 loop

insert into t values(i,\'w\');

end loop;

 END;

 /

编写一个简单的PL/SQL程序

:= 为变量赋值

DECLARE

v_num NUMBER ;    -- 定义一个变量v_num

BEGIN

v_num := 30 ;         -- 设置v_num的内容

DBMS_OUTPUT.put_line(\'V_NUM变量的内容是:\' || v_num) ;

END ;

/

编写PL/SQL块,输入一个雇员编号,而后取得指定的雇员姓名

DECLARE

v_eno    NUMBER ;

v_ename    VARCHAR2(10) ;

BEGIN

v_eno := &empno ;        -- 由键盘输入雇员编号

SELECT ename INTO v_ename FROM emp WHERE empno=v_eno ;

DBMS_OUTPUT.put_line(\'编号为:\' || v_eno || \'雇员的名字为:\'|| v_ename) ;

END ;

/

 

 

以上是关于PL/SQL简介的主要内容,如果未能解决你的问题,请参考以下文章

关于pl/sql打开后database为空的问题解决办法

windows64位Oracle Database 12c Release 2安装和PL/SQL Developer配置

PL/SQL简介

PL/SQL简介

我在安装配置完Oracle和PL/SQL后,为啥plsql的database一栏没有可选项?

转:PL/SQL在 win8.1系统下连接Oracle11g没有database处理方法