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

二、PL/SQL 编程基础

Oracle PL/SQL 编程基础

文章目录

  • 一、PL/SQL编程基础
    • 1.1 字符类型
    • 1.2 词汇单元
    • 1.3 PL/SQL 变量
    • 1.4 使用基础数据类型
    • 1.5 最常见的数据类型
    • 1.6 声明和初始化变量
    • 1.7 变量的作用域


一、PL/SQL编程基础

1.1 字符类型

PL/SQL 引擎支持四种类型的字符:字母、数字、符号(*、+、-、=)等和空格。当组合这些字符类型的元素时,就会创建一个词汇单元

1.2 词汇单元

PL/SQL 词汇单元分为如下五类:

  1. 标识符必须以字母开头,最多包含30个字符
  2. 保留字是PL/SQL专用的词(如DECLARE,BEGIN,END等)
  3. 定界符只对PL/SQL有特殊含义的字符,如算术操作符和引号等。
  4. 字面值是不代表标识符的值(字符、数值或者布尔(true,false)).
  5. 注释可以是单行注释(–)或者多行注释(/**/)

1.3 PL/SQL 变量

语法:变量名 数据类型
命名变量的条件:变量须以字母开头,最大为30个字符长度。
如:
v_stu_id
v_last_name
变量名v_stu_id 和 V_STU_ID被认为是相同的,因为PL/SQL是不区分大小写的。

为了使用变量,须在PL/SQL语句块的声明部分中声明它。必须给变量赋予一个名称,定义其数据类型。也可以给这个变量赋一个初始值。如果没有给变量赋予初始值,则值为NULL。如果要限制变量是非空的,须给变量赋予初始值。可以把变量设置为一个常量,这意味着这个变量的值不能被修改。

1.4 使用基础数据类型

给变量设定的数据类型可以基于某种数据库对象。这称作anchored声明,因为变量的数据类型依赖于底层对象的数据类型。应该尽可能的使用anchored数据类型,以便于当基础对象的数据类型发生变化时,无需更改PL/SQ代码。
语法:变量名 type_attribute%TYPE

DECLARE
    v_id NUMBER := &id;
    -- anchored数据类型
    --可理解为变量v_ooag001的数据类型参照表ooag_t下面的ooag001字段的数据类型
    --%TYPE是固定的语法
    v_ooag001 ooag_t.ooag001%TYPE;
    v_ooag011 ooag_t.ooag011%TYPE;
BEGIN
    SELECT ooag001,ooag011
      INTO v_ooag001,v_ooag011
      FROM ooag_t
     WHERE ooag001 = v_id
       AND ooagent = 70
       AND rownum = 1;
    DBMS_OUTPUT.PUT_LINE(v_ooag001||', '||v_ooag011);
EXCEPTION
    WHEN NO_DATA_FOUND THEN
      DBMS_OUTPUT.PUT_LINE('未查到数据');
END;

1.5 最常见的数据类型

VARCHAR2(maximum_length)

  • 存储变长的字符数据
  • 参数是必须的。指定字符数据的最大长度,最大为32767字节,参数须使用整数型的字面值。

CHAR[(maximum_length)]

  • 存储定长的字符数据(不足时使用空格填充)。
  • 参数是可选的,指定字符数据的最大长度,最大为32767字节。
  • 参数如果没有指定最大长度,则默认为1字节.

注意长度是字节,不是字符数

NUMBER[(precision, scale)]

  • 存储定点或浮点数
  • precision是数字的位数
  • scale决定是否进行四舍五入
  • 如果scale不指定默认是0,这时数值会转换成整数
  • 如果precision和scale都不指定,将尽最大的精度进行存储
  • scale的数值范围可以是负数,会四舍五入到小数点的左边。如scale为-3时,3456会转换成3000

BINARY_INTEGER

  • 存储有正负之分的整数变量
  • 与NUMBER数据类型相比较,BINARY_INTEGER变量被存储为二进制格式,这样会占用更少空间。
  • 这个数据类型主要用于索引PL/SQL表。

DATE

  • 存储定长的日期值
  • 日期实际上存储为二进制格式

TIMESTAMP

  • 是DATE数据类型的扩展。存储定长的日期值。

BOOLEAN

  • 存储TRUE、FALSE或者NULL。NULL表示丢失的,未知的或者不使用的值。

1.6 声明和初始化变量

如果把某变量声明为常量,则该变量的值会在整个语句块中都会保持不变,那么必须在声明时进行赋值。

DECLARE
    v_num NUMBER(8,0);
    --定义一个常最c_chr数据类型char,并赋值Y
    c_chr CONSTANT CHAR := 'Y';
BEGIN
    v_num := 100.5533333333333333333333333333333333333333;
    DBMS_OUTPUT.PUT_LINE(v_num);
END;

1.7 变量的作用域

在声明部分所定结构体的作用范围或者生存期就是当前语句块。

相关文章:

  • NGINX源码之:ngx_open_cached_file
  • 【路径规划-机器人栅格地图】基于蚁群算法求解大规模栅格地图路径规划及避障附Matlab代码
  • SpringCache的介绍和使用
  • java-php-python-ssm艾灸减肥管理网站计算机毕业设计
  • 力扣每日一题2022-09-23中等题:设计链表
  • 内存数据库简介-内存数据库性能排行
  • 【云原生】Hadoop on k8s 环境部署
  • 不同编码格式(Unicode、多字节字符)vs环境下使用printf、scanf应注意事项
  • 使用Express获取jquery数据 使用模块化 共享自己的数据库
  • Python算法:决策树分类
  • IDEA插件开发-学习
  • python工具方法35 实现SWA,再一次提升模型的性能
  • mysql查询优化实战:查询用时一分半降到三毫秒
  • 你用什么方法做副业赚钱?
  • 十五:Fiddler抓包教程(15)-Fiddler弱网测试
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • CSS居中完全指南——构建CSS居中决策树
  • npx命令介绍
  • Python利用正则抓取网页内容保存到本地
  • uni-app项目数字滚动
  • 初识 beanstalkd
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 对象引论
  • 基于axios的vue插件,让http请求更简单
  • 利用jquery编写加法运算验证码
  • 目录与文件属性:编写ls
  • 巧用 TypeScript (一)
  • 如何用vue打造一个移动端音乐播放器
  • Mac 上flink的安装与启动
  • #1014 : Trie树
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • (10)ATF MMU转换表
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (排序详解之 堆排序)
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .NET MAUI学习笔记——2.构建第一个程序_初级篇
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
  • .project文件
  • ??eclipse的安装配置问题!??
  • [20171102]视图v$session中process字段含义
  • [bzoj4010][HNOI2015]菜肴制作_贪心_拓扑排序
  • [C# 开发技巧]如何使不符合要求的元素等于离它最近的一个元素
  • [C#][opencvsharp]opencvsharp sift和surf特征点匹配
  • [CDOJ 838]母仪天下 【线段树手速练习 15分钟内敲完算合格】
  • [cogs2652]秘术「天文密葬法」
  • [ExtJS5学习笔记]第三十节 sencha extjs 5表格gridpanel分组汇总
  • [Gym-102091E] How Many Groups
  • [LeetCode] Binary Tree Preorder Traversal 二叉树的先序遍历
  • [Linux] 进程间通信基础