PL/SQL1——语言基础

原文转自  一沙弥的世界  的博客

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;

              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.

 

时间: 2024-09-20 14:39:02

PL/SQL1——语言基础的相关文章

[转贴]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的优点以及其独

PL/SQL语言基础(原创)

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

PL/SQL --&amp;gt; 语言基础

--===================== -- PL/SQL --> 语言基础 --=====================       PL/SQL是过程化的SQL语言,是ORACLE对SQL语言的扩展,在普通SQL语句的基础上增加了编程语言的特点.使得该语言不仅具有过程编程语 言的特征,如循环.条件分支等.同时也具有对象编程语言的特征,如重载.继承等.     一.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命令

c语言基础-C语言基础中的语法问题

问题描述 C语言基础中的语法问题 下面是我写的代码,是一个加密的过程,运行了几遍都有语法错误,请高手在空闲之余能帮我看下是哪里错了,万分感谢 #include<stdio.h>#include<string.h>void main(){void m(*int); char a[50]*p; int l; scanf(""%s""a); l=strlen(a); p=a; m(pl); printf(""%s"&q

【软考教程】程序设计语言基础

继续软考教程的学习,在第1章,我们主要是对计算机的组成和工作原理做了一定了解,可以说,在他的带领下,我们对计算机硬件方面的知识,有了更加坚实的基础. 第2章,程序设计语言基础知识.不看内容,光从标题来看,并不会觉得陌生."程序设计语言",至今,我们已经接触过不止一种了,从最初的VB.到后来的VB.NET.C#.C++,软考前个阶段,我们还见到了早有耳闻的Java世界. 那么,下面就跟随着"设计语言"的脚步,一起发现编程路上美丽的风光吧. 想要对程序设计语言有个宏观上

HTML进阶应用技巧(一)HTML语言基础

技巧 一.为什么要学习HTML? 近两年来,许多公司开发出了图形化的HTML开发工具,使得网页的制作变得非常简单.如微软公司推出的 Microsoft FrontPage, Adobe公司推出的 Adobe Pagemill, Micromedia公司推出的Dreamweaver等编辑工具,都被称为"所见即所得"的网页制作工具.这些图形化的开发工具可以直接处理网页,而不用书写费劲的标记.这使得用户在没有HTML语言基础的情况下,照样可以编写网页.这时,编写HTML文档的任务由开发工具替