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语法及其拓展数据类型总结的更多相关文章

  1. Oracle中PL/SQL简介、基本语法以及数据类型

    Oracle中PL/SQL简介.基本语法以及数据类型 一.PL/SQL简介. Oracle PL/SQL语言(Procedural Language/SQL)是结合了结构化查询和Oracle自身过程控 ...

  2. Oracle之PL/SQL学习笔记

    自己在学习Oracle是做的笔记及实验代码记录,内容挺全的,也挺详细,发篇博文分享给需要的朋友,共有1w多字的学习笔记吧.是以前做的,一直在压箱底,今天拿出来整理了一下,给大家分享,有不足之处还望大家 ...

  3. Oracle中PL/SQL的执行部分和各种流程控制

    Oracle中PL/SQL的执行部分和异常部分 一.PL/SQL的执行部分. 赋值语句. 赋值语句分两种,一种是定义一个变量,然后接收用户的IO赋值:另一种是通过SQL查询结果赋值. 用户赋值举例: ...

  4. sql plus 和 pl/sql无法连接远程oracle数据库

    前言:安装完oracle客户端后,可能会出现sql plus 和 pl/sql无法连接远程oracle数据库的情况,可能是以下原因: 针对sql plus连接不上: 1 可能原因:之前安装过oracl ...

  5. Oracle SQL Developer,Oracle 开发工具之toad、SQL Developer、PL/SQL Developer等比较

    参考: oracle 的几个开发工具比较 因Oracle几乎是中大型商业企业数据的首选,所以比较一下常用与Oracle的工具. Oracle SQL Developer 免费,一般开发使用足矣,常用. ...

  6. 使用oracle 的 PL/Sql 定时执行一个存储过程

    CSDN日报20170322--<关于软件研发的一些体会总结> 同步博客至 CSDN ,让更多开发者看到你的文章 看微博技术大咖解析互联网应用架构实战 使用oracle 的 PL/Sql ...

  7. Oracle之PL/SQL Developer的下载与安装

    PL/SQL是什么? PL/SQL Developer是一个集成开发环境(以下简称PL/SQL),专门开发面向Oracle数据库的应用.PL/SQL也是一种程序语言,叫做过程化SQL语言(Proced ...

  8. 在SQL中使用PL/SQL函数存在的问题

    -----------------------------Cryking原创------------------------------ -----------------------转载请注明出处, ...

  9. 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 ...

  10. SQL语句、PL/SQL块和SQL*Plus命令之间的区别

    SQL语句.PL/SQL块和SQL*Plus命令之间的区别   原文链接:https://blog.csdn.net/liuzhushiqiang/article/details/12320941 在 ...

随机推荐

  1. [置顶] vs2008 编译adb 支持4.2 android 系统(增加push 命令的进度)

    QQ: 2506314894 本想晚些时候放出来的,但是按捺不住啊,所以修改了之后就立即放出来了.先说明一下,这次用的adb 的源码比较新的,用的vs2008 编译出来,只有一个exe 文件,直接就可 ...

  2. java nio-理解同步、异步,阻塞和非阻塞

    理解同步.异步,阻塞和非阻塞 结论:阻塞.非阻塞与是否同步异步无关.     转自知乎 “阻塞”与"非阻塞"与"同步"与“异步"不能简单的从字面理解, ...

  3. hdu1495(bfs)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1495 题意:有三个杯子,开始时第一个杯子装满水(体积为a),倒来倒去,得到其中2个杯里的水的体积都为a ...

  4. 使用注解实现 bean 转 csv

    csv 文件是 aaa,bbb,ccc aaa,bbb,ccc 保存 这里的要求是 List<T> 线性表的类型 转换成 类别似 html 中 table的格式,即第一行是 head 后面 ...

  5. shiro权限架作战

    shiro框架作为一种特权的开源框架,通过身份验证和授权从具体的业务逻辑分离极大地提高了我们的发展速度,它的易用性使得它越来越受到人们的青睐.上一页ACL架相比,shiro能更easy的实现权限控制, ...

  6. 【转向Javascript系列】深入理解Web Worker

    本文首发在alloyteam团队博客,链接地址http://www.alloyteam.com/2015/11/deep-in-web-worker/ 上一篇文章<从setTimeout说事件循 ...

  7. U7Linux文件与目录管理

    1. .:代表当前层目录. ..:代表上一层目录. -:代表前一个工作目录. ~:代表目前用户所在的主文件夹. ~account:代表account这个用户的主文件夹. 2.pwd:显示当前目录. p ...

  8. 从Rational Rose 到IBM Rational Software Architect和IBM Rational Rhapsody

    2014/10/27 RSA升级,重装,不知怎么搞的,不能添加某些图(比如,活动图),重试了几次都不行,在其它电脑上没有问题.后来把其它电脑上的workspace复制过来,问题攻克了,原来是works ...

  9. 13、Cocos2dx 3.0三,找一个小游戏开发3.0中间Director :郝梦主,一统江湖

    重开发人员的劳动成果.转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27706967 游戏中的基本元素 在曾经文章中,我们具 ...

  10. Unity3D发布WebPlayer时Failed to download data file解决方案

    今天发布WebPlayer时, 发现直接打开html是可以正常运行的, 但是通过iis访问的话就会报错: Failed to download data file. 一开始以为是防火墙, 后来发现不是 ...