整理于 Oracle PL/SQL编程详解 - 古立 - 博客园

PL/SQL基础之DECLARE部分整理

  • PL/SQL块的结构
  • 声明规范
    • 标识符
    • 数据类型
  • 定义记录类型语法:
  • 定义VARRY数据类型语法:
  • 使用%TYPE
  • 使用%ROWTYPE
    • 变量作用范围及可见性

因为SQL只能访问、操作数据库,却不能进行程序设计,而Oracle PL/SQL是一种高级数据库程序设计语言,该语言专门用于对ORACLE数据库进行访问,并且可以进行过程处理。
注:在 PL/SQL中只能用 SQL语句中的 DML 部分,不能用 DDL 部分,如果要在PL/SQL中使用DDL(如CREATE table 等)的话,只能以动态的方式来使用。
1. DML(data manipulation language)数据操纵语言:比如SELECT、UPDATE、INSERT、DELETE等操作,主要用来对数据库的数据进行一些操作 。

2. DDL(data definition language)数据库定义语言: 其实就是我们在创建表的时候用到的一些sql,比如说:CREATE、ALTER、DROP等。DDL主要是用在定义或改变表的结构,数据类型,表之间的链接和约束等初始化工作上

PL/SQL块的结构

DECLARE   --声明部分: 在此声明PL/SQL用到的变量,类型及游标,以及局部的存储过程和函数
BEGIN -- 执行部分:  过程及SQL语句,即程序的主要部分
EXCEPTION -- 执行异常部分: 错误处理
END;

DECLARE部分主要是进行变量,常量,游标,函数等参数的声明。

声明规范

关于声明的规范,建议如下:

注: 通常情况不应让变量名与表中字段名一样

标识符

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

1.标识符名不能超过30字符;

2.第一个字符必须为字母;

3.不分大小写;

4.不能用’-‘(减号);

5.不能是SQL保留字。

数据类型

对于变量,常量等的类型,如下图:

定义记录类型语法:

TYPE record_name IS RECORD( v1 data_type1  [NOT NULL]  [:= default_value ], v2 data_type2  [NOT NULL]  [:= default_value ], …… vn data_typen  [NOT NULL]  [:= default_value ] );

定义VARRY数据类型语法:

TYPE varray_name IS VARRAY(size) OF element_type [NOT NULL];

varray_name是VARRAY数据类型的名称,size是下整数,表示可容纳的成员的最大数量,每个成员的数据类型是element_type。默认成员可以取空值,否则需要使用NOT NULL加以限制。
对于VARRAY数据类型来说,必须经过三个步骤,分别是:定义、声明、初始化。
栗子:

 DECLARE --定义一个最多保存5个VARCHAR(25)数据类型成员的VARRAY数据类型 TYPE reg_varray_type IS VARRAY(5) OF VARCHAR(25); --声明一个该VARRAY数据类型的变量 v_reg_varray REG_VARRAY_TYPE; BEGIN --用构造函数语法赋予初值 v_reg_varray := reg_varray_type ('中国', '美国', '英国', '日本', '法国'); DBMS_OUTPUT.PUT_LINE('地区名称:'||v_reg_varray(1)||'、' ||v_reg_varray(2)||'、' ||v_reg_varray(3)||'、' ||v_reg_varray(4)); DBMS_OUTPUT.PUT_LINE('赋予初值NULL的第5个成员的值:'||v_reg_varray(5)); --用构造函数语法赋予初值后就可以这样对成员赋值 v_reg_varray(5) := '法国'; DBMS_OUTPUT.PUT_LINE('第5个成员的值:'||v_reg_varray(5)); END;

使用%TYPE

定义一个变量,其数据类型与已经定义的某个数据变量(尤其是表的某一列)的数据类型相一致,这时可以使用%TYPE。

使用%TYPE特性的优点在于:
1.所引用的数据库列的数据类型可以不必知道;
2.所引用的数据库列的数据类型可以实时改变,容易保持一致,也不用修改PL/SQL程序。

 DECLARE -- 用%TYPE 类型定义与表相配的字段 TYPE T_Record IS RECORD( T_no emp.empno%TYPE, T_name emp.ename%TYPE, T_sal emp.sal%TYPE ); -- 声明接收数据的变量 v_emp T_Record; BEGIN SELECT empno, ename, sal INTO v_emp FROM emp WHERE empno=7788; DBMS_OUTPUT.PUT_LINE (TO_CHAR(v_emp.t_no)||' '||v_emp.t_name||'  ' || TO_CHAR(v_emp.t_sal)); END;

使用%ROWTYPE

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

使用%ROWTYPE特性的优点在于:
1.所引用的数据库中列的个数和数据类型可以不必知道;
2.所引用的数据库中列的个数和数据类型可以实时改变,容易保持一致,也不用修改PL/SQL程序。

 DECLARE v_empno emp.empno%TYPE :=&no; rec emp%ROWTYPE; BEGIN SELECT * INTO rec FROM emp WHERE empno=v_empno; DBMS_OUTPUT.PUT_LINE('姓名:'||rec.ename||'工资:'||rec.sal||'工作时间:'||rec.hiredate);  END;

注:v_empno emp.empno%TYPE :=&no; 这里的 :=&no是指键入参数

变量作用范围及可见性

在PL/SQL编程中,如果在变量的定义上没有做到统一的话,可能会隐藏一些危险的错误,这样的原因主要是变量的作用范围所致。变量的作用域是指变量的有效作用范围,与其它高级语言类似,PL/SQL的变量作用范围特点是:

1.变量的作用范围是在你所引用的程序单元(块、子程序、包)内。即从声明变量开始到该块的结束。

2.一个变量(标识)只能在你所引用的块内是可见的。

3.当一个变量超出了作用范围,PL/SQL引擎就释放用来存放该变量的空间(因为它可能不用了)。

4.在子块中重新定义该变量后,它的作用仅在该块内。

DECLARE Emess char(80);
BEGIN DECLARE V1 NUMBER(4); BEGIN SELECT empno INTO v1 FROM emp WHERE LOWER(job)='president'; DBMS_OUTPUT.PUT_LINE(V1); EXCEPTION When TOO_MANY_ROWS THEN DBMS_OUTPUT.PUT_LINE ('More than one president'); END; DECLARE  V1 NUMBER(4); BEGIN SELECT empno INTO v1 FROM emp WHERE LOWER(job)='manager'; EXCEPTION When TOO_MANY_ROWS THEN DBMS_OUTPUT.PUT_LINE ('More than one manager'); END;
EXCEPTION When others THEN Emess:=substr(SQLERRM,1,80); DBMS_OUTPUT.PUT_LINE(emess);
END;

PL/SQL基础之DECLARE部分(整理)相关推荐

  1. Oracle PL/SQL基础知识

    Oracle PL/SQL基础知识 过程(存储过程) 过程用于执行特定的操作,当建立过程时,既可以指定输入参数(in),也可以指定输出参数(out).通过在过程中使用输入参数,可以将数据传递到执行部分 ...

  2. ORACLE甚而,PL/SQL基础

    Oracle PL/SQL语言基础 PL/SQL是ORACLE对标准数据库语言的扩展,ORACLE公司已经将PL/SQL整合到ORACLE 服务器和其他工具中了,近几年中更多的开发人员和DBA开始使用 ...

  3. oracle空间数据库实验报告,Oracle数据库实验报告六 PL/SQL基础

    Oracle数据库实验报告六 PL/SQL基础 -by QQC from BTBU [实验目的] PL/SQL的安装网上有很多教程这里就不做赘述了,如果后序需求大的话我再考虑做一期PL/SQL安装使用 ...

  4. 第四章、PL/SQL基础

    1.PL/SQL概述 2.PL/SQL块结构 3.分支语句的使用 4.循环语句的使用 5.异常处理的使用 6.记录的使用 PL/SQL块结构 PL/SQL块结构如下 DECLARE ... BEGIN ...

  5. Oracle PL/SQL基础语法学习13:比较运算符

    系列文章目录 Oracle PL/SQL基础语法学习12:短路求值 Oracle PL/SQL基础语法学习13:比较运算符 Oracle PL/SQL基础语法学习14:BOOLEAN表达式 文章目录 ...

  6. PL/SQL基础:结构、变量处理——PL/SQL教程(一)

    什么是PL/SQL ​ 许多时候我们会利用结构化查询语言(SQL)来访问和操作关系型数据库.这种语言的特点就是非过程化.也就是说使用的时候不用指明执行的具体方法和途径,即不用关注任何的实现细节.但这种 ...

  7. Oracle442个应用场景---------PL/SQL基础

    ----------------------------------------------------------------------------------- 备份和恢复数据库略过.在后面解说 ...

  8. pl/sql基础练习

    pl/sql块: 1 匿名块            ----不能存储,不能共享 2 存储过程 函数 触发器 包   ----带有名称的块,可以存储在oracle服务器上,可以共享和多次调用. 1 匿名 ...

  9. 20个案例掌握PL/SQL 基础

    有MS SQL基础,学习了两周多的PL/SQL,做了一些事例,但是很多信息在网上难以找到太多正确的答案,看到一篇又一篇的PL/SQL博文,案例方面的博文一篇又一篇的雷同,一看就是是Ctrl+C的复制. ...

最新文章

  1. 2022-2028年中国磷肥工业投资分析及前景预测报告
  2. 查询最近一千条数据mysql_保留mysql数据库中的最新1000条记录
  3. python怎么定义空矩阵_python 空矩阵
  4. Vmware 下安装Arch Linux
  5. Testin云测试:QQ(4.2.0)安卓版客户端可用性优秀
  6. echarts formatter_手把手教你玩转echarts(二)折线图
  7. php用户名相似度对比,PHP-如何快速计算出用户的相似度
  8. grasshopper_如何使用Google的Grasshopper编码应用程序来学习手机上的编码基础知识...
  9. Promise对象和运算符
  10. DX11与多线程渲染
  11. H264---帧/场编码模式选择---PAFF MBAFF frame_mbs_only_flag mb_adaptive_frame_field_flag field_pic_flag
  12. 直流无刷电机与永磁同步电机区别
  13. 联想dns服务器错误怎么修复,dns错误怎么办,教您dns错误怎么解决
  14. 多模态信息用于推荐系统问题(MMDIN,hyperCTR)
  15. 关闭win10的防护系统
  16. Windows10系统自带的五笔输入法替换98字库
  17. c 语言中是什么作用是什么意思,在C语言中%C是什么意思
  18. 2019中国机器人大赛窄足机器人赛后总结
  19. 实战:618/双11大促备战全流程点点滴滴
  20. 《遥感云计算与科学分析》GEE教材中配套代码链接

热门文章

  1. 【python3】批量将xls和csv格式转换成xlsx格式文件
  2. 攻防世界-MISC-练习区-12(功夫再高也怕菜刀)
  3. 【渝粤教育】国家开放大学2018年秋季 7404-22T数学建模 参考试题
  4. 2021浙江省ACM省赛后记
  5. html5+游戏+盈利+神经猫,基于CreatejsHTML5游戏案例(围住神经猫)
  6. 【SwiftUI模块】0018、SwiftUI搭建一个类似支付宝中的余额宝余额数字动画效果
  7. 【原创】余额宝收益统计工具
  8. 2. Python 简介
  9. 人工智能机器人对话,使用/教程/实例
  10. 奔驰原厂柏林之声加装 成都蔚一名车汇