orale中pl/sql的数据类型总结
一、pl/sql的概念
pl/sql简单的说就是:sql语句+编程语言的特性。
二、pl/sql的优点
1、可以提高程序的运行效率,因为能够减少数据库的访问次数。
2、可以对复杂的业务逻辑进行封装
3、pl/sql具有编程语言的特性,可以写ifelse实现复杂的业务逻辑
三、pl/sql块
pl/sql是用块来管理内部程序,pl/sql 块分匿名块与命名块。
匿名块:没有名字的就是匿名块,匿名块不会保存到数据库中,执行完就没有了,类似于java中的main方法。
命名块:有名字的块就是命名块。命名块 :过程,函数,游标,触发器
四、pl/sql变量类型
基本类型:
类型名 | 说明 |
varchar | 定长字符串 |
varchar2 | 变长字符串 |
number(n,m) | 数字类型 |
date | 日期类型 |
timestamp | 时间戳类型 |
引入类型
1、%type类型(列类型)
%type类型指的是声明变量的时候,该变量参考某个表的某个列的类型。
例子:
declare
-- 变量声明部分 v_ename 类型参考emp表的ename的类型
v_ename emp.ename%type;
v_sal emp.sal%type;
begin-- 业务逻辑执行部分
select ename,sal into v_ename,v_sal from emp where empno=&请输入员工编号;
-- 把员工姓名打印到控制台
dbms_output.put_line('员工姓名:'||v_ename||',基本工资:'||v_sal);
exception
-- 异常处理部分
when no_data_found then
dbms_output.put_line('您输入的员工编号不存在');
end;
2、%rowtype(行类型)
%rowtype参数某个表的类型。%rowtype中可以存储多个数据,具体可存多少个和表的字段数一样。
例子:
declare
-- 声明行类型变量
v_emp emp%rowtype;
begin
-- 业务逻辑执行部分
select * into v_emp from emp where empno=&请输入员工编号;
-- 把员工姓名打印到控制台
dbms_output.put_line('员工姓名:'||v_emp.ename||',基本工资:'||v_emp.sal||',奖金:'||v_emp.comm
||'雇佣日期:'||v_emp.hiredate);
exception
-- 异常处理部分
when no_data_found then
dbms_output.put_line('您输入的员工编号不存在');
end;
3、record类型(记录类型)
record可以理解为可自定义的行类型,record类型在使用之前必须声明该类型。
例子:
declare
-- 声明record类型
type emp_record_type is record(
ename emp.ename%type,
sal emp.sal%type,
total emp.sal%type);
-- 声明record类型的变量
v_emp emp_record_type;
begin
-- 查询数据,给变量赋值
select ename,sal,sal+nvl(comm,0) into v_emp from emp where empno=&no;
-- 输入record类型变量中的数据
dbms_output.put_line('员工姓名:'||v_emp.ename||',基本工资:'||v_emp.sal||',总工资:'||v_emp.total);
end;
4、table类型(表类型)
无论是行类型还是记录类型只能存储一行数据,如果要存储多行数据,需要用到table类型。table类型也需要先声明类型,在声明该类型的变量。
例子:
根据员工编号查询员工的信息,存储到table类型的变量中,再输出出来。 declare
-- 声明table类型 is table of 后可以跟行类型,也可以是记录类型
type emp_table_type is table of emp%rowtype
-- 指定下标的增长方式为整数,每次增长index by binary_integer;
-- 声明table类型的变量
v_emp emp_table_type;
begin
-- 把编号为7369的员工的信息存储到table类型变量中
select * into v_emp(1) from emp where empno=7369;
-- 把编号为7499的员工的信息存储到table类型变量中
select * into v_emp(2) from emp where empno=7499;
--数据table类型变量中的数据
dbms_output.put_line('员工姓名:'||v_emp(1).ename||',基本工资:'||v_emp(1).sal);
dbms_output.put_line('员工姓名:'||v_emp(2).ename||',基本工资:'||v_emp(2).sal);
end;
附:表类型后边可以跟记录类型,如下:
查询员工的姓名,编号,部门名称。(因为部门名称与员工信息并不在同一个表中,所以声明table类型的时候后边需要跟一个记录类型。)
declare
-- 声明一个record类型,用来存储员工的姓名,编号和部门名称
type emp_record_type is record(
ename emp.ename%type,
empno emp.empno%type,
dname dept.dname%type
);
-- table类型的变量,is table of 后可以跟行类型,也可以是记录类型
type emp_table_type is table of emp_record_type
-- 指定下标的增长方式为整数,每次增长1
index by binary_integer;
-- 声明table类型的变量
v_emp emp_table_type; begin
-- 查找数据
select e.ename,e.empno,d.dname bulk collect into v_emp from emp e inner join dept d on d.deptno=e.deptno;
-- 循环输出
for v_i in v_emp.first..v_emp.last
loop
dbms_output.put_line('员工编号:'||v_emp(v_i).empno||'员工姓名:'||v_emp(v_i).ename||'部门姓名:'||v_emp(v_i).dname);
end loop; end;
引入数据类型总结:
返回值为单列可以用%type类型,如果为单行,用%rowtyp和table都可以,只不过,%rowtype的行是自定义的,table的行是参照数据的行的,如果,返回值为多行,用table类型比较合适,如果,返回值为多行,同时列还是自定义的,则用table类型结合%rowtype类型。
orale中pl/sql的数据类型总结的更多相关文章
- Oracle中PL/SQL简介、基本语法以及数据类型
Oracle中PL/SQL简介.基本语法以及数据类型 一.PL/SQL简介. Oracle PL/SQL语言(Procedural Language/SQL)是结合了结构化查询和Oracle自身过程控 ...
- Oracle中PL/SQL的执行部分和各种流程控制
Oracle中PL/SQL的执行部分和异常部分 一.PL/SQL的执行部分. 赋值语句. 赋值语句分两种,一种是定义一个变量,然后接收用户的IO赋值:另一种是通过SQL查询结果赋值. 用户赋值举例: ...
- win8系统中PL/SQL Developer连接Oracle出现的问题
注意:所有软件最后不要安装在program files (x86)下 PL/SQL Developer显示Not logged on 以管理员的身份打开PL/SQL Developer 2. t ...
- Oracle12c中PL/SQL(DBMS_SQL)新特性之隐式语句结果(DBMS_SQL.RETURN_RESULT and DBMS_SQL.GET_NEXT_RESULT)
隐式数据结果特性将能简化从其他数据库到Oracle12c存储过程迁移.1. 背景T-SQL中允许查询结果的隐式返回.例如:下面T-SQL存储过程隐式返回查询结果.CREATE PROCEDURE Ge ...
- Oracle中PL/SQL的循环语句
在PL/SQL中可以使用LOOP语句对数据进行循环处理,利用该语句可以循环执行指定的语句序列.常用的LOOP循环语句包含3种形式:基本的LOOP.WHILE...LOOP和FOR...LOOP. LO ...
- Oracle中PL/SQL 范例
1.写匿名块,输入三角形三个表的长度.在控制台打印三角形的面积 declare v_side_first ):=&第一条边; v_side_second ):=&第二条边; v_sid ...
- oracle中pl/sql 练习题----输入部门编号,在控制台打印这个部门的名称,总人数,平均工资(基本工资+奖金)
一. 思路:声明record类型的变量,根据 多表联合查询查出想要的数据,最后输出. 二.注意:record类型不一定只是一个表中的数据,也可以声明不同表中的数据类型. 三.语句如下: declare ...
- (三)PL/SQL数据类型
PL/SQL注释 程序注释是解释性说明,可以包括自己编写的,并帮助任何人阅读源代码的PL/SQL代码.所有的编程语言允许某种形式的注释. 在PL/SQL支持单行和多行注释.任何注释里面所有字符都会被P ...
- 在SQL中使用PL/SQL函数存在的问题
-----------------------------Cryking原创------------------------------ -----------------------转载请注明出处, ...
随机推荐
- jquery mobile AJAX特性的陷阱
简单情况是 MVC 重定向,URL不变 试了N种方式,跳来跳去,无解,服务端跳,写JS跳,生成跳转中间页跳.失败 后来一看,明明已经跳到新页了,样式什么还是原页的,有点火大了. 出去溜一圈,喝杯水,和 ...
- php--0与空的判断
使用empty()函数判断,两者都是true $a=0; if(trim($a)=="") { echo '数字0'; }
- caffe之mac环境下通过XCode调试C++程序
caffe log输出参考:http://blog.csdn.net/langb2014/article/details/50482150mac下用xcode开发caffe:http://coldmo ...
- Spring中@Resorce和@Autowired的区别
@Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按 byName自动注入罢了.@Resource有两个属性是比较重要的,分 ...
- Python Web 基础向(四) 浅谈数据层
数据层一般会给人带来一些困扰,在于其定位不准确.聚合Model的工作也可以放在逻辑层做,但会导致逻辑层变重,经常出现大段晦涩代码.因此我的建议是保留Model聚合层,尽管会导致工作量的略微增加,但却可 ...
- TensorFlow_Faster_RCNN中demo.py的运行(CPU Only)
GitHub项目地址,https://github.com/endernewton/tf-faster-rcnnTensorflow Faster RCNN for Object Detection. ...
- Protobuf 简介及简单应用
Protobuf 是 protocol buffers 的缩写. 根据官网的说法, protocol buffers 与平台无关, 与语言无关, 实现数据序列化的一种手段. 正如名字一样, proto ...
- VUE实现Studio管理后台(二):Slot实现选项卡tab切换效果,可自由填装内容
作为RXEditor的主界面,Studio UI要使用大量的选项卡TAB切换,我梦想的TAB切换是可以自由填充内容的.可惜自己不会实现,只好在网上搜索一下,就跟现在你做的一样,看看有没有好事者实现了类 ...
- 用table类型布局一个新闻网页
<html><head><meta http-equiv="Content-Type" content="text/html; charse ...
- 《第31天:JQuery - 轮播图》
源码下载地址:链接:https://pan.baidu.com/s/16K9I... 提取码:0ua2 写这篇文章,当做是对自已这一天的一个总结.写轮播图要准备的东西:三张尺寸大小一样的图片.分为三个 ...