PL/SQL语言基础

本文深入探讨了PL/SQL块结构、分类及变量的定义与使用,包括匿名块、命名块、子程序(过程、函数、包)与触发器等内容。详细解释了变量类型(标量、复合、参照、LOB类型)及其定义方式,同时提供了变量命名规则与使用技巧。
1、PL/SQL块结构
  • 定义部分:用于定义常量、变量、游标、例外、复杂数据类型等
  • 执行部分:用于实现应用模块功能
  • 例外处理部分:用于处理执行部分可能出现的运行错误
2、PL/SQL块分类:可以分为匿名块、命名块、子程序、触发器等4类
  • 匿名块:没用名称的plsql块
  • 命名块:是指具有特定名称标识的plsql块,与匿名块非常类似,只不过在plsql块前使用<<>>加以标记。
  • 子程序:包括过程、函数和包,既可以开发客户端子程序也可以开发服务器端子程序
    • 过程:用于执行特定操作
    • 函数:函数用于返回特定数据。当建立函数时,在函数头必须包含return子句,而在函数体内必须要包含return语句返回数据。
    • 包:用于逻辑组合相关的过程和函,它由包规范和包体两部分组成。包规范用于定义公用的常量、变量、过程和函数,可以使用create package命令
      • 包规范只包含了过程和函数的说明,而没有过程和函数的实现代码。包体用于实现包规范中的过程和函数,使用create package body命令
      • 当调用包的过程和函数时,在过程和函数名之前必须要带有包名作为前缀(包名.子程序名),而如果要访问其他方案的包,还吸烟加上方案名作为前缀(方案名.包名.子程序名)
  • 触发器:是指隐含执行的存储过程
3、定义并使用变量
在编写plsql程序时,可以使用标量类型,复合类型,参照类型和LOB类型4种;
  • 标量类型:是指只能存放单个数值的变量。当定义标量变量时,必须要指定标量数据类型。标量数据类型包括数字类型,字符类型,日期类型和布尔类型。每种类型又包含有相应的子类型,例如number类型包含有integer,positive等子类型,常用的标量类型如下:
    • varchar2(n):用于定义可变长度的字符串,最大值为32767字节。当使用此类型是,必须要指定长度。需要注意,在plsql块中使用该数据类型操作varchar2表列是,其数值的长度不应该超过4000字节
    • char(n):用于定义固定长度的字符串,最大值为32767字节。当使用此类型是,如果没有指定n,则默认值为1。需要注意,在plsql块中使用该数据类型操作char表列是,其数值的长度不应该超过2000字节
    • number(p,s):用于定义固定长度的整数和浮点数。其中,p指定数字的总位数,s,指定小数点后数字位数。
    • date:用于定义日期和时间数据,其数据长度为固定长度(7字节)
    • timestamp:不仅会显示日期,还会显示时间和上下文标记
    • long 和long raw:long用于定义编程字符串,类似于varchar2数据类型。long raw用于定义变长的二进制数据。
  • 定义标量变量:identifier [constant] datatype [not null] [:= | default expr]:例如
    • v_ename varchar2(10);
    • v_sal number(6,2);
    • v_balance binary_float;
    • c_tax_rate constant number(3,2) :=5.5;
    • c_valid boolean not null default false;
  • 使用%type属性
    • 它会按照数据库列或其他变量来确定新变量的类型和长度
  • 标量类型:binary_double, binary_floart, binary_integer, bec,becimal, double precesion, float, int, integer, natural, naturaln, number, numberic, pls_integer, positive, real, signtype smallint, char, character, long, long raw, nchar, nvarchar2, raw, rowid, string, urowid, varchar, varchar2, boolean, date
复合变量
复合变量是指用于存放多个值的变量。plsql包括PL/SQL记录,PL/SQL表,嵌套表以及varray等4种复合数据类型
  • PL/SQL记录:类似于高级语言中的结构
    • 在定义部分定义记录类型和记录变量,然后在执行部分引用该记录变量
    • 在引用记录成员时,必须要加上记录变量作为前缀
  • PL/SQL表:类似于高级语言中的数组,但是有如下区别:高级语言数组的下标不能为负,plsql表的下标可以为负;
  • 嵌套表(Nested Table)类似于高级语言中的数组。需要注意:高级语言数组和嵌套表的下标都是不能为负值的。高级语言的元素个数是有限制的,嵌套表的元素个数是没有限制的
    • 嵌套表和plsql表的区别:嵌套表可以作为表列的数据类型,而plsql表不能;
    • 当在表列中使用嵌套表时,必须首先使用create type创建嵌套表类型
  • 变长数组(varray):类似于嵌套表,他可以作为表列和对象类型属性的数据类型
    • 嵌套表和变长数组的区别:嵌套表的元素个数没有限制,而varray的元素个数是有限制的;
    • 嵌套表列数据需要存储在专门的存储表中,而varray数据则和其他列数据一起存放在表段中
  • 符合类型:record, table, varray
参照变量
参照变量是指用于存放数值指针的变量。通过使用参照变量,可以使得应用程序共享相同对象,从而降低占用空间,可以通过使用游标变量(ref cursor)和对象类型变量 ref obj_type等两种参照变量类型。
  • 参照类型:ref cursor, ref object_type
  • ref cursor:
    • 当使用显式游标时,需要在定义显式游标是指定相应的select语句,这种显式游标称为静态游标。
    • 当使用游标变量时,在定义游标变量时不需要指定select语句,而是在打开游标是指定select语句,从而实现动态的游标操作
  • ref obj_type:当编写对象类型应用时,为了共享相同对象,可以使用ref引用对象类型。ref实际是指向对象实例的指针。
LOB变量
LOB变量是指用于存储大批量数据的变量。分为两种:内部LOB和外部LOB
内部LOB包括:CLOB,BLOB和NCLOB三种,他们的数据被存储在数据库中,并且支持事务操作(提交、退回、保存点)
外部LOB只有BFILE一种类型,该类型的数据被存储在OS文件中,并且不支持事务操作。
clob/nclob用于存储大批量字符数据,blob用于存储大批量二进制数据,bfile则存储指向os文件的指针
  • lob类型: bfile, blob, clob, nclob
非pl/sql变量
  • 使用sql*plus变量
  • 使用procedure builder变量
  • 使用pro*c/c++变量
编写plsql代码
  • plsql有分隔符(Delimiter)、标识符(Identifier)、文字串(Literal)和注释(Comment)四种词汇单元
  • 分隔符
    • 单符合分隔符: +, % , ', ., /, (, ), : ,, *, ", =, <, >, @, ;, -
    • 组合分隔符::=, ->, ||, **, <<, >>, /* , */, .., <>, !=, ^=, <=, >=, --,
  • 标识符:用于指定plsql程序单元和程序项的名称
  • 文本:是指数组,字符,字符串,日期值或布尔值,而不是标识符。文本包括数字文本,字符文本,字符串文本,布尔文本,日期时间文本
    • Oracle 10g之前包含单引号的字符串文本的定义方式: string_var := 'I''m a string, you''re a string.'; --使用两个单引号
    • Oracle10g中的表示方式: stirng_var := q'[I'm a sting,you're a string.]' --使用带有前缀q的其他分隔符,如[],{} <>等
    • 布尔文本有三种取值: true, false, null
  • 注释:有两种注释形式,单行注释和多行注释
pl/sql代码编写规则
  • 标识符命名规则:
    • 定义变量: v_前缀
    • 定义常量: c_前缀
    • 定义游标: _cursor后缀
    • 定义异常: e_前缀
    • 定义pl/sql表类型: _table_type后缀
    • 定义pl/sql表变量: _table后缀
    • 定义pl/sql记录类型: _record_type后缀
    • 定义pl/sql记录变量: _record后缀
v_sal number(6,2) not null; 这个是错误的,当指定not null时,必须给定数值,如:v_sal number(6,2) not null default 0.55;
训练数据保存为deep_convnet_params.pkl,UI使用wxPython编写。卷积神经网络(CNN)是一种专门针对图像、视频等结构化数据设计的深度学习模型,在计算机视觉、语音识别、自然语言处理等多个领域有广泛应用。其核心设计理念源于对生物视觉系统的模拟,主要特点包括局部感知、权重共享、多层级抽象以及空间不变性。 **1. 局部感知与卷积操作** 卷积层是CNN的基本构建块,使用一组可学习的滤波器对输入图像进行扫描。每个滤波器在图像上滑动,以局部区域内的像素值与滤波器权重进行逐元素乘法后求和,生成输出值。这一过程能够捕获图像中的边缘、纹理等局部特征。 **2. 权重共享** 同一滤波器在整个输入图像上保持相同的权重。这显著减少了模型参数数量,增强了泛化能力,并体现了对图像平移不变性的内在假设。 **3. 池化操作** 池化层通常紧随卷积层之后,用于降低数据维度并引入空间不变性。常见方法有最大池化和平均池化,它们可以减少模型对微小位置变化的敏感度,同时保留重要特征。 **4. 多层级抽象** CNN通常包含多个卷积和池化层堆叠在一起。随着网络深度增加,每一层逐渐提取更复杂、更抽象的特征,从底层识别边缘、角点,到高层识别整个对象或场景,使得CNN能够从原始像素数据中自动学习到丰富的表示。 **5. 激活函数与正则化** CNN中使用非线性激活函数来引入非线性表达能力。为防止过拟合,常采用正则化技术,如L2正则化和Dropout,以增强模型的泛化性能。 **6. 应用场景** CNN在诸多领域展现出强大应用价值,包括图像分类、目标检测、语义分割、人脸识别、图像生成、医学影像分析以及自然语言处理等任务。 **7. 发展与演变** CNN的概念起源于20世纪80年代,其影响力在硬件加速和大规模数据集出现后真正显现。经典模型如LeNet-5用于手写数字识别,而AlexNet、VGG、GoogLeNet、ResNet等现代架构推动了CNN技术的快速发展。如今,CNN已成为深度学习图像处理领域的基石,并持续创新。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值