您的位置:首页 > 数据库

PL/SQL语言基础

2018-03-02 15:41 316 查看

PL/SQL语言基础

本文将介绍PL/SQL的语法,字符集等语言规则,可能初期还不理解,但随着学习的深入,将会逐渐理解PL/SQL。

我写着文章的目的是为了在我阅读《Oracle.PL.SQL程序设计》一书是做些笔记,并分享给其他同学。

PL/SQL的块结构

pl/sql块由以下四个方面组成:

块头(可选)
块头主要是确定pl/sql的名称,类型,参数,返回本文/sql引擎要执行的语句


异常处理(可选)
这一部分类似于java中的try-catch,指的是处理pl/sql运行时出现的异常


举个栗子:

procedure addEmp (ename_in IN VARCHAR2) --块头
is
hiredate_sys date;              --声明
begin
hiredate_sys:=sysdate;         --执行

insert into m_employees (ename,hiredate) values (ename_in,hiredate_sys);

exception
--异常
end;


PL/SQL的块分类

匿名块
指的是没有块头部分的块结构


命名块
指的是有块头部分的块结构,上面的栗子就是一个命名块


嵌套块
指的是嵌套在块中的子块


再来个栗子:

procedure demo1

is
......
begin

......

--下面是一个嵌套块
declare
......
begin
......
end;

end;


PL/SQL中作用范围的理解

在java或者其他语言中也有作用范围的概念,比如说同一个类中方法中的变量在其他里面是不可见的,在PL/SQL中也有类似的概念。

在一个块中生命的变量或者其他,在其他块中是不可见的,只有在本块或者本块的子块中可以使用。

有一种特殊情况需要注意,当子块中具有和包围块中相同的变量名,采用就近原则,除非采用下面方面指明应用父块中的变量。

第三个栗子:

package demo1

is
variable1 number;
begin

--下面是一个嵌套块
declare
variable1 number;
begin
variable1 := 30; --这个指的是嵌套块中的变量
demo1.variable1 :=40 --这个指的是包围块中的变量
end;

end;


有一种叫做嵌套程序的结构,它指的是在包围块的声明部分中的过程或者函数,包围块中的变量对于嵌套程序是可见的,嵌套程序可以在执行过程中被调用。

举个小李子,时间太晚了,不敲了,有些犯懒。



PL/SQL的字符集以及标识符关键字等

PL/SQL的字符集

字符集

为US7ASCII,记住是ASCII就好。最重要的是PL/SQL是一个不区分大小写的语言。

PL/SQL的标识符命名规则为:

最长30个字符

必须以字符开头

可以带有$,_,#

标识符的命名规则相信每个公司都有规定,但是我要讲一个有趣的事。我可以明明一个标识符为 (“ABC”)注意这个标识符是带有双引号的,之前说PL/SQL不区分大小写,但是以这种方式命名的标识符是区分大小写的,并且使用时必须带有双引号。

关于字符串中使用单引号的问题

在PL/SQL中我们定义一个字符串时是这样定义的 —— ‘我是个字符串’ 但当我定义一句英文时就尴尬了 ( I’m a string ) 想要表达这样的句子我们不得不这样写——’I”m a string ’ 。其实还有一种办法就是—— q’!I’m a string!’ 其中的 ! 可以为 {} , [] ,(),||。

PL/SQL中的注视

PL/SQL中支持单行注释以 – 开头。多行注释 由/* */ 包围

PL/SQL的标签符号《》

标签通常和GOTO语句一起应用,格式为 《identifier》,其中identifier是一个PL/SQL中有效的标识符。

最后一个栗子:

create or replace procedure demo8
is
begin
dbms_output.put_line('test the goto');
goto the_point;
dbms_output.put_line('这条语句不会输出');
<<the_point>> --这是一个标签,提供GOTO语句的定位功能
dbms_output.put_line('goto 语句执行成功');
end;


我们的嵌套块可以是匿名的,我们可以用标签为它赋予一些意义。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: