`

脚本开发

阅读更多

编写自己的数据库执行代码

1.PL(procedural language)/SQL的概念——是Oracle对关系型数据库的标准语言SQL的过程化语言扩展。

    1.1:应用于服务器的数据库触发器;客户端……;浏览器的应用程序。

    1.2:PL/SQL程序的最基本组成单元是PL/SQL块;块分为匿名块和命名块【子程序(过程+函数)+包+触发器】。

             *子程序实现模块化

             *子程序实现可重用性

             *子程序易于维护

             *子程序性能更高

             *子程序的提高开发速度

    1.3:匿名块在客户端;命名块在服务器端。

    1.4:匿名块调用方便,随写随用;不能重用。

 

2.运行机制——PL/SQL引擎+SQL引擎

    2.1:PL/SQL块中的PL/SQL语句交给PL/SQL引擎处理;SQL语句交给始终在服务器端的SQL引擎处理。

    2.2:匿名块在交给引擎处理时编译,命名快在创建、变更时编译。

    2.3:编译包括——语法检查+绑定(分配内存)+伪代码生成

    2.4:伪代码——存储在数据库中;对PL/SQL引擎的指令列表;编译成功命名快PL/SQL的状态设置为valid;

 

3.特点与好处

    3.1:特点——变量定义;控制结构;数据封装;异常处理;信息隐藏;面向对象;自定义子程序。

    3.2:好处

           3.2.1:提高应用程序性能;

           3.2.2:模块化程序开发能力——面向对象;

           3.2.3:良好的兼容性;

           3.2.4:允许自定义标示符——变量定义;

           3.2.5:提供程序控制结构——控制结构

           3.2.6:异常处理

 

4.常用指令

    4.1:dbms_output.put_line()【执行部分内部】+set serveroutput on【执行部分前面】——将信息在数据库管理系统那个里以一行输出;必须将环境变量serveroutput打开。

            *put_line()——占位一行;直接输出

            *put()——不换行;输出到缓冲区,遇见put_line时输出显示。

    4.2:sqlplus username/password @server——在DOS下启动工具SQL*PLUS

    4.3:/(脚本结束);execute;call——执行脚本。

    4.4:show errors——显示错误信息(原因+位置)

    4.5:describe  表名——显示表结构信息

    4.6:&——替代变量

    4.7:sql*plus:var<—>print;procedure builder:create<—>text_to;pro*c/c++:——跨平台

 

5.PL/SQL语法

    5.1:块结构模板

          <<块名称>>——匿名块无该行

          declare——1.申明部分

          ……定义变量、常量、复杂数据类型、游标、例解……

         begin——2.执行部分(不可缺少的)

         ……SQL和PL/SQL语句……

         exception——3.异常部分

         ……处理运行错误……

         end;——块结束

   5.2:过程——修改(DDL)

             5.2.1:格式——create procedure 过程名(形参列表)

                                    is/as

                                    …PL/SQL块…

             5.2.2:形参

                            *in——只能接受外来的实参,不能在子程序内部赋值。

                            *out—— 能在子程序内部得到值,不能将值传给外部变量。

                            *in out——in和out的联姻。

                                       

             5.2.3:调用

                      5.2.3.1:PL/SQL块中——过程名(实参);

                      5.2.3.2:SQL命令中——call/execute 过程名

                                *call是执行方法所以无论有没参数都需要(),execute是命令。

                                *调用方式必须用变量来接受输出变量——变量用做实参传入子程序。

   5.3:函数——用于计算,提供返回值;可直接用于SQL语句(未修改数据的)。

            5.3.1:格式——create function 函数名(形参列表)

                                     return 返回数据类型 is 返回变量申明(变量名 数据类型);——返回子句

                                      …PL/SQL块…——函数体【必须包含return语句返回数据】 

            5.2.2:形参

                         *指定默认值的 in型 形参后不能有未指定值的in型变量。

   5.4:包——用于逻辑组合相关的过程和函数,管理过程和函数;由包规范和包体2部分组成

           5.4.1:格式

                          *包规范(申明)——create package 包名 is

                                                       …定义公用的变量、常量、过程、函数…

                                                      end;

                          *包体(实现)——createpackage body 包名 is

                                                   …过程、函数的实现…

                                                   end;

           5.4.2:调用方法——方案名.包名.子程序名

   5.5:触发器——隐式的存储过程;由触发事件(执行DDL)和触发操作组成。

          5.5.1:格式——create trigger 触发器名

                                 …触发事件=增、删、改…

                                begin

                                  …触发操作=PL/SQL块…

                                 end;

  5.6:数据类型



 

     5.6.2:数据类型=标准类型(单个值)+复合类型(多个值)+参考类型(指针)+大数据类型

     5.6.3:CLOB,NCLOB,BLOB都是内部的LOB(Large Object)类型,最长4G;LONG只能有一列的限制

5.7:常量和变量

        5.7.1:定义的格式

                  5.7.1.1:标量变量——引用名  constant(常量才有)   数据类型  not null(强制初始化)   :=/default   初始值(表达式等) 

                  5.7.1.2:复合变量——一次性将某表的一条/所有记录读到内存中。

                            5.7.1.2.1:记录——type 实例化复合类型 is record(列定义的列表);

                                                         变量名   实例化复合类型;

                                          *引用名 emp(表或视图)%rowtype——成员的个数、名称、类型需要一致。

                            5.7.1.2.2:PL/SQL表——type 实例化复合类型 is table of  ??index by binary_integer/pls_integer(索引类型); 

                                                                 引用名 实例化复合类型;

                                          *pls_integer效率更高,会溢出并报异常。

                                          *PL/SQL表——相当于map集合;小标可以为负值、没有上下限;元素个数没有限制;高效准确的取值

                            5.7.1.2.3:嵌套表和varray——create or replace type 实例化复合类型1 as object(列定义的列表)

                                                                         create or replace type 实例化复合类型 is table of 实例化复合类型1;                               

                                          *Oracle特有,不做研究;下标不能为负值。

                  5.7.1.3:参考变量——参考变量里存放的是指针;通过共享对象,降低内存占有率。

                              5.7.1.3.1:游标——  type 引用名 is REF CURSOR;

                                 *定义游标时与selecte语句绑定称为静态

                                 *打开游标时与select语句绑定称为动态——open emp_cursor for select  ename,sal from emp where deptno=10;

                               5.7.1.3.2:对象类型——create or replace type  引用类型 as object(列定义的列表);

                                                                  create table 引用名 of 引用类型;

                  5.7.1.4:

        5.7.2:引用名 emp.ename(数据库的列名)/v_sal(变量名)%type ——根据数据库的列或其他变量来确定新变量的数据类型和长度。

        5.7.3:log变量=内部(存于数据库【blog(二进制)+clog(字符)+nclog(utf-8字符)】)+外部(存于OS【bfile】)。

   5.8:词汇单元

         5.8.1:分隔符——特殊含义的字符

                    *四则运算符、关系运算符;幂操作——**

                    *属性提示符——%;字符串分隔符—— ;组件分隔符—— ;非PL/SQL变量提示符——:;项分割符—— ;变量分隔符——“;远程数据库访问——@

                    *赋值——:=  ;关联操作——->;  串连接——||;标号——《》;

 

SQL> select ename||' ia a '||job as"employee detail"from emp;

employee detail
-------------------------
SMITH ia a CLERK
ALLEN ia a SALESMAN
WARD ia a SALESMAN
JONES ia a MANAGER
MARTIN ia a SALESMAN
BLAKE ia a MANAGER

         5.8.2:标识符——每行只能定义一个标示符;只能用字母、数字、_#、$组成,字母开头;其它情况用”“包围;最长为30字符。

         5.8.3:字面量

         5.8.4:注释——单行——--……;多行/*……*/       

    5.9:控制语句

             5.9.1:顺序

                    5.9.1.1:null语句——占位,提高数据可读性。

 

             5.9.2:条件

                    5.9.2.1:if;if-else;if-elsif

 

                    5.9.2.2:case——多重分支

                                    case 选择符

                                            when 表达式 then 执行语句;

                                            ……

                                            when 表达式n then 执行语句n;

                                             else 执行语句;

                                    end case;

create table emp2
as
select empno,ename,deptno,sal,
       (case 
        when sal>2000 then '男'
        else '女'
        end) sex
from emp;

 

                    5.9.2.3:decode函数

                               *map也具有分支语句的功能。                   

 

             5.9.3:循环

                    5.9.3.1:loop——先执行,后判断。

                                      create table temp(col int);

                                      declare

                                             i int:=1;

                                      begin

                                             loop

                                                   insert into temp values(i);

                                                   exit when i=10;--循环控制

                                                   i:=i+1;--修改循环控制变量

                                             end loop;

                                     end;

                                     /

                    5.9..3.2:while——先判断后执行

                                      create table temp(col int);

                                      declare

                                             i int:=1;

                                      begin

                                            while i<=10 loop——TRUE的时候执行循环;FALSE、null跳过循环。

                                                   insert into temp values(i);

                                                   i:=i+1;--修改循环控制变量

                                             end loop;

                                     end;

                                     /

                    5.9..3.3:for

                                      create table temp(col int);

                                       begin

                                             for i in reverse start ..end loop——在数值start~end之间的时候循环;reverse表示i反序变化。

                                                    insert into temp values(i);

                                             end loop;

                                     end;

                                     /

 

 

     5.10:例外(异常)

              4.10.1:功能——控制事务;跳转;传值(利用异常传值的业务流程不同、事务回滚、)。

              4.10.2:分类

                    4.10.2.1:预编译例外(隐式)——处理常见oracle例外

               ORA-06530——ACCESS_INTO_NULL                   ORA-06592——CASE_NOT_FOUND

               ORA-06531——COLLECTION_IS_NULL               1

               ORA-06511——CURSOR_ALREADY_OPEN               ORA-01001——INVALID_CURSOR

               ORA-00001——DUP_VAL_ON_INDEX

               ORA-01722——INVALID_NUMBER

               ORA-01403——NO_DATA_FOUND               ORA-06502——VALUE_ERROR

               ORA-014722——TOO_MANY_ROWS

               PRA-01476——ZERO_DIVIDE

                    4.10.2.2:非预编译例外(隐式)——处理预编译例外不能处理的oracle错误。例如:约束错误。

                               *DECLARE

                                        e_integrity EXCEPTION;——1.申明例外

                                        PRAGMA EXCEPTION_INIT(e_integrity,错误编号);——2.关联例外和错误

                                 EXCEPTION

                                        WHEN e_integrity THEN——3.引用

                                        dbms_output.put_line('该雇员不存在');

                                *错误编号范围——不小于-1000000的非-1403负数;0;100

                    4.10.2.3:自定义例外(显式)——处理非oracle错误

                               *DECLARE

                                         e_no_employee EXCEPTION;——1.申明例外

                                 BEGIN

                                        IF SQL%NOTFOUND THEN

                                                RAISE e_no_employee;——2.显示触发例外

                                        END IF;

                                 EXCEPTION

                                        WHEN e_no_employee THEN——3.引用

                                        dbms_output.put_line('该雇员不存在');

              4.10.3:处理方式

                    4.10.3.1:抛出:传递例外(中止)——将例外传给调用环境

                    4.10.3.2:(终止)捕获并处理——exception

                                                                       when 例外的编码常量 then

                                                                        需要执行的语句;

                                                                        ……

                                                                        when others then——捕获未预计到的所有异常

                                                                        需要执行的语句;

              4.10.4:例外函数

                     4.10.1:RAISE_APPLICATION_ERROR(错误编码,错误信息,Boolean)——在(函数、包、过程、触发器)数据库端子程序中自定义错误号和错误信息。

                                   *错误编号——在-20000~-20999

                                   *错误信息——最多2048字节

                                   *Boolean——TRUE则追加,FALSE则覆盖默认。



 

                     4.10.2:SQLCODE——获得oracle错误的编号

 

                     4.10.3:SQLERRM——获得oracle错误的信息

 

declare 
begin
DBMS_OUTPUT.PUT_LINE( sqlerrm(-1438));
end; 

 

 

6.编程规范

    6.1:标示符

            *变量:v_为前缀;常量:c_为前缀;游标:_cursor为后缀;例外:e_为前缀;

            *复合变量:_复合变量类型为后缀;复合变量类型:_复合变量类型_type为后缀;

            *

            *

 

    6.2:大小写

          *大写——SQL、PL/SQL关键字、数据类型

          *小写——标示符,参数,数据库对象

  

 

    6.3:代码缩进——阶梯

    6.4:注释

          

  • 大小: 22.7 KB
  • 大小: 14.6 KB
  • 大小: 24.3 KB
  • 大小: 70.9 KB
  • 大小: 68.5 KB
  • 大小: 62.8 KB
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    ANSYS workbench脚本开发指南

    "ANSYS Workbench 脚本开发指南" 本指南旨在为用户提供 ANSYS Workbench 脚本开发的详细指南。该指南涵盖了脚本的概述、ANSYS Workbench 项目和数据模型概念、在 ANSYS Workbench 中使用脚本、已知的问题和限制等...

    Illustrator CC 2017脚本开发指南.rar

    《Illustrator CC 2017脚本开发指南》是一份深入探讨Adobe Illustrator CC 2017中脚本开发的资源,适用于那些希望通过编程自动化Illustrator任务的设计师和开发者。该指南涵盖了从基础到高级的各类脚本开发技术,...

    SCDM脚本开发入门教程

    总结来说,SCDM脚本开发是利用Python语言对3D模型进行自动化处理的有效工具,它能帮助用户提高建模效率,简化复杂的几何操作。通过学习和实践SCDM脚本,工程师可以更高效地完成仿真分析前处理工作。

    3DMax脚本开发入门

    3DMax脚本开发是3D建模与动画制作领域中的一个重要组成部分,它允许用户通过编程方式自动化和扩展3DMax的功能。对于初学者来说,3DMax脚本开发可能显得有些复杂,但通过逐步学习,可以极大地提高工作效率并实现个性...

    VBS脚本开发工具

    VBS脚本开发工具是专为编写、调试和优化VBS脚本而设计的软件或平台,它们通常提供代码编辑器、调试器和语法高亮等特性,以提高开发效率和代码质量。 在提供的文件列表中,我们看到几个关键资源: 1. "Microsoft ...

    MCGS脚本开发驱动 视频教程

    《MCGS脚本开发驱动 视频教程》是一份专为学习MCGS嵌入式组态软件脚本开发驱动技术的宝贵资源。MCGS(Monitor & Control for General System)是一款广泛应用在工业自动化领域的可视化组态软件,它允许用户通过图形...

    TC脚本开发工具 v6.1.zip

    今天小编要给大家介绍一款专业好用的脚本开发软件——TC脚本开发工具。TC脚本开发工具软件支持中文编程和英文编程,采用多线程的图形界面脚本制作开发,易学,易懂,易写.并且配套有TC教程视频和帮助文档,不需要任何...

    手机app性能测试脚本开发简介

    手机应用程序性能测试脚本开发简介 手机应用程序性能测试脚本开发是指使用性能测试工具来模拟大量用户同时使用应用程序,从而测试应用程序的性能和稳定性。在这里,我们将介绍使用 LoadRunner 11.0 来开发手机应用...

    loadrunner基于ajax脚本开发案例视频专讲解

    总的来说,"loadrunner基于ajax脚本开发案例视频专讲解" 提供了一个学习LoadRunner与Ajax脚本开发的实践机会,涵盖了从基础概念到实际操作的全过程。通过对视频内容的学习,测试工程师能够更好地应对现代Web应用的...

    传奇多功能脚本编辑器_编辑器_firmwkb_传奇脚本_传奇脚本开发_传奇功能脚本_

    "传奇多功能脚本编辑器"就是这样一款专为传奇脚本开发而设计的强大工具,它不仅简化了开发流程,提升了工作效率,更是成为了制作传奇版本的利器。 首先,我们要理解"firmwkb"在标签中的含义,这可能是编辑器名称的...

    Windows Script Host 2脚本开发人员指南PDF+源码

    鉴于Microsoft Windows脚本宿主2.0开发人员指南教你,你需要知道什么开始,与Microsoft Windows脚本宿主2.0高级开发与WSH的脚本会为您提供的信息,你需要成为一个专家WSH程序员。您将学到的专业开发人员使用,以帮助...

    Delphi 脚本开发框架

    Delphi脚本开发框架则是利用Delphi的强大功能,为开发者提供了一种能够轻松实现脚本化编程和界面自定义的解决方案。 Delphi脚本开发框架允许开发人员在应用程序中嵌入脚本引擎,使得用户可以编写和执行脚本来扩展或...

    JSI, java脚本开发工具

    JSI框架提供一个无侵入的脚本库管理解决方案,和一个全面的前端开发调试、文档解析、模版编译、打包导出环境支持。 作为一个开发期间的脚本管理工具,让开发者在开发期间享受JSI带来的种种便捷,也可以作为一个运行...

    cocosCreator脚本开发手册

    标题“cocosCreator脚本开发手册”表明这份文档是一份专注于Cocos Creator引擎的脚本开发指南。Cocos Creator是一款强大的游戏开发框架,由Cocos2d-x团队推出,它使用JavaScript作为脚本语言,提供了一套完整的编辑...

    cocos creator脚本开发

    cocos creator脚本开发详解 在本节中,我们将深入探讨cocos creator游戏开发中的脚本开发,涵盖从JavaScript基础到组件脚本的创建和使用。通过本节的学习,读者将掌握cocos creator游戏开发的脚本开发基础知识。 ...

    wincc-全套脚本总结.rar_planeyen_wincc C脚本_wincc下载_wincc脚本_wincc脚本开发

    《全面解析WinCC C脚本开发与应用》 在工业自动化领域,SIMATIC WinCC作为西门子的一款强大人机界面(HMI)软件,广泛应用于监控和数据采集系统。WinCC不仅提供图形化界面设计,还支持强大的脚本语言功能,其中C...

    QlikView脚本开发

    QlikView脚本开发是实现其数据建模和数据加载的关键技术。QlikView脚本是一种专门用于数据准备的脚本语言,可以自动化数据的导入和处理流程。接下来,让我们深入探讨QlikView脚本开发的关键知识点。 首先,QlikView...

    脚本开发助手-叉叉集成开发环境2.0.1.7&叉叉开发助手

    "脚本开发助手-叉叉集成开发环境2.0.1.7&叉叉开发助手" 是一个专门针对脚本开发的工具集,主要应用于lua脚本语言的编写和调试。这个工具集包括了叉叉集成开发环境(CCJCKFIJ)的2.0.1.7版本和叉叉开发助手,旨在为...

    delphi脚本开发框架

    Delphi脚本开发框架是一种基于Delphi编程环境的高级开发工具,它允许开发者在应用程序中集成自定义的脚本语言,以实现动态行为和逻辑控制。这个框架将Delphi的强类型编译器特性和脚本语言的灵活性相结合,极大地提高...

    BAT批处理脚本开发工具

    BAT批处理脚本开发工具是针对Windows操作系统中的批处理(Batch)编程环境设计的一款实用工具。批处理脚本,也称为批处理文件,是通过一系列命令行指令预先编写并存储的文本文件,用于自动化执行重复性的系统任务。...

Global site tag (gtag.js) - Google Analytics