PL/SQL语言基础(原创)

PL/SQL概述

PL/SQL是过程化的SQL语言,是ORACLE对SQL语言的扩展,在普通SQL语句的基础上增加了编程语言的特点。使得该语言不仅具有过程编程语言的特征,如循环、条件分支等。同时也具有对象编程语言的特征,如重载、继承等。
PL/SQL程序语言的组成
主要由块组成
一个块由三个基本部分组成:声明、执行体、异常处理
PL/SQL块有匿名块和命名块
命名块会将代码保存到服务器
    典型的块结构如下
        [ DECLARE                    --声明部分
            declaration_statements
        ]
        BEGIN
            executable_statements   --执行体部分
        [EXCEPTION
            exception_handling_statements    --异常处理部分
        ]
        END;
        /
PL/SQL的语言优点有:支持SQL;高生成率,性能好;可移植性;与Oracle集成。

PL/SQL的语法要素
PL/SQL语法要素包括字符集、标识符、文本、分隔符、注释等。
字符集:
        包括英文大小写
        0-数字
        空白符、制表符、空格
        一些特殊符号,如~、!、@、#等
        PL/SQL字符集不区分大小写
标识符:
        变量、常量、子程序的名称
        以字母开头、最大长度个字符
        包含空格等特殊符号时,要用英文双引号括起来
文字:
        数值型
            可用常规表示,也可以用科学计数法和幂的形式
        字符型
            字符型用单引号括起
        日期型
        布尔型
            TRUE、FALSE、NULL
PL/SQL的数据类型
        NUMBER     数字型能存放整数值和实数值,并且可以定义精度和取值范围
                  DEC    数字型NUMBER的子类型,小数
                  DOUBLE PRECISION     数字型NUMBER的子类型,高精度实数
                  INTEGER     数字型NUMBER的子类型,整数
                  INT         数字型NUMBER的子类型,整数
                  NUMERIC     数字型NUMBER的子类型,与NUMBER等价
                  REAL        数字型NUMBER的子类型,与NUMBER等价
                  SMALLINT    数字型NUMBER的子类型,取值范围比INTEGER小
        BINARY_INTEGER  数字型可存储带符号整数,为整数计算优化性能
        VARCHAR2        字符型存放可变长字符串,有最大长度
        CHAR        字符型定长字符串
        LONG        字符型变长字符串,最大长度可达,767
        DATE        日期型以数据库相同的格式存放日期值
        BOOLEAN     布尔型TRUE OR FALSE
        ROWID ROWID 存放数据库的行号
        LOB类型,又分为BFILE,BLOB,CLOB,NCLOB
操作符
        算术运算符
            +、-、*、/、**
        比较运算符
            =、<>、~=、!= 、^=、<、<=、>、>=
        其它分隔符
            ()、:= (赋值)、,(表表项的分隔)、| |(字符串连接)
            << (标号开始) >> (标号的结束)
            --  单行注释
            /*    */    多行注释
            %   属性指示器,一般与TYPE、ROWTYPE等一起用

定义变量
变量的类型可以分为
        标量类型
        复合类型
        参照类型
        LOB 类型
1、标量类型(常用)
varchar2(n),char(n),number(p,s),date,timestamp,long(long raw),boolean,binary_integer,binary_float,binary_double
定义方法(定义时必须使用标量类型)
identifier [constant] datatype [not null] [:= | default expr]
        v_ename     varchar2(20);
        v_sal       number(6,2);
        c_tax_rate  constant number(3,2):=3.35;
        v_hiredate  date;
        v_valid     boolean not null default false;
        v_ename emp.ename%type;    --使用表列来定义数据类型
2、复合类型变量,指用于存放多个值的变量。当定义复合变量时,必须要使用PL/SQL的复合数据类型。PL/SQL包括PL/SQL记录、PL/SQL表、嵌套表及VARRAY等四种复合数据类型。

PL/SQL记录
PL/SQL记录类似于高级语言中的结构,每个PL/SQL记录一般都包含多个成员。当使用PL/SQL记录时,首先需要在定义部分定义记录类型和记录变量,然后在执行部分引用该记录变量。需要注意,当引用记录成员时,必须要加记录变量作为前缀(记录变量.记录成员)。

使 用select into进行变量赋值时,如果选择列表包含多个列和表达式,并且使用标量接收数据,就需要定义多个标量,如果使用plsql记录接收数据就只需要定义一个 记录变量即可,从而简化了数据的处理。在select..into语句中使用plsql记录时,既可以使用记录变量,也可以使用记录成员。
==============定义PL/SQL记录==============

declare
   type emp_record_type is record(
      name emp.ename%type,
      salary emp.sal%type,
      title emp.job%type);
      emp_record emp_record_type;
begin
   select ename,sal,job into emp_record
   from scott.emp where empno=7788;
   dbms_output.put_line('Employee Name: ' || emp_record.name);
end;
/
=========================================

 

PL/SQL表
与 记录一样,表也是PL/SQL中的一种复合数据结构。PL/SQL表是一个一维结构,它是存储相同类型值的元素的一个集合。PL/SQL表类似于高级语言 中的数组。需要注意,PL/SQL表与高级语言的数组有所区别,高级语言数组的下标不能为负,但PL/SQL表的下标可以为 负值;高级语言数组的元素个数有限制,而PL/SQL表的元素个数没有限制,并且其下标没有上下限。当使用PL/SQL表时,必须首先在定义部分定义PL /SQL表类型和PL/SQL表变量,然后在执行部分中引用该PL/SQL表变量。
PL/SQL表的声明
通用语法格式为:
TYPE  tabletypename  IS  TABLE  OF
datatype | variablename%TYPE | tablename.columnname%TYPE
[ NOT NULL ] INDEX BY BINARY_INTERGER;
例如:
TYPE deptname_table_type IS TABLE OF dept.DeptName%TYPE
INDEX BY BINARY_INTERGER;
TYPE major_table_type IS TABLE OF VARCHAR2(50)
INDEX BY BINARY_INTEGER;
我们可用标量数据类型或声明属性%TYPE来声明一个表类型。但声明时必须添加INDEX BY BINARY_INTEGER子句。这是目前对表索引唯一可以使用的子句。主键随同数据列一起存储在表的内部。表包括两列,即索引/主键列和数据列。
声明实际的表,通过“表名+PL/SQL表名”来定义实际的表。基于上面的声明的表类型来定义该实际的表,如下:
deptname_table  deptname_table_type;
引用表元素/行时,我们不能只通过表名来引用表,必须将主键值置于一对圆括号中,作为其下标所索引:
tablename(primarykeyvalue)
例如

deptname_table(5):=’Human Resources’
注:在PL/SQL表中,主键值不是预分配的,只有当一行赋值时此行才会创建
内置函数
内置函数是PL/SQL提供的对PL\SQL表进行操作的方法,通用语法格式为:
tablename.methodname[(index1[,index2])
其中methodname是对表进行操作的方法。内置方法如下表所示:

==============定义PL/SQL表==============

declare
    type ename_table_type is table of emp.ename%type
    index by binary_integer;
    ename_table ename_table_type;
begin
    select ename into ename_table(-1) from scott.emp
    where empno=7369;
    select ename into ename_table(100) from scott.emp
    where empno=7788;
    dbms_output.put_line('First Employee Name : '|| ename_table(-1) || ' Number is ' || ename_table.first);
    dbms_output.put_line('Last Employee Name : '|| ename_table(100) || ' Number is ' || ename_table.last);
    dbms_output.put_line('Employee Number : '|| ename_table.count);
end;
/

First Employee Name : SMITH Number is -1
Last Employee Name : SCOTT Number is 100
Employee Number : 2

=========================================

 

可以看到,PL\SQL下标的计算只针对以使用的PL\SQL表成员有效。

--嵌套表,varray例子略

3、参照类型变量
用于存放数值指针的变量。通常包括游标变量(REF CURSOR)和对象类型变量(REF obj_type)
4、LOB变量
存储大批量数据的变量,通常分为内部LOB以及外部LOB
变量的赋值

在SQL*PLUS中必须首先使用variable命令定义变量,如在SQL*Plus中输出变量,则使用print variable_name

==============SQL*PLUS变量赋值==============

SQL> var name varchar2(20)
SQL> begin
  2    select ename into :name from emp where empno=7788;
  3  end;
  4  /
PL/SQL procedure successfully completed.
SQL> print name
NAME
--------------------------------------------------------------------------------
SCOTT

当然可以直接为变量赋值,方法如下

SQL> var empno number
SQL> exec :empno :=7788
PL/SQL procedure successfully completed.
SQL> print empno
     EMPNO
----------
      7788

===========================================

在PL\SQL中变量的赋值方法有:在定义时赋值,使用select ... into赋值例,手工赋值三种。

==============PL\SQL变量赋值==============

declare
      v_deptno number :=30;                --在定义时赋值
      v_name emp.ename%type;
      v_job  emp.job%type;
      v_empno  emp.empno%type;
begin
      v_empno := &empno;                --手工赋值
      select ename,job into v_name,v_job from emp where deptno = v_deptno and empno = v_empno;                --通过select into赋值
      dbms_output.put_line('Name: ' || v_name);
      dbms_output.put_line('Job: ' || v_job);
exception
      when no_data_found then
        dbms_output.put_line('NO FOUND RECORD');
end;
/

===========================================

 

参考至:http://blog.csdn.net/robinson_0612/article/details/6063399

                http://www.cnblogs.com/FeiyueHang/archive/2011/06/30/2094862.html

                http://blog.163.com/xuejelly1985@126/blog/static/36210340200882394133500/

                http://fzguon.blog.sohu.com/160135515.html

                http://www.2cto.com/database/201110/107424.html

本文原创,转载请注明出处、作者
如有错误,欢迎指正

游戏:czmcj@163.com

作者:czmmiao  文章出处:http://czmmiao.iteye.com/blog/1810096

时间: 2024-09-27 13:31:27

PL/SQL语言基础(原创)的相关文章

[转贴]Oracle PL/SQL语言基础

oracle|sql语言 [转贴]Oracle PL/SQL语言基础 Oracle PL/SQL语言基础   PL/SQL是ORACLE对标准数据库语言的扩展,ORACLE公司已经将PL/SQL整合到ORACLE 服务器和其他工具中了,近几年中更多的开发人员和DBA开始使用PL/SQL,本文将讲述PL/SQL基础语法,结构和组件.以及如何设计并执行一个PL/SQL程序.    PL/SQL的优点    从版本6开始PL/SQL就被可靠的整合到ORACLE中了,一旦掌握PL/SQL的优点以及其独有

Oracle PL/SQL语言基础

oracle|sql语言 Oracle PL/SQL语言基础  2002-8-23   Oracle PL/SQL语言基础 PL/SQL是ORACLE对标准数据库语言的扩展,ORACLE公司已经将PL/SQL整合到ORACLE 服务器和其他工具中了,近几年中更多的开发人员和DBA开始使用PL/SQL,本文将讲述PL/SQL基础语法,结构和组件.以及如何设计并执行一个PL/SQL程序. PL/SQL的优点 从版本6开始PL/SQL就被可靠的整合到ORACLE中了,一旦掌握PL/SQL的优点以及其独

Oracle PL/SQL语言入门基础_oracle

正在看的ORACLE教程是:Oracle PL/SQL语言入门基础.PL/SQL是ORACLE对标准数据库语言的扩展,ORACLE公司已经将PL/SQL整合到ORACLE 服务器和其他工具中了,近几年中更多的开发人员和DBA开始使用PL/SQL,本文将讲述PL/SQL基础语法,结构和组件.以及如何设计并执行一个PL/SQL程序. PL/SQL的优点 从版本6开始PL/SQL就被可靠的整合到ORACLE中了,一旦掌握PL/SQL的优点以及其独有的数据管理的便利性,那么你很难想象ORACLE缺了PL

Oracle基础学习(三) Oracle PL/SQL语言基础

本章目标 PL/SQL语言基本结构 PL/SQL变量和常量的声明 PL/SQL程序的执行部分 了解PL/SQL常用函数 PL/SQL简介 1. PL/SQL简介 a) PL/SQL(Procedural Language/SQL,过程语言/SQL) i. 它是结合Oracle过程语言和结构化查询语言的一种扩展语言 ii. PL/SQL支持多种数据类型,可以使用条件语句和循环语句等控制结构 iii. PL/SQL可用于 创建存储过程.触发器和程序包,也可以用来处理业务规则.数据库事件或给SQL命令

PL/SQL流程控制(原创)

概述 类似于高级语言,流程控制语句是PL/SQL语言的重要组成部分.这些流程控制语句使得PL/SQL加大了代码的灵活性和多样性,大大简化了程序的编写.下面将列出流程控制语句并给出具体事例. 条件分支结构if IF ... THEN ... END IF   IF condition THEN       statement   END IF;判断condition是否成立,成立就执行IF 与END IF 之间的语句.例:输入员工编号,查询其工资,如果他们的职位是CLERK,则工资增加%,再显示修

PL/SQL1——语言基础

原文转自  一沙弥的世界  的博客 PL/SQL是过程化的SQL语言,是ORACLE对SQL语言的扩展,在普通SQL语句的基础上增加了编程语言的特点.使得该语言不仅具有过程编程语 言的特征,如循环.条件分支等.同时也具有对象编程语言的特征,如重载.继承等.     一.PL/SQL程序语言的组成     主要由块组成         一个块由三个基本部分组成:声明.执行体.异常处理         PL/SQL块有匿名块和命名块         命名块会将代码保存到服务器            

Sql语言基础

一.基础部分: sql语言的发展历史 sql数据类型 sql变量和运算符 sql基本语句 sql的日期函数 sql字符串函数 sql数学函数 sql集合函数 sql类型转换函数及文本和图像函数 二.表.视图和索引 sql数据表 sql表修改语句 sql 索引视图 sql查询语句 统计及利用查询结果创建新表 使用Union运算符实现多查询联合 sql连接语句 sql子查询语句

Oracle数据库之PL/SQL程序基础设计

一.PL/SQL块结构 前边我们已经介绍了PL/SQL块的结构,再来回顾一下: DECLARE /* * 声明部分--定义常量.变量.复杂数据类型.游标.用户自定义异常 */ BEGIN /* * 执行部分--PL/SQL语句和SQL语句 */ EXCEPTION /* * 异常处理部分--处理运行异常 */ END; /*块结束标记 */ 要实现PL/SQL程序设计,先介绍如下的基本内容: 二.标识符 PL/SQL程序设计中的标识符定义与SQL的标识符定义的要求相同: 标识符名第一个字符必须为

Oracle基础学习(二) SQL语言基础

本章目标 数据类型 SQL语句类型介绍 SELECT基础 数据类型 1. 数据类 型 a) 数据类型是在设计表结构中需要定义的,选择适当的数据类型可以节省存储空间,提高运算效率 . b) Oracle数据类型主要包括字符型.数据型.日期/时间型.大对象(LOB)型等 2. 字符型 3. 数值型 4. 日期/时间类型