一、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的数据类型总结的更多相关文章

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

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

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

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

  3. win8系统中PL/SQL Developer连接Oracle出现的问题

    注意:所有软件最后不要安装在program files (x86)下  PL/SQL Developer显示Not logged on 以管理员的身份打开PL/SQL Developer 2.   t ...

  4. Oracle12c中PL/SQL(DBMS_SQL)新特性之隐式语句结果(DBMS_SQL.RETURN_RESULT and DBMS_SQL.GET_NEXT_RESULT)

    隐式数据结果特性将能简化从其他数据库到Oracle12c存储过程迁移.1. 背景T-SQL中允许查询结果的隐式返回.例如:下面T-SQL存储过程隐式返回查询结果.CREATE PROCEDURE Ge ...

  5. Oracle中PL/SQL的循环语句

    在PL/SQL中可以使用LOOP语句对数据进行循环处理,利用该语句可以循环执行指定的语句序列.常用的LOOP循环语句包含3种形式:基本的LOOP.WHILE...LOOP和FOR...LOOP. LO ...

  6. Oracle中PL/SQL 范例

    1.写匿名块,输入三角形三个表的长度.在控制台打印三角形的面积 declare v_side_first ):=&第一条边; v_side_second ):=&第二条边; v_sid ...

  7. oracle中pl/sql 练习题----输入部门编号,在控制台打印这个部门的名称,总人数,平均工资(基本工资+奖金)

    一. 思路:声明record类型的变量,根据 多表联合查询查出想要的数据,最后输出. 二.注意:record类型不一定只是一个表中的数据,也可以声明不同表中的数据类型. 三.语句如下: declare ...

  8. (三)PL/SQL数据类型

    PL/SQL注释 程序注释是解释性说明,可以包括自己编写的,并帮助任何人阅读源代码的PL/SQL代码.所有的编程语言允许某种形式的注释. 在PL/SQL支持单行和多行注释.任何注释里面所有字符都会被P ...

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

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

随机推荐

  1. Linux中的AutoHotKey键映射替代方案

    Windows--AutoHotKey 初次了解AutoHotKey,是在Win下最爱效率神器: AutoHotKey | 晚晴幽草轩这篇博客中,博主有对AutoHotKey作详细介绍,这里不在赘余. ...

  2. 默认的Settings.xml文件(无修改过)-Maven

    Tip: 当什么都不作修改时,默认是从Maven中央仓库进行下载,https://repo.maven.apache.org/maven2. 打开maven源码下的lib文件夹,找到maven-mod ...

  3. python ftp sftp

    ftp 上传下载文件 12345678910111213141516171819202122232425262728293031323334 from ftplib import FTPimport ...

  4. Maximum Value(CodeForces - 484B)

    Maximum Value Time limit 1000 ms Memory limit 262144 kB You are given a sequence a consisting of n i ...

  5. Mac 安装Android Studio 及环境变量配置

    我翻开历史一查,这历史没有年代.歪歪斜斜的每页上都写着"仁义道德"几个字,我横竖睡不着,仔细看了半夜,才从字缝里看出来,满本上都写着两个字"吃人"! –鲁迅&l ...

  6. Ubuntu日常使用总结

    Contents 使用了将近一年的Ubuntu,感觉不用windows也可以处理日常的事务.并且我相信只要合理利用Ubuntu,一定可以取代你手中的Windows.我不是说Ubuntu有多么好,只是从 ...

  7. fastcgi_param详解

    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;#脚本文件请求的路径 fastcgi_param QUERY_STRI ...

  8. Simplifying Conditional Expressions(简化条件表达式)

    1.Decompose Conditional(分解条件表达式) 2.Consolidate Conditional Expressions(合并条件表达式) 3.Consolidate Duplic ...

  9. 能源科技,苹果和Google的新圣战?

    细心的果粉可能会注意到,最新版本的IOS软体中,增加了一个不起眼的按钮,它是一款署名为"家庭"的App,之所以说它不起眼,是因为它好像真得没什么用,活跃率恐怕不及Wechat的万分 ...

  10. HTML标签学习总结(3)

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...