当前位置: 首页 > news >正文

PL/SQL程序设计(二)—— PL/SQL块结构和组成元素

(一)PL/SQL块 

  PL/SQL程序由三个块组成,即声明部分、执行部分、异常处理部分,其中执行部分是必须的。

PL/SQL块的结构如下:

PL/SQL块可以分成三类:

1、无名快:动态构造,只能执行一次。

2、子程序:存储在数据库中的存储过程、函数及包等。当在数据库建立好后可以在其他程序中调用它们。

3、触发器:当数据库发生操作时,会触发一些时间按,从而自动执行相应的程序。

(二)PL/SQL结构

  • PL/SQL块中可以包含子块

  • 子块可以位于PL/SQL中的任何部分

  • 子块也即PL/SQL中的一条命令

(三)标识符

PL/SQL程序设计中的标识符定义与SQL的标识符定义要求相同,要求和限制如下:

  • 标识符名不能超过30字符

  • 第一个字符必须为字母

  • 不分大小写

  • 不能用‘-’(减号)

  • 不能是SQL保留字

提示:一般不要把变量名声明与字段名完全一样,如果这样可能得到不正确的结果

 

变量命名在PL/SQL中有特别的讲究,建议在系统的设计阶段就要求所有编程人员共同遵守一定的要求,使得整个系统的文档在规范上达到要求。下面是建议的命名方法:

(四)PL/SQL变量类型

1、变量类型

2、复合类型

ORACLE在PL/SQL中除了提供像前面介绍的各种类型外,还提供了一种成为复合类型 —— 记录和表

(1)记录类型

记录类型是把逻辑相关的数据作为一个单元存储起来,称作PL/SQL RECORD的域,其作用是存放互不相同但逻辑相关的信息

语法:

DBMS_OUTPUT.PUT_LINE过程的功能类似与JAVA中的System.out.println();直接将结果输出到标准输出中

在使用上述过程之前必须将SQL*PLUS的环境参数SERVEROUTPUT设置为ON,否则将看不到输出结果:set serveroutput on

(2)使用%TYPE

定义一个变量,其数据类型与意境定义的某个数据变量的数据类型相同,或者与数据库表的某个列的数据类型相同,这是就可以使用%TYPE。

优点:

  • 所使用的数据库列的数据类型可以不必知道

  • 所引用的数据库列的数据类型可以实时改变

(3)使用%ROWTYPE

PL/SQL提供的%ROWTYPE操作符,返回一个记录类型,其数据类型和数据库表的数据结构相一致。

优点:

  • 所引用的数据库中列的个数和数据类型可以不必知道

  • 所引用的数据库中列的个数和数据类型可以实时改变

 

 

(4)PL/SQL表(嵌套表)

PL/SQL程序可使用嵌套表类型创建具有一个或多个列和无限行的变量,这很像数据库中的表,声明嵌套表类型的一般语法如下:

在使用嵌套表之前必须先使用该集合的构造器初始化它,PL/SQL自动提供一个带有相同名字的构造器作为集合类型

嵌套表可以有任意数量的行,表的大小在必要时课动态地增加或减少:extend(x)方法添加x个空元素到集合末尾;trim(x)方法去掉集合末尾的x个元素

(五)运算符和表达式(数据定义)

1、关系运算符

2、一般运算符

 

 3、逻辑运算符

(六)变量赋值

在PL/SQL编程中,变量赋值只一个值得注意的地方,语法如下:

1、字符与数字运算特点

2、BOOLEAN复制

布尔值只有TURE,FALSE及NULL三个值

3、数据库赋值

数据库赋值是通过select语句来完成的,每次执行SELECT语句就赋值一次,一般要求被赋值的变量与SELECT找那个的列名要一一对应

4、可转化的类型赋值

(七)变量作用范围及可见性

 

转载于:https://www.cnblogs.com/wffrzh/p/9435700.html

相关文章:

  • day24 面向对象设计part1
  • 无监督学习:Deep Auto-encoder(深度自动编码器)
  • UVALive 4108 - SKYLINE(线段树区间更新)
  • PDO和MySQLi区别和数度;到底用哪个?
  • android 换行符(\n) 在TextView中显示不正常的问题
  • App上线-Missing App Store Icon
  • Windows 环境Oracle客户端下载安装
  • datetime模块的简单用法
  • JVM 内存解析,以及自己的一些见解
  • 对CRC32的小结加上bugku一道题目:好多压缩包
  • Excel-DNA自定义函数的参数智能提示功能:ExcelDna.IntelliSense1.1.0.rar
  • D05——C语言基础学PYTHON
  • 常见HTTP状态码
  • 蓝牙学习(4) -- L2CAP
  • c#窗体项目:工艺注意事项
  • #Java异常处理
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • @jsonView过滤属性
  • android 一些 utils
  • Android组件 - 收藏集 - 掘金
  • C++类的相互关联
  • js学习笔记
  • mysql_config not found
  • SpiderData 2019年2月13日 DApp数据排行榜
  • tensorflow学习笔记3——MNIST应用篇
  • Windows Containers 大冒险: 容器网络
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 给github项目添加CI badge
  • 关于extract.autodesk.io的一些说明
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 无服务器化是企业 IT 架构的未来吗?
  • 想使用 MongoDB ,你应该了解这8个方面!
  • kubernetes资源对象--ingress
  • (2)MFC+openGL单文档框架glFrame
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (一)UDP基本编程步骤
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET Core中的去虚
  • .Net IE10 _doPostBack 未定义
  • .vollhavhelp-V-XXXXXXXX勒索病毒的最新威胁:如何恢复您的数据?
  • @RunWith注解作用
  • [ C++ ] template 模板进阶 (特化,分离编译)
  • []常用AT命令解释()
  • [20171106]配置客户端连接注意.txt
  • [2544]最短路 (两种算法)(HDU)
  • [ASP]青辰网络考试管理系统NES X3.5
  • [BetterExplained]书写是为了更好的思考(转载)
  • [C/C++]_[初级]_[关于编译时出现有符号-无符号不匹配的警告-sizeof使用注意事项]
  • [CC-FNCS]Chef and Churu
  • [Docker]十一.Docker Swarm集群raft算法,Docker Swarm Web管理工具