【SQL】Oracle的PL/SQL语法及其拓展数据类型总结
PL/SQL语法
PL/SQL程序由三部分组成,声明部分、执行部分、异常处理部分。
模板:
DECLARE
/*变量声明*/
BEGIN
/*程序主体*/
EXCEPTION
/*异常处理部分*/
END;
接收用户的输入信息
PL/SQL 块还可以接收用户的输入信息,例如:现在要求用户输入一个雇员编号,之后根据输入的内容进行查询,查询雇员的姓名。
用户的输入信息使用“&”完成。
范例:
DECLARE
t_eno NUMBER ;
t_ename VARCHAR2(30) ;
BEGIN
-- 输入的信息保存在 eno 里
t_eno := &no;
-- 之后根据 eno 的值,对数据库进行查询操作
SELECT ename INTO t_ename FROM emp WHERE empno=t_eno ;
DBMS_OUTPUT.put_line('编号为:'||t_eno||'雇员的姓名为:'||t_ename) ;
EXCEPTION
WHEN no_data_found THEN DBMS_OUTPUT.put_line('没有此雇员') ;
END ;
自定义数据类型之%type
定义一个变量,可以将其与表中某个列的数据类型一致。
如上例修改为以下也可运行。
DECLARE
t_eno emp.empno%type ;
t_ename emp.ename%type;
BEGIN
-- 输入的信息保存在 eno 里
t_eno := &no;
-- 之后根据 eno 的值,对数据库进行查询操作
SELECT ename INTO t_ename FROM emp WHERE empno=t_eno ;
DBMS_OUTPUT.put_line('编号为:'||t_eno||'雇员的姓名为:'||t_ename) ;
EXCEPTION
WHEN no_data_found THEN DBMS_OUTPUT.put_line('没有此雇员') ;
END ;
DECLARE
t_eno emp.empno%type ;
t_ename emp.ename%type;
BEGIN
-- 输入的信息保存在 eno 里
t_eno := &no;
-- 之后根据 eno 的值,对数据库进行查询操作
SELECT ename INTO t_ename FROM emp WHERE empno=t_eno ;
DBMS_OUTPUT.put_line('编号为:'||t_eno||'雇员的姓名为:'||t_ename) ;
EXCEPTION
WHEN no_data_found THEN DBMS_OUTPUT.put_line('没有此雇员') ;
END ;
复合数据类型之record
将一个或多个标量封装成一个对象,由单行多列的标量构成的复合结构,组成类似于一维数组。
如下例查询表中两列将其放入记录类型并输出显示。
DECLARE
type rec_test1 is record(
t_empno emp.empno%type,
t_ename emp.ename%type
); --定义一个record类型
rt rec_test1;--使用你刚才定义的record类型,定义了一个变量rt.
BEGIN
select empno,ename into rt.t_empno,rt.t_ename from emp where empno=1001;
dbms_output.put_line('empno:'||rt.t_empno);
END ;
DECLARE
type rec_test1 is record(
a1 number,
a2 varchar2(10)
);
rt1 rec_test1;
rt2 rec_test1;
BEGIN
rt1.a1:=1;
rt1.a2:='china';
rt2.a1:=2;
rt2.a2:='usa';
dbms_output.put_line('rt1.a2:'||rt1.a2);
dbms_output.put_line('rt2.a2:'||rt2.a2);
END ;
复合数据类型之%rowtype
%ROWTYPE可以说是record的升级简化版。
区别在与前者结构为表结构,后者为自定义结构。
二者在使用上没有很大区别。前者方便,后者灵活。
在实际中根据情况来具体决定使用。
使用记录更新数据,如果用记录(RECORD)更新数据,那么只能使用记录成员;如果用%ROWTYPE更新数据,可以直接使用%ROWTYPE 。如:
DECLARE
vEmp emp%RowType;
Begin
select * InTo vEmp from empa where empa.EMPNO = '7934';
update empa set ROW = vEmp where EMPNO ='1111';
commit;
End;
【注】在进行如上操作前,需要复制表emp到empa。
复制表的结构
CREATE TABLE empa as SELECT * FROM emp WHERE 1=2;
复制表的数据
INSERT INTO empa SELECT * FROM emp;
Oracle扩展数据类型小结
%type:可让变量的类型与指定表的某列保持一致;
t_empno 表名.列名%type;
%record:单行多列,类似于一位数组;
1.先创建类型 2.再创建该类型的变量
type XXX is record(
列1 数据类型(长度),列2 数据类型(长度)…
);
x XXX; --x是变量, XXX是它的类型
如何引用某列? x.列名 即可
%rowtype: 是%record的升级简化版,可让其与某张表的结构完全一致.
x 表名%rowtype; --x是变量名
【SQL】Oracle的PL/SQL语法及其拓展数据类型总结的更多相关文章
- Oracle中PL/SQL简介、基本语法以及数据类型
Oracle中PL/SQL简介.基本语法以及数据类型 一.PL/SQL简介. Oracle PL/SQL语言(Procedural Language/SQL)是结合了结构化查询和Oracle自身过程控 ...
- Oracle之PL/SQL学习笔记
自己在学习Oracle是做的笔记及实验代码记录,内容挺全的,也挺详细,发篇博文分享给需要的朋友,共有1w多字的学习笔记吧.是以前做的,一直在压箱底,今天拿出来整理了一下,给大家分享,有不足之处还望大家 ...
- Oracle中PL/SQL的执行部分和各种流程控制
Oracle中PL/SQL的执行部分和异常部分 一.PL/SQL的执行部分. 赋值语句. 赋值语句分两种,一种是定义一个变量,然后接收用户的IO赋值:另一种是通过SQL查询结果赋值. 用户赋值举例: ...
- sql plus 和 pl/sql无法连接远程oracle数据库
前言:安装完oracle客户端后,可能会出现sql plus 和 pl/sql无法连接远程oracle数据库的情况,可能是以下原因: 针对sql plus连接不上: 1 可能原因:之前安装过oracl ...
- Oracle SQL Developer,Oracle 开发工具之toad、SQL Developer、PL/SQL Developer等比较
参考: oracle 的几个开发工具比较 因Oracle几乎是中大型商业企业数据的首选,所以比较一下常用与Oracle的工具. Oracle SQL Developer 免费,一般开发使用足矣,常用. ...
- 使用oracle 的 PL/Sql 定时执行一个存储过程
CSDN日报20170322--<关于软件研发的一些体会总结> 同步博客至 CSDN ,让更多开发者看到你的文章 看微博技术大咖解析互联网应用架构实战 使用oracle 的 PL/Sql ...
- Oracle之PL/SQL Developer的下载与安装
PL/SQL是什么? PL/SQL Developer是一个集成开发环境(以下简称PL/SQL),专门开发面向Oracle数据库的应用.PL/SQL也是一种程序语言,叫做过程化SQL语言(Proced ...
- 在SQL中使用PL/SQL函数存在的问题
-----------------------------Cryking原创------------------------------ -----------------------转载请注明出处, ...
- Working with Numbers in PL/SQL(在PL/SQL中使用数字)
This article gives you all the information you need in order to begin working with numbers in your P ...
- SQL语句、PL/SQL块和SQL*Plus命令之间的区别
SQL语句.PL/SQL块和SQL*Plus命令之间的区别 原文链接:https://blog.csdn.net/liuzhushiqiang/article/details/12320941 在 ...
随机推荐
- JavaScript2谁刚开始学习应该知道4最佳实践文章(翻译)
原版的:24 JavaScript Best Practices for Beginners (注:阅读原文的时候没有注意公布日期,觉得不错就翻译了,翻译到JSON.parse那一节觉得有点不正确路才 ...
- vim在编译器 . 命令(点命令)
时间:2014.06.28 地点:基地 -------------------------------------------------------------------------------- ...
- oschina Web应用开发
Web应用开发 SPDY开发包(13) HTML5开发相关(105) Pjax相关项目(4) 网站API(93) REST/RESTful项目(72) 响应式 Web 框架(27) 微信相关软件(63 ...
- MyEclipse配置启动多个Tomcat
在实际开发中常常会遇到多个项目同一时候进行,来回切换不太方便,这时可分别部署在多个tomcat下. 改动一些配置可同一时候启动多个tomcat 一開始查阅相关文档,看到一篇文章一个Myeclipse同 ...
- broadcom6838开发环境实现函数栈追踪
在嵌入式设备开发中.内核为内核模块的函数栈追踪已经提供了非常好的支持,但用户层的函数栈追踪确没有非常好的提供支持. 在网上收集学习函数栈跟踪大部分都是描写叙述INTER体系架构支持栈帧的实现机制.或者 ...
- Orchard
Orchard工作原理 概述 本文翻译仅供学习之用,了解Orchard工作原理设计思想.技术点及关键词,如有缺漏请不吝指正.鉴于能力有限定有诸多曲解或不完整的地方,请海涵.不定时完善整理. CMS不像 ...
- HDOJ 2736 Surprising Strings
Surprising Strings Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- redis作为mysql的缓存服务器(读写分离) (转)
一.redis简介Redis是一个key-value存储系统.和Memcached类似,为了保证效率,数据都是缓存在内存中.区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录 ...
- 用链表实现栈----《数据结构与算法分析----C语言描述》
一.头文件: #ifndef _STACK_LINK_H_ #define _STACK_LINK_H_ struct stack_record; typedef struct stack_recor ...
- Android判断应用程序从后台回到前台
MainActivity如下: package cc.testbackgroundtofront; import java.util.List; import android.app.Activity ...