PL/SQL1——语言基础

简介: 原文转自  一沙弥的世界  的博客 PL/SQL是过程化的SQL语言,是ORACLE对SQL语言的扩展,在普通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;

              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.

 

相关文章
|
4月前
|
SQL 关系型数据库 MySQL
在MySQL中,什么是结构化查询语言 (SQL)
【8月更文挑战第20天】在MySQL中,什么是结构化查询语言 (SQL)
73 1
|
5月前
|
SQL 存储 关系型数据库
SQL语言优缺点有哪些?
SQL(Structured Query Language)语言作为数据库管理和操作的标准语言,具有一系列的优点,同时也存在一些缺点。
106 7
|
1月前
|
SQL 数据采集 监控
局域网监控电脑屏幕软件:PL/SQL 实现的数据库关联监控
在当今网络环境中,基于PL/SQL的局域网监控系统对于企业和机构的信息安全至关重要。该系统包括屏幕数据采集、数据处理与分析、数据库关联与存储三个核心模块,能够提供全面而准确的监控信息,帮助管理者有效监督局域网内的电脑使用情况。
24 2
|
2月前
|
SQL Oracle 关系型数据库
SQL语言的主要标准及其应用技巧
SQL(Structured Query Language)是数据库领域的标准语言,广泛应用于各种数据库管理系统(DBMS)中,如MySQL、Oracle、SQL Server等
|
2月前
|
SQL 关系型数据库 MySQL
Go语言项目高效对接SQL数据库:实践技巧与方法
在Go语言项目中,与SQL数据库进行对接是一项基础且重要的任务
89 11
|
4月前
|
SQL 关系型数据库 MySQL
|
4月前
|
SQL Oracle 关系型数据库
SQL与PL/SQL:数据库编程语言的比较
【8月更文挑战第31天】
85 0
|
4月前
|
SQL 存储 大数据
SQL 语言发展史简直太震撼啦!从诞生到现代数据处理,见证一场奇妙的演变之旅,快来感受!
【8月更文挑战第31天】SQL(结构化查询语言)自20世纪70年代由IBM研究员E.F. Codd提出以来,已成为现代数据处理不可或缺的一部分。它最初简化了层次和网状模型中复杂的存储与检索问题,通过基本的SELECT、FROM和WHERE关键字实现了数据查询。80年代,SQL在商业数据库中广泛应用,引入了GROUP BY、HAVING和ORDER BY等功能,增强了数据分析能力。90年代,互联网和企业信息化推动了SQL的进一步优化与扩展,支持分布式数据库和数据仓库等技术。
64 0
|
4月前
|
SQL 存储 NoSQL
从SQL到NoSQL:理解不同数据库类型的选择与应用——深入比较数据模型、扩展性、查询语言、一致性和适用场景,为数据存储提供全面决策指南
【8月更文挑战第31天】在信息技术飞速发展的今天,数据库的选择至关重要。传统的SQL数据库因其稳定的事务性和强大的查询能力被广泛应用,而NoSQL数据库则凭借其灵活性和水平扩展性受到关注。本文对比了两种数据库类型的特点,帮助开发者根据应用场景做出合理选择。SQL数据库遵循关系模型,适合处理结构化数据和复杂查询;NoSQL数据库支持多种数据模型,适用于非结构化或半结构化数据。SQL数据库在一致性方面表现优异,但扩展性较差;NoSQL数据库则设计之初便考虑了水平扩展性。SQL使用成熟的SQL语言,NoSQL的查询语言更为灵活。
97 0
|
4月前
|
SQL 数据可视化 数据挖掘
SQL 在数据分析中简直太牛啦!从数据提取到可视化,带你领略强大数据库语言的神奇魅力!
【8月更文挑战第31天】在数据驱动时代,SQL(Structured Query Language)作为强大的数据库查询语言,在数据分析中扮演着关键角色。它不仅能够高效准确地提取所需数据,还能通过丰富的函数和操作符对数据进行清洗与转换,确保其适用于进一步分析。借助 SQL 的聚合、分组及排序功能,用户可以从多角度深入分析数据,为企业决策提供有力支持。尽管 SQL 本身不支持数据可视化,但其查询结果可轻松导出至 Excel、Python、R 等工具中进行可视化处理,帮助用户更直观地理解数据。掌握 SQL 可显著提升数据分析效率,助力挖掘数据价值。
91 0
下一篇
DataWorks