精华内容
下载资源
问答
  • 程序分析技术;一程序分析的任务;二程序分析技术的应用;程序验证与测试 程序优化 重构 自动并行化 ;三程序设计语言的发展;三程序设计语言的发展 机器语言;三程序设计语言的发展 汇编语言;...三程序设计语言的发展 第四代
  • 概念介绍 ... 第四代增强其实是第三代上的加强,都属于面向对象语言的接口技术的应用,但第四代增强使SAP增强实施更具灵活性,四代增强可以直接在源代码里面写增强了代码了,输入参数也不像 二代...

    概念介绍
    SAP第四代增强- Enhancement-Point,分为2种显式增强和隐式增强,显式增强就是手动加入到程序中的Enhancement options,隐式增强就是系统内置的Enhancement options。 第四代增强其实是第三代上的加强,都属于面向对象语言的接口技术的应用,但第四代增强使SAP增强实施更具灵活性,四代增强可以直接在源代码里面写增强了代码了,输入参数也不像 二代,三代那样被限制,可以自己定义。所以实际业务中很多二代三代增强无法实现需求可以用四代增强实现。阅读SAP各事务码的源代码,可以发现这类增强已大量分布在SAP 源程序的各个地方。使用面向对象技术来设计架构程序的增强,使SAP增强变得更加灵活,能够更加适应不同的业态和行业的定制化需求,我想这也是SAP在ERP领域为何能成为世界排名第一原因之一。

    在SAP源代码中语法形式如下:
    显式增强:
    在这里插入图片描述

    隐式增强:
    在这里插入图片描述
    以MIGO事务码为例,查看MIGO源代码,就会发现源代码里面有很多上面那样语法形式语句存在

    进入源代码查询界面后,点击如下 显示隐式增强

    在这里插入图片描述
    如下就是 SAP源代码中部分的的显式增强和隐式增强增强点

    在这里插入图片描述
    四代增强虽然比较灵活,但难点在于需要直接阅读源代码,才能找到对应的Enhancement-Point,才能去写增强代码实现对应功能。

    概念介绍完,对刚接触这类增强的初学者来说,应该还是云里雾里,我刚开始学这时就感觉这样,当然一些技术大牛除外.

    下面就通过一个案例程序介绍一下四代增强是如何编写和实施的

    1 .通过se38 写一个简单 ZIM_4G_ENHACE程序来说明

    代码如下:

    REPORT ZIM_4G_ENHACE.
    
    PARAMETERS weekday TYPE s_weekday_00.
    
    
    START-OF-SELECTION.
    
      CASE weekday.
        WHEN '1'.
          WRITE 'Monday'.
          EXIT.
        WHEN '2'.
          WRITE 'Tuesday'.
          EXIT.
        WHEN '3'.
          WRITE 'Wednesday'.
          EXIT.
        WHEN '4'.
          WRITE 'Thursday'.
          EXIT.
        WHEN '5'.
          WRITE 'Friday'.
          EXIT.
      ENDCASE.
    

    现在需要在如下位置建立四代增强点
    在这里插入图片描述
    操作步骤如下
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    保存后,看源程序如下:
    在这里插入图片描述
    保存激活后,完成在源程序中增加了一个4代显式增强点.
    上面步骤只是在程序中建立了一个增强点,并没有执行什么动作,就相当于建立一个容器。如果需要实施增强,还需要进行实例化,下面会介绍如何进行实例化实施增强的步骤。
    上面增强点是ENHANCEMENT-POINT 开头, 另外我们在读源程序时候发现有 ENHANCEMENT-SECTION 开头增强点,这两者是有差别的 ENHANCEMENT-SECTION 后面会有代码,如果没有去实施它时,标准程序会执行 ENHANCEMENT-SECTION 后面会有代码,但如果去实施增强,实例化这个增强,则增强代码会取代原 ENHANCEMENT-SECTION 后面会有代码,原来代码就不执行了。
    比如如下在 ZIM_4G_ENHACE程序中增加 ENHANCEMENT-SECTION, ENHANCEMENT-SECTION后面会有代码:MESSAGE ‘Invalid weekday input’ TYPE ‘I’. (增加ENHANCEMENT-SECTION增强点步骤略和上面类似),如果不实施ENHANCEMENT-SECTION 增强,则执行MESSAGE ‘Invalid weekday input’ TYPE ‘I’. 这个语句,如果实施了增强,则增强代码就会取代它(下面将详细介绍)

    按ENHANCEMENT-POINT 增强点建立步骤,建立如下 ENHANCEMENT-SECTION 增强点
    在这里插入图片描述
    以上步骤已在程序ZIM_4G_ENHACE中建立了ENHANCEMENT-POINT 和 ENHANCEMENT-SECTION 语法开头的增强点。

    下面要介绍如何去实施增强,也就实例化它们.

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    执行程序ZIM_4G_ENHACE效果如下:

    在这里插入图片描述
    看下面执行效果
    ENHANCEMENT-SECTION 增强点,目前并未实例化,也就是没有实施增强,但仍执行ENHANCEMENT-SECTION 和
    END-ENHANCEMENT-SECTION 之间的代码,等下如果去实施它,则这个代码就不会再执行,被增强实施部分代码取代.
    在这里插入图片描述
    继续,出现如下界面

    是执行了 ENHANCEMENT-POINT 增强点进行增强实施,即实例化的程序代码.
    在这里插入图片描述

    下面在再对ENHANCEMENT-SECTION 增强点进行增强实施,即实例化,看看效果

    实例化步骤和ENHANCEMENT-POINT一样,所以步骤省略。
    ENHANCEMENT-SECTION 增强实施代码如下红色框:
    在这里插入图片描述

    激活后执行程序ZIM_4G_ENHACE效果如下:

    在这里插入图片描述
    点执行弹出如下界面,已取代原来的代码,原来代码不在执行。
    在这里插入图片描述
    在这里插入图片描述
    最后总结下ENHANCEMENT-SECTION和NHANCEMENT-POINT 区别

    1. ENHANCEMENT-SECTION和ENHANCEMENT-POINT 定义和实现的方法与一样。
    2. ENHANCEMENT-POINT没有代码,只有一个预留点,当实例化它时允许在这个位置插入增强代码。
    3. ENHANCEMENT-SECTION和END-ENHANCEMENT-SECTION之间有代码,当实例化之后,替换旧代码,只执行新代码,原来的代码不再执行。

    隐式增强的实例演示说明可见我另外一篇博文
    https://blog.csdn.net/weixin_40672823/article/details/106055695

    展开全文
  • 关于SQL语言分类

    2020-09-01 20:05:20
    SQL语言属于第四代编程语言,主要用来操作关系型数据库一门语言语言代数: 第⼀代语言:机器语言面向机器。 是通过二进制代码对及其进行操作。 第⼆代语言: 汇编语言用针对指令符号代替⼆进制代码。 第...

    SQL语言分类

    介绍

    • SQL语言是属于第四代编程语言,主要用来操作关系型数据库的一门语言。

    语言代数:

    第⼀代语言:机器语言面向机器。 是通过二进制代码对及其进行操作。
    第⼆代语言: 汇编语言用针对指令的符号代替⼆进制代码。
    第三代语言: 高级开发语言C、C++ Java 语言更加简单,操作更⽅便
    第四代语言SQL 只需要告诉计算机需要做什么, 而如何做,不需要告诉计算机。更加接近自然语言

    之所以出现这么多代语言,⼀个是实际开发的需要,另⼀个是程序员的技术越来越cai,导致需要更高级的语言。

    SQL语言分类

    DQL (Data Query Language)

    • 数据查询语言,用于检索数据库中的数据,主要是 SELECT 语句,它在操作数据库时较为频繁

    DML (Data Manipulation Language)

    • 数据操纵语言 用于改变数据库中的数据,主要包括 INSERT , UPDATE , DELETE 3条语句

    DDL(Data Define Langage)

    • 数据定义语言,用来建立、修改、删除数据库对象

    TCL (Transaction Control Language)

    • 事务控制语言 用于维护数据的⼀致性,包括 COMMIT , ROLLBACK , SAVEPOINT 3条语句

    DCL(Data Control Language)

    • 用于执行权限授予和权限收回操作,主要包括 GRANT , REVOKE 两条命令
    展开全文
  • IDL语言的几个要点回顾

    千次阅读 2017-12-10 06:20:47
    最近因为一个简单任务,重新使用了IDL这门在读研究生期间使用得...IDL属于第四代科学计算可视化语言,集开放性、高维分析能力、科学计算能力、实用性和可视化分析为一体,可在多种硬件平台上运行,方便地与C、C++连接

    最近因为一个简单任务,重新使用了IDL这门在读研究生期间使用得比较多的语言,很久不用,对其中的一些语法规则和特性略显陌生,现将一些关键要点总结如下。

    IDL是一种数据分析和图像化应用程序及编程语言,先由美国ITT公司所有,后由美国ExelisVis公司所有。IDL属于第四代科学计算可视化语言,集开放性、高维分析能力、科学计算能力、实用性和可视化分析为一体,可在多种硬件平台上运行,方便地与C、C++连接,还支持数据库的ODBC接口标准。IDL语言内置的数学库函数可以大大地减少图象处理算法开发的工作量,用IDL语言写的程序可以不加修改地在其他运行了IDL平台上运行,具有很强的平台间可移植性。由于IDL语言是解释性语言,其运行速度受到影响,对于速度要求较高的功能可以直接用标准C语言编写,利用IDL与C的接口在IDL语言中调用C模块实现高速度。

    使用IDL目前业界已经开发出了ENVI、IMAGIS、RiverTools、医学等成熟产品。

    语法规则

    IDL语法规则

    过程与函数

    用关键字pro/function表示,与其它语言的区别是一样的,pro没有返回值,function有返回值,不过要得到过程计算返回结果,通过其它手段也可以实现,如使用关键字或者指针参数传递。

    Procedures
    IDL procedures use the following general syntax:
    PROCEDURE_NAME, Argument [, Optional_Argument]
    where PROCEDURE_NAME is the name of the procedure, Argument is a required parameter, and Optional_Argument is an optional parameter to the procedure.

    Functions
    IDL functions use the following general syntax:
    Result = FUNCTION_NAME( Argument [, Optional_Argument] )
    where Result is the returned value of the function, FUNCTION_NAME is the name of the function, Argument is a required parameter, and Optional_Argument is an optional parameter. Note that all arguments and keyword arguments to functions should be supplied within the parentheses that follow the function’s name.
    Functions do not always have to be used in assignment statements (i.e., A=SIN(10.2)), they can be used just like any other IDL expression. For example, you could print the result of SIN(10.2) by entering the command:
    PRINT, SIN(10.2)

    参数传递方法

    1.参数

    参数主要用于程序之间相互调用过程中值的传递。
    pr/function 过程名/函数名 参数1,参数2…….

    参数使用过程中要注意顺序,参数传递可以是值或者地址。
    Note that these arguments are positional parameters that must be supplied in the order indicated by the routine’s syntax.
    Named Variables

    Often, arguments that contain values upon return from the function or procedure (“output arguments”) are described as accepting “named variables”. A named variable is simply a valid IDL variable name. This variable does not need to be defined before being used as an output argument. Note, however that when an argument calls for a named variable, only a named variable can be used—sending an expression causes an error.

    2.关键字

    关键字是另一种在不同程序之间传递数据的方式。
    pro/function 过程名/函数名 关键字1=关键字变量1,…….

    等号左边是关键字,仅仅是一个标识作用,右边是关键字变量才是过程/函数运行时真正使用的变量。

    关键字没有顺序限制,可以调换顺序,参数的顺序不能调换。

    布尔型关键字。只能有1和0两个不同的值。

    有些关键字是只能用其中的几个关键选项,如PLOT, [X,] Y [, /DATA | , /DEVICE | , /NORMAL] ,只能用DATA,DEVICE,NORMAL中的三个之一的参数。如:PLOT, SIN(A), /DEVICE

    关键字也能作为输出参数,此时不需要提前定义。如: WIDGET_CONTROL, mywidget, GET_UVALUE = userval ; userval并不需要提前定义。

    3.参数值传递和地址传递

    函数间传递参数的方式与C++的传递方法类似,可以用值传递和指针传递两种,分别对应内存空间的中栈空间,堆空间。值传递传递的是数据的拷贝,在函数中对其修改不会影响到调用函数中;而指针传递的数据的地址,函数中对数据的修改会影响到调用函数中。关于指针的使用原则与C++的一些原则是类似的,比如谁分配空间谁就负责释放空间;要注意防止内存泄露。

    ;分配一个堆变量指针
    C = PTR_NEW(2.0d)
    ;释放一个指针
    PTR_FREE, A

    A = PTR_NEW(FINDGEN(10))
    B = A
    HELP, A, B
    PRINT, *B

    ;给堆变量指针数组赋值,ptarr实际上是一个指针数组
    ptarr = PTRARR(3, /ALLOCATE_HEAP)
    FOR I = 0,2 DO *ptarr[I] = I
    PRINT, ptarr ;
    print,*ptarr[3] ;输出 2

    关于IDL中堆变量官方文档叙述如下:
    Heap variables are a special class of IDL variables that have global scope and explicit user control over their lifetime. They can be basic IDL variables, accessible via pointers, or objects, accessible via object references.

    IDL documentation of pointers and objects, heap variables accessible via pointers are called pointer heap variables, and heap variables accessible via object references are called object heap variables.

    Pointers and object references have many similarities, the strongest of which is that both point at heap variables. It is important to understand that they are not the same type, and cannot be used interchangeably. Pointers and object references are used to solve different sorts of problems. Pointers are useful for building dynamic data structures, and for passing large data around using a lightweight token (the pointer itself) instead of copying data. Objects are used to apply object oriented design techniques and organization to a system. It is, of course, often useful to use both in a given program.

    Heap variables are global in scope, but do not suffer from the limitations of COMMON blocks. That is, heap variables are available to all program units at all times. (Remember, however, that IDL variables containing pointers to heap variables are not global in scope and must be declared in a COMMON block if you want to share them between program units.)

    进度条的使用

    在envi的进度条函数使用过程中,注意三个函数的执行顺序,其中ENVI_REPORT_INIT必须放在循环外面,ENVI_REPORT_INC相当于C#中的Application.DoEvent,执行一次刷新一次界面,如果在多重for循环中如果不执行,可能会造成“假死”的现象,ENVI_REPORT_STAT用于设置实际的进度,放在相应的更新进度的位置即可。
    ENVI_REPORT_INIT
    ENVI_REPORT_INC
    ENVI_REPORT_STAT

    prog = specNums*ns*nl
    envi_report_init, rstr, title='光谱匹配分类', base=base,/INTERRUPT
    for i=0L, nl-1, 1L do begin
        envi_report_inc, base, prog
        for j=0L, ns-1, 1L do begin
    
            for k=0L, specNums-1, 1L do begin ;波普库中共有谱线数目
                envi_report_stat,base, statusN++, prog,, CANCEL=cancelvar
            endfor
        endfor
    endfor
    envi_report_init, base=base, /finish
    
    ;判断是否点击取消
    IF cancelVar EQ 1 THEN BEGIN
        tmp = DIALOG_MESSAGE('点击了取消'+STRING(i)+'%',/info)
        ENVI_REPORT_INIT, base=base, /finish
        BREAK
    ENDIF
    

    IDL中分块读取数据

    ENVI_GET_DATA是一次读取所有的数据,当图像很大的时候而内存不够的时候,这种方法可能会影响到效率。此时可以利用分块读取的方法,每次读取一块数据进行处理,此时就需要用到ENVI_GET_TILE、ENVI_INIT_TILE、ENVI_TILE_DONE三个函数进行处理。

    展开全文
  • PLSQL语言基础

    2013-04-03 07:36:48
    结构化查询语言(Structured Query Language,简称SQL)是用来访问关系型数据库一种通用语言,属于第四代语言(4GL),其执行特点是非过程化,即不用指明执行具体方法和途径,而是简单地调用相应语句来直接取得...

    PL/SQL基础

    结构化查询语言(Structured Query Language,简称SQL)是用来访问关系型数据库一种通用语言,属于第四代语言(4GL),其执行特点是非过程化,即不用指明执行的具体方法和途径,而是简单地调用相应语句来直接取得结果即可。显然,这种不关注任何实现细节的语言对于开发者来说有着极大的便利。然而,有些复杂的业务流程要求相应的程序来描述,这种情况下4GL就有些无能为力了。PL/SQL的出现正是为了解决这一问题,PL/SQL是一种过程化语言,属于第三代语言,它与CC++Java等语言一样关注于处理细节,可以用来实现比较复杂的业务逻辑。

    从版本6开始PL/SQL就被可靠的整合到ORACLE中了,一旦掌握PL/SQL的优点以及其独有的数据管理的便利性,那么你很难想象ORACLE缺了PL/SQL的情形。PL/SQL 不是一个独立的产品,他是一个整合到ORACLE服务器和ORACLE工具中的技术,可以把PL/SQL看作ORACLE服务器内的一个引擎,sql语句执行者处理单个的sql语句,PL/SQL引擎处理PL/SQL程序块。当PL/SQL程序块在PL/SQL引擎处理时,ORACLE服务器中的SQL语句执行器处理pl/sql程序块中的SQL语句。

    PL/SQL的优点如下:

    1. PL/SQL是一种高性能的基于事务处理的语言,能运行在任何ORACLE环境中,支持所有数据处理命令。通过使用PL/SQL程序单元处理SQL的数据定义和数据控制元素。

    2. PL/SQL支持所有SQL数据类型和所有SQL函数,同时支持所有ORACLE对象类型

    3. PL/SQL块可以被命名和存储在ORACLE服务器中,同时也能被其他的PL/SQL程序或SQL命令调用,任何客户/服务器工具都能访问PL/SQL程序,具有很好的可重用性。

    4. 可以使用ORACLE数据工具管理存储在服务器中的PL/SQL程序的安全性。可以授权或撤销数据库其他用户访问PL/SQL程序的能力。

    5. PL/SQL代码可以使用任何ASCII文本编辑器编写,所以对任何ORACLE能够运行的操作系统都是非常便利的。

    6. 对于SQLORACLE必须在同一时间处理每一条SQL语句,在网络环境下这就意味作每一个独立的调用都必须被oracle服务器处理,这就占用大量的服务器时间,同时导致网络拥挤。而PL/SQL是以整个语句块发给服务器,这就降低了网络拥挤。

    PL/SQL块结构

      PL/SQL是一种块结构的语言,组成PL/SQL程序的单元是逻辑块,一个PL/SQL 程序包含了一个或多个逻辑块,每个块都可以划分为三个部分。与其他语言相同,变量在使用之前必须声明,PL/SQL提供了独立的专门用于处理异常的部分,下面描述了PL/SQL块的不同部分:

    声明部分(Declaration section)

    声明部分包含了变量和常量的数据类型和初始值。这个部分是由关键字DECLARE开始,如果不需要声明变量或常量,那么可以忽略这一部分;需要说明的是游标的声明也在这一部分。

    执行部分(Executable section)

    执行部分是PL/SQL块中的指令部分,由关键字BEGIN开始,所有的可执行语句都放在这一部分,其他的PL/SQL块也可以放在这一部分。

    异常处理部分(Exception section)

    这一部分是可选的,在这一部分中处理异常或错误,对异常处理的详细讨论我们在后面进行。

    PL/SQL块语法

    [DECLARE]
    ---declaration statements
    BEGIN
    ---executable statements
    [EXCEPTION]
    ---exception statements
    END

    PL/SQL块中的每一条语句都必须以分号结束,SQL语句可以使多行的,但分号表示该语句的结束。一行中可以有多条SQL语句,他们之间以分号分隔。每一个PL/SQL块由BEGINDECLARE开始,以END结束。注释由--标示。

    PL/SQL块的命名和匿名

    PL/SQL程序块可以是一个命名的程序块也可以是一个匿名程序块。匿名程序块可以用在服务器端也可以用在客户端。

    命名程序块可以出现在其他PL/SQL程序块的声明部分,这方面比较明显的是子程序,子程序可以在执行部分引用,也可以在异常处理部分引用。

    PL/SQL程序块可被独立编译并存储在数据库中,任何与数据库相连接的应用程序都可以访问这些存储的PL/SQL程序块。ORACLE提供了四种类型的可存储的程序:

       函数

       过程

       

       触发器

    函数

      函数是命名了的、存储在数据库中的PL/SQL程序块。函数接受零个或多个输入参数,有一个返回值,返回值的数据类型在创建函数时定义。定义函数的语法如下:

    FUNCTION name [{parameter[,parameter,...])] RETURN datatypes IS
    [local declarations]

    BEGIN

    execute statements

    [EXCEPTION

    exception handlers]

    END [name]

    过程

      存储过程是一个PL/SQL程序块,接受零个或多个参数作为输入(INPUT)或输出(OUTPUT)、或既作输入又作输出(INOUT),与函数不同,存储过程没有返回值,存储过程不能由SQL语句直接使用,只能通过EXECUT命令或PL/SQL程序块内部调用,定义存储过程的语法如下:

    PROCEDURE name [(parameter[,parameter,...])] IS

    [local declarations]

    BEGIN

    execute statements

    [EXCEPTION

    exception handlers ]

    END [name]

    (package)

      包其实就是被组合在一起的相关对象的集合,当包中任何函数或存储过程被调用,包就被加载入内存中,包中的任何函数或存储过程的子程序访问速度将大大加快。
    包由两个部分组成:规范和包主体(body),规范描述变量、常量、游标、和子程序,包体完全定义子程序和游标。

    触发器(trigger)

      触发器与一个表或数据库事件联系在一起的,当一个触发器事件发生时,定义在表上的触发器被触发。

    变量和常量

    变量存放在内存中以获得值,能被PL/SQL块引用。你可以把变量想象成一个可储藏东西的容器,容器内的东西是可以改变的。

    声明变量

    变量一般都在PL/SQL块的声明部分声明,PL/SQL是一种强壮的类型语言,这就是说在引用变量前必须首先声明,要在执行或异常处理部分使用变量,那么变量必须首先在声明部分进行声明。

      声明变量的语法如下:

    Variable_name [CONSTANT] databyte [NOT NULL][:=|DEFAULT expression]

    注意:可以在声明变量的同时给变量强制性的加上NOT NULL约束条件,此时变量在初始化时必须赋值。

    给变量赋值

    给变量赋值有两种方式:

    . 直接给变量赋值

       X:=200;

       Y=Y+(X*20);

    通过SQL SELECT INTO FETCH INTO给变量赋值

    SELECT SUM(SALARY),SUM(SALARY*0.1)

    INTO TOTAL_SALARY,TATAL_COMMISSION

    FROM EMPLOYEE

    WHERE DEPT=10;


      常量

    常量与变量相似,但常量的值在程序内部不能改变,常量的值在定义时赋予,,他的声明方式与变量相似,但必须包括关键字CONSTANT。常量和变量都可被定义为SQL和用户定义的数据类型。

    ZERO_VALUE CONSTANT NUMBER:=0;

    这个语句定了一个名叫ZERO_VALUE、数据类型是NUMBER、值为0的常量。

    标量(scalar)数据类型

    标量(scalar)数据类型没有内部组件,他们大致可分为以下四类:

     . number
       . character
       . date/time
       . boolean

    数字类型

    Datatype

    Range

    Subtypes

    description

    BINARY_INTEGER

    -214748-2147483647

    NATURAL
    NATURAL
    NPOSITIVE
    POSITIVEN
    SIGNTYPE

    用于存储单字节整数。
    要求存储长度低于NUMBER值。
    用于限制范围的子类型(SUBTYPE):
     NATURAL:用于非负数
     POSITIVE:只用于正数
     NATURALN:只用于非负数和非NULL
     POSITIVEN:只用于正数,不能用于NULL
     SIGNTYPE:只有值:-101.

    NUMBER

    1.0E-130-9.99E125

    DEC
    DECIMAL
    DOUBLE 
    PRECISION
    FLOAT 
    INTEGERIC
    INT
    NUMERIC
    REAL
    SMALLINT

    存储数字值,包括整数和浮点数。可以选择精度和刻度方式,语法:
    number[[,]]
    缺省的精度是38,scale0.

    PLS_INTEGER

    -2147483647-2147483647

    BINARY_INTEGER基本相同,但采用机器运算时,PLS_INTEGER提供更好的性能 。

    字符数据类型 

    datatype

    rang

    subtype

    description

    CHAR

    最大长度32767字节

    CHARACTER

    存储定长字符串,如果长度没有确定,缺省是1

    LONG

    最大长度2147483647字节

    存储可变长度字符串

    RAW

    最大长度32767字节

    用于存储二进制数据和字节字符串,当在两个数据库之间进行传递时,RAW数据不在字符集之间进行转换。

    LONGRAW

    最大长度2147483647

    LONG数据类型相似,同样他也不能在字符集之间进行转换。

    ROWID

    18个字节

    与数据库ROWID伪列类型相同,能够存储一个行标示符,可以将行标示符看作数据库中每一行的唯一键值。

    VARCHAR2

    最大长度32767字节

    STRINGVARCHAR

    VARCHAR数据类型相似,存储可变长度的字符串。声明方法与VARCHAR相同

    日期和布尔类型

    datatype

    range 

    description

    BOOLEAN

    TRUE/FALSE

    存储逻辑值TRUEFALSE,无参数

    DATE

    01/01/4712 BC 

    存储固定长的日期和时间值,日期值中包含时间

    LOB数据类型

    LOB(大对象,Large object) 数据类型用于存储类似图像,声音这样的大型数据对象,LOB数据对象可以是二进制数据也可以是字符数据,其最大长度不超过4GLOB数据类型支持任意访问方式,LONG只支持顺序访问方式。LOB存储在一个单独的位置上,同时一个"LOB定位符"(LOB locator)存储在原始的表中,该定位符是一个指向实际数据的指针。在PL/SQL中操作LOB数据对象使用ORACLE提供的包DBMS_LOB.LOB数据类型可分为以下四类:

      . BFILE
      . BLOB
      . CLOB
      . NCLOB

    操作符

    与其他程序设计语言相同,PL/SQL有一系列操作符。操作符分为下面几类:

    算术操作符

    关系操作符

    比较操作符

    逻辑操作符

    算术操作符

    operator

    operation

    +

    -

    /

    *

    **

    乘方

    关系操作符主要用于条件判断语句或用于where子串中,关系操作符检查条件和结果是否为truefalse,

    关系操作符

    operator

    operation

    <

    小于操作符

    <=

    小于或等于操作符

    >

    大于操作符

    >=

    大于或等于操作符

    =

    等于操作符

    !=

    不等于操作符

    <>

    不等于操作符

    :=

    赋值操作符

    是比较操作符

    operator

    operation

    IS NULL

    如果操作数为NULL返回TRUE

    LIKE

    比较字符串值

    BETWEEN

    验证值是否在范围之内

    IN

    验证操作数在设定的一系列值中

    逻辑操作符

    operator

    operation

    AND

    两个条件都必须满足

    OR

    只要满足两个条件中的一个

    NOT

    取反

    执行部分

    执行部分包含了所有的语句和表达式,执行部分以关键字BEGIN开始,以关键字EXCEPTION结束,如果EXCEPTION不存在,那么将以关键字END结束。分号分隔每一条语句,使用赋值操作符:=SELECT INTOFETCH INTO给每个变量赋值,执行部分的错误将在异常处理部分解决,在执行部分中可以使用另一个PL/SQL程序块,这种程序块被称为嵌套块

      所有的SQL数据操作语句都可以用于执行部分,PL/SQL块不能再屏幕上显示SELECT语句的输出。SELECT语句必须包括一个INTO子串或者是游标的一部分,执行部分使用的变量和常量必须首先在声明部分声明,执行部分必须至少包括一条可执行语句,NULL是一条合法的可执行语句,事物控制语句COMMITROLLBACK可以在执行部分使用,数据定义语言(Data Definition language)不能在执行部分中使用,DDL语句与EXECUTE IMMEDIATE一起使用或者是DBMS_SQL调用。

    执行一个PL/SQL

      SQL*PLUS中匿名的PL/SQL块的执行是在PL/SQL块后输入/来执行,如下面的例子所示:

    declare 

         v_comm_percent constant number:=10;

        begin

         update emp  set comm=sal*v_comm_percent   where deptno=10;

       end

        SQL> /

        PL/SQL procedure successfully completed.

    SQL>

    命名的程序与匿名程序的执行不同,执行命名的程序块必须使用execute关键字:

    create or replace procedure update_commission
     (v_dept in number,v_pervent in number default 10) is 
    begin
     update emp
     set comm=sal*v_percent
     where deptno=v_dept;
    end

    SQL>/

    Procedure created

    SQL>execute update_commission(10,15);

    PL/SQL procedure successfully completed.

    SQL> 



    如果在另一个命名程序块或匿名程序块中执行这个程序,那么就不需要EXECUTE关进字。

    declare
     v_dept number;
    begin
     select a.deptno
     into v_dept
     from emp a
     where job='PRESIDENT'
     update_commission(v_dept);
    end
    SQL>/
     PL/SQL procedure successfully completed
    SQL>

    控制结构

    控制结构控制PL/SQL程序流程的代码行,PL/SQL支持条件控制和循环控制结构。

    语法和用途

    IF..THEN
    语法:

    IF condition THEN
     Statements 1;
     Statements 2;
     ....
    END IF ;


    IF语句判断条件condition是否为TRUE,如果是,则执行THEN后面的语句,如果conditionfalseNULL则跳过THENEND IF之间的语句,执行END IF后面的语句。

    IF..THEN...ELSE

    语法:

    IF condition THEN
     Statements 1;
     Statements 2;
     ....
    ELSE
     Statements 1;
     Statements 2;
     ....
    END IF 


    如果条件conditionTRUE,则执行THENELSE之间的语句,否则执行ELSEEND IF之间的语句。

    IF 可以嵌套,可以在IF IF ..ELSE语句中使用IFIF..ELSE语句。

    if (a>b) and (a>c) then
      g:=a;
    else
      g:=b;
      if c>g then
       g:=c;
      end if
    end if


    IF..THEN..ELSIF

    语法:

    IF condition1 THEN
     statement1;
    ELSIF condition2 THEN
     statement2;
    ELSIF condition3 THEN
     statement3;
    ELSE
     statement4;
    END IF;
     statement5;

    如果条件condition1TRUE则执行statement1,然后执行statement5,否则判断condition2是否为TRUE,若为TRUE则执行statement2,然后执行statement5,对于condition3也是相同的,如果condition1condition2condition3都不成立,那么将执行statement4,然后执行statement5

    循环控制

    循环控制的基本形式是LOOP语句,LOOPEND LOOP之间的语句将无限次的执行。LOOP语句的语法如下:

    LOOP 
       statements;
      END LOOP

      LOOPEND LOOP之间的语句无限次的执行显然是不行的,那么在使用LOOP语句时必须使用EXIT语句,强制循环结束,例如:

    X:=100;
    LOOP
     X:=X+10;
     IF X>1000 THEN
      EXIT;
     END IF
    END LOOP;
    Y:=X;


      此时Y的值是1010.

      EXIT WHEN语句将结束循环,如果条件为TRUE,则结束循环。

    X:=100;
    LOOP
    X:=X+10;
    EXIT WHEN X>1000;
    X:=X+10;
    END LOOP;
    Y:=X;


      WHILE..LOOP

      WHILE..LOOP有一个条件与循环相联系,如果条件为TRUE,则执行循环体内的语句,如果结果为FALSE,则结束循环。

    X:=100;
    WHILE X<=1000 LOOP
     X:=X+10;
    END LOOP;
    Y=X; 


      FOR...LOOP

      语法:

    FOR counter IN [REVERSE] start_range....end_range LOOP
    statements;
    END LOOP;


      LOOPWHILE循环的循环次数都是不确定的,FOR循环的循环次数是固定的,counter是一个隐式声明的变量,他的初始值是start_range,第二个值是start_range+1,直到end_range,如果start_range等于end _range,那么循环将执行一次。如果使用了REVERSE关键字,那么范围将是一个降序。

    X:=100;
    FOR v_counter in 1..10 loop
    x:=x+10;

    end loop
    y:=x;


      如果要退出for循环可以使用EXIT语句。

      标签

      用户可以使用标签使程序获得更好的可读性。程序块或循环都可以被标记。标签的形式是<>

      标记程序块

    <>
    [DECLARE]
    ... ... ...
    BEGIN
    ........
    [EXCEPTION]
    .......
    END label_name


      标记循环

    <>
    LOOP
    .........
    <>
    loop
    ..........
    <>
    loop
    ....

    EXIT outer_loop WHEN v_condition=0;
    end loop innermost_loop;
    ..........
    END LOOP inner_loop;
    END LOOP outer_loop; 


      GOTO语句

      语法:

      GOTO LABEL;

      执行GOTO语句时,控制会立即转到由标签标记的语句。PL/SQL中对GOTO语句有一些限制,对于块、循环、IF语句而言,从外层跳转到内层是非法的。

    =100;
    FOR V_COUNTER IN 1..10 LOOP
     IF V_COUNTER =4 THEN
      GOTO end_of_loop
     END IF
     X:=X+10;
     <>
     NULL
    END LOOP

    Y:=X; 


      注意:NULL是一个合法的可执行语句。

      嵌套

      程序块的内部可以有另一个程序块这种情况称为嵌套。嵌套要注意的是变量,定义在最外部程序块中的变量可以在所有子块中使用,如果在子块中定义了与外部程序块变量相同的变量名,在执行子块时将使用子块中定义的变量。子块中定义的变量不能被父块引用。同样GOTO语句不能由父块跳转道子块中,反之则是合法的。

    OUTER BLOCK
    DECLARE
     A_NUMBER INTEGER
     B_NUMBER INTEGER
    BEGIN
     --A_NUMBER and B_NUMBER are available here
     <>
     DECLARE
     C_NUMBER INTEGER
     B_NUMBER NUMBER(20)
    BEGIN
     C_NUMBER:=A_NUMBER;
     C_NUMBER=OUTER_BLOCK.B_NUMBER;
    END SUB_BLOCK;
    END OUT_BLOCK;

    展开全文
  • Oracle PL/SQL语言入门

    2012-04-05 10:32:31
     结构化查询语言(Structured Query Language,简称SQL)是用来访问关系型数据库一种通用语言,属于第四代语言(4GL),其执行特点是非过程化,即不用指明执行具体方法和途径,而是简单地调用相应语句来直接取得...
  • 1.SQL语言的特点: SQL语言可以在Oracle数据库中创建、存储、更新、检索和维护数据,其中主要的功能是实现数据的查询和数据... SQL语言属于非过程化的4GL(第四代语言)。 SQL语言按功能可分为DDL语言、DML语言、...
  • 一句话介绍编程语言!

    2017-03-12 17:57:00
    就编程语言来讲,从低级到高级依次是:机器语言(机器码),汇编语言(指令系统,第一代)、C/FORTHAN语言(面向过程,第二代)、Java/c++(面向对象,第三代)。Python属于第3.5代语言,这一类型...第四代语言就是...
  • 几何着色器概述 (Introduction)PDF下载地址传送​positiveczp.github.io渲染管线几何着色器(Geometry Shader)是由第四代显卡着色器架构 Shader Model 4 正式引入第三个着色器,属于渲染管线一个可选阶段,位于...
  • 什么是PL/SQL

    千次阅读 2018-07-18 09:33:10
     ***结构化查询语言(SQL)是用来访问和操作关系型数据库的一种标准通用语言,它属于第四代语言(4GL),  简单易学,使用它可以很方便地调用相应的语句来取得结果。该语言的特点就是非过程化。也就是说,使用 ...
  • SQL=Structured Query Language结构化查询语言,是数据库操作标准语言(Hibernate中HQL,实质还是会转化为相应数据库平台SQL语句),我们现在所用sql语句属于第四代SQL语言,第一代是机器语言,第二代是汇编,...
  • PL/SQL简介

    千次阅读 热门讨论 2015-06-28 22:10:45
    结构化查询语言(Structured Query Language,SQL)是用来访问和操作关系型数据库的一种标准通用语言,它属于第四代语言,简单易学,使用它很方便地调用相应语句来取得结果。该语言的特点就是非过程化。也就是说,...
  • Oracle PL/SQL入门之慨述

    2018-09-17 09:34:26
    一、PL/SQL出现目的 结构化查询语言(Structured Query Language,简称SQL)是用来访问关系型数据库一种通用语言,它属于第四代语言(4GL),其执行特点是非过程化,即不
  • 本篇文章起,将会陆续介绍我在实际开发中经常使用到OraclePL/SQL、游标、视图、存储...结构化查询语言(Structured Query Language,SQL)是用来访问和操作关系型数据库一种标准通用语言,它属于第四代语言(4...
  • 结构化查询语言(structured query language,SQL)是用来访问和操作关系型数据库一种标准通用语言,它属于第四代语言(4GL),简单易学,特点是方便,非过程化。使用时候不用明确指明执行具体方法和途径,不用关注...
  • 初识java

    2017-11-14 20:12:00
    java c c++ c#都是第三代语言,由于里面包含了一些面向对象语言(与人生活息息相关),所以又可以称之为三代半.SQL数据库语言属于第四代语言. java之父---詹姆斯.高斯林 java三个方向: 2007年之前分别叫: j2se; ...
  • 了解数据库

    热门讨论 2012-06-09 22:00:32
     数据库属于第四代语言,命令式语言。  存储数据操作数据一种方式,可以用各种数据库软件去实现常用一些数据库。  关于SQL Sever :访问数据库客户端工具,而非库本身。我们可以访问另一机器另一地方...
  • 结构化查询语言(Structured Query Language,简称SQL)是用来访问关系型数据库一种通用语言,属于第四代语言(4GL),其执行特点是非过程化,即不用指明执行具体方法和途径,而是简单地调用相应语句来直接取得结果...
  • SQL基础

    2014-08-27 18:44:00
    SQL(Struct Query Language) 结构化查询语言,属于第四代语言(接近于自然语言)符合主谓宾定状补 DDL (Data Define L)数据定义语言,创建一个数据库,创建一个表 DML(Data Manage L)数据管理语言,增删改查(CRUD) ...
  • PL/SQL编程接触

    2017-08-15 09:33:00
     结构化查询语言(Structured Query Language,SQL)是用来访问和操作关系型数据库的一种标准通用语言,它属于第四代语言(4GL),简单易学,使用它可以很方便 地调用相应语句来取得结果。该语言的特点就是非过程化...

空空如也

空空如也

1 2 3 4
收藏数 79
精华内容 31
关键字:

属于第四代语言的是