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;    --使用表列来定义数据类型

        v_sal   emp.sal%type;

       

    2.复合类型(存放多个值的变量)

        plsql中包含pl/sql记录,pl/sql表,嵌套表,varray四种复合类型

        --定义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表

            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=7788;

                dbms_output.put_line('Employee Name : '|| ename_table(-1));

            end;

            /

            PL/SQL表类似于高级语言中的数组,且PL/SQL表的下表可以为负值,元素的个数没有限制.注意必须首先定义PL/SQL表类型及表变量

            在本例中,ename_table_type为表类型,表类型中元素的数据类型为emp.ename%type,

                ename_table为表变量,ename_table(-1)表示下标为-1的元素

       

        --嵌套表,varray例子略

       

    3.参照类型变量

        用于存放数值指针的变量。通常包括游标变量(REF CURSOR)和对象类型变量(REF obj_type)

    4.LOB变量

        存储大批量数据的变量,通常分为内部LOB以及外部LOB

    5.使用SQL*Plus变量

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

            scott@ORCL> var name varchar2(20);

            scott@ORCL> begin

              2  select ename into :name from emp where empno=7788;

              3  end;

              4  /

 

            PL/SQL procedure successfully completed.

 

            scott@ORCL> print name;

 

            NAME

            --------------------------------

            SCOTT      

 

三、PL/SQL中常用的变量赋值方式

    1.在定义时赋值

        v_empno     number:=7788

        c_tax_rate  constant number(3,2):=3.35;

   

    2.使用select ... into 来赋值

        SELECT expression INTO var_list FROM table_name WHERE condition

       

        --例:将号部门的名称和工作地点显示出来

 

            DECLARE

                v_name dept.dname%TYPE;

                v_loc   dept.loc%TYPE;

            BEGIN

                select dname,loc INTO v_name,v_loc FROM dept WHERE deptno=10;

                DBMS_OUTPUT.PUT_LINE('10 DEPT NAME: '||v_name);

                DBMS_OUTPUT.PUT_LINE('10 DEPT loc: '||v_loc);

            EXCEPTION

                WHEN NO_DATA_FOUND THEN

                    DBMS_OUTPUT.PUT_LINE('NOT FOUND RECORD');

            END;

            /

 

        --例:输入员工编号,查询员工姓名,职位,工资

       

            scott@ORCL> DECLARE

              2          v_name  emp.ename%TYPE;

              3          v_job   emp.job%TYPE;

              4          v_sal  emp.sal%TYPE;

              5          v_id    emp.empno%TYPE;

              6        BEGIN

              7          v_id:=&inputid;

              8          SELECT ename,job,sal INTO v_name,v_job,v_sal FROM emp WHERE empno=v_id;

              9          DBMS_OUTPUT.PUT_LINE('7788 NAME:'||v_name);

             10          DBMS_OUTPUT.PUT_LINE('7788 job:'||v_job);

             11          DBMS_OUTPUT.PUT_LINE('7788 sal:'||v_sal);

             12        EXCEPTION

             13          WHEN NO_DATA_FOUND THEN

             14            DBMS_OUTPUT.PUT_LINE('NOT FOUND RECORD!');

             15        END;

             16  /

            Enter value for inputid: 7788

            old   7:         v_id:=&inputid;

            new   7:         v_id:=7788;

            7788 NAME:SCOTT

            7788 job:ANALYST

            7788 sal:3000

 

            PL/SQL procedure successfully completed.

       

       

           

        --例:执行UPDATE

            scott@ORCL> DECLARE

              2        v_sal emp.sal%TYPE;

              3        old_sal emp.sal%TYPE;

              4        v_id emp.empno%TYPE;

              5      BEGIN

              6        v_sal:=&inputsal;

                  v_id:=&inputid;

              7        v_id:=&inputid;

              8        SELECT sal INTO old_sal FROM emp WHERE empno=v_id;

              9        UPDATE emp SET sal=v_sal WHERE empno=v_id;

             10        DBMS_OUTPUT.PUT_LINE('old sal:'||old_sal);

             11        DBMS_OUTPUT.PUT_LINE('new sal:'||v_sal);

             12      END;

             13      /

            Enter value for inputsal: 3500

            old   6:       v_sal:=&inputsal;

            new   6:       v_sal:=3500;

            Enter value for inputid: 7788

            old   7:       v_id:=&inputid;

            new   7:       v_id:=7788;

            old sal:3000

            new sal:3500

 

            PL/SQL procedure successfully completed.

 

四、更多参考

 

    有关SQL请参考 

        SQL 基础--> 子查询

        SQL 基础-->多表查询

SQL基础-->分组与分组函数

SQL 基础-->常用函数

SQL 基础--> ROLLUP与CUBE运算符实现数据汇总

SQL基础-->层次化查询(START BY ... CONNECT BY PRIOR)

 

    有关PL/SQL请参考

        PL/SQL --> 语言基础

PL/SQL --> 流程控制

PL/SQL --> 存储过程

PL/SQL --> 函数

PL/SQL --> 游标

PL/SQL -->隐式游标(SQL%FOUND)

PL/SQL --> 异常处理(Exception)

PL/SQL --> PL/SQL记录

PL/SQL --> 包的创建与管理

PL/SQL --> 包重载、初始化

PL/SQL --> DBMS_DDL包的使用

PL/SQL --> DML 触发器

PL/SQL --> INSTEAD OF 触发器

 

 

 

 

时间: 2024-10-28 20:16:30

PL/SQL --&gt; 语言基础的相关文章

PL/SQL语言基础(原创)

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

PL/SQL1——语言基础

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

Oracle PL/SQL入门慨述_oracle

正在看的ORACLE教程是:Oracle PL/SQL入门慨述.一.PL/SQL出现的目的 结构化查询语言(Structured Query Language,简称SQL)是用来访问关系型数据库一种通用语言,它属于第四代语言(4GL),其执行特点是非过程化,即不用指明执行的具体方法和途径,而是简单的调用相应语句来直接取得结果即可.显然,这种不关注任何实现细节的语言对于开发者来说有着极大的便利. 然而,对于有些复杂的业务流程又要求相应的程序来描述,那么4GL就有些无能为力了.PL/SQL的出现正是

Oracle PL/SQL入门案例实践_oracle

正在看的ORACLE教程是:Oracle PL/SQL入门案例实践. 前面已经了解了关于PL/SQL编程的基础,本文将结合一个案例来加深对这些知识点的理解. 一. 案例介绍 某数据库有两张表,是关于某公司员工资料.薪水和部门信息的,它们分别是emp表和dept表,两张表的结构如下: 要求如下: 1.按照上表结构建立相应的表,并每张表写入5组合法数据. 2.操纵相关表,使得"技术部"的员工的薪水上涨20%. 3.建立日志,追踪薪水变动情况. 4.建立测试包. 二. 案例的分析与实现 从前

[转贴]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命令

《Oracle PL/SQL程序设计(第5版)》一一2.6 在其他语言中调用PL/SQL

2.6 在其他语言中调用PL/SQL Oracle PL/SQL程序设计(第5版) 总有一天,你会在从C.Java.Perl.PHP或其他语言中调用PL/SQL.虽然这是一个很合理的需求,如果你曾经做过跨语言的开发工作,你一定熟知要把各种语言专有的数据类型糅合在一起─尤其是那些复合数据类型,比如数组.记录或者对象类型─的复杂性,更不用说不同的参数语法或者厂商对所谓"标准"应用编程接口(API)的扩展,比如微软的ODBC(Open Database Connectivity). 我会用几