plsql programming 07 使用数据
数据类型
char, Nchar
varchar2, Nvarchar2
clob, Nclob
number
number(9, 2); -- 定点小数, 小数点左边7位, 右边2位
number, 浮点小数
number(2) 整数
pls_integer: 由硬件实现算法的整数类型, 顾名思义, 效率高, 但是兼容性...
for 循环计数器的类型是 PLS_INTEGER
ROWID 和 UROWID 用来代表某个表中某条记录的地址, ROWID 代表了表中一行记录的唯一物理地址, UROWID代表了一个索引组织表(iot)中一条记录的逻辑地址.
游标变量
强 ref cursor
declare
type book_data_t is ref cursor return book%rowtype; -- 一种数据类型
book_curs_var book_data_t;
弱 ref cursor
declare
type book_data_t is ref cursor; -- 类型只声明是一个游标, 并没有关联到任何一个特殊的记录结构
book_curs_var book_data_t;
book_curs_var_b sys_refcursor;
internet 数据类型, 例如 xml, url 等, oracle 提供支持.
Any 数据类型, 包括 AnyType, AnyData, AnyDataSet.
用户定义数据类型
声明一个变量
当你声明一个变量时, PLSQL会分配出一块内存空间:
name datatype [not null] [:= | default default_assignment];
例如:
declare
l_total_count number;
l_dollar_amount number(10, 2);
l_right_now date not null default system;
l_favorite_flavor varchar2(100) := ‘Anything with chocolate actually;
TYPE list_of_books_t IS table of book%rowtype index by binary_integer; -- 自定义类型
oreilly_oracle_books list_of_books_t;
声明常量
常量, 必须直接提供缺省值.
name constant datatype [not null] := | default default_value;
例如:
declare
l_curr_year constant pls_integer := to_number(to_char(sysdate, ‘yyyy’));
l_steven constant person_ot :=
person_ot(‘human’, ‘Steven feuerstein’, 175, to_date(‘09-23-1958’, ‘mm-dd-yyyy’));
锚定
你在声明变量时通常都是采用"硬编码"即明确指定数据类型的方式, 如果要从数据库表或者其他PL/SQL程序结构获得数据, 一个更好的实践方式是把变量声明和对象"锚定"在一起, 所谓一个"锚定"的数据类型, 就是告诉 pl/sql 按照已经定义好的数据结构来设置变量的数据类型, 这个定义好的数据结构可能是: 另一个Pl/sql变量, 一个预定义的 type 或者 subtype, 一个数据库表或者表中一列, plsql 提供两种锚定方法:
标量锚定: %type
记录锚定: %rowtype
DECLARE
l_book book%rowtype;
begin
select * into l_book
from book
where isbn = ‘1-5692-335-9’
process_book(l_book);
end;
这种锚定是一种依赖关系, 即"被锚定" 元素发生改变, 使用锚定的代码就会标识为无效, 一旦代码被重新编译, 锚定又会重新建立.
not null 数据类型的锚: 当你声明变量时, 你可以要求这个变量时not null的, 如果其他变量用这个变量的%type属性声明的, 那么这个约束(not null) 也会传递给这个新的变量.
数据类型转换
推荐使用显示类型转换, 例如 to_char, to_number, to_date 等
即 使用显示函数进行转换.
cast 函数: 例如:
select employee_id, cast(hire_date as varchar2(30)) from employee;
或者:
declare
hd_display varchar2(30);
begin
hd_display := cast(sysdate as varchar2);
end;
convert 函数
convert(string_in in varchar2, new_char_set varchar2 [, old_char_set varchar2]) return varchar2
convert 仅仅是吧这个字符集中的字母或者符号替换成另一个字符集中对应的字母或者符号, 常用的两个字符集是 WE8 MSWIN1252 和 AL16UTF16
还有其他一些函数, 例如将16进制数转换成2进制数等等.
plsql programming 07 使用数据的更多相关文章
- plsql修改某一行数据
plsql修改某一行数据时, 在查询语句后面加上for update,再点击
- PLSQL Developer导入Excel数据
LSQL Developer导入Excel数据 最近处理将Excel数据导入Oracle的工作比较多.之前都是采用Sqlldr命令行导入的方式处理.每次导入不同格式的Excel表数据,都需要先把Exc ...
- PLSQL读取XML的数据
最近公司做的几个项目,都是通过EBS与外部系统的Web Service进行数据的交互,而调用Web Service的时候,我们所传送的数据,都是按照约定的XML格式来传递,所以EBS接收到数据之后,需 ...
- plsql programming 17 过程, 函数与参数
代码模块化, 即将一大块代码拆成若干小块(过程), 然后就可以在其他模块调用这些模块了, 这样, 重用性更好, 也方便管理. 过程: 过程是一个可以像执行 PL/SQL 语句一样调用的程序, 一个过程 ...
- plsql programming 16 动态SQL和动态PLSQL
动态SQL 是指在执行时才构建 SQL 语句, 相对于静态 sql 的编译时就已经构建. 动态PLSQL 是指整个PL/SQL代码块都是动态构建, 然后再编译执行的. 作用: 1. 可以支持 DDL ...
- (转)PLSQL Developer导入Excel数据
场景:近来在做加班记录的统计,主要是统计Excel表格中的时间,因为我对于Excel表格的操作不是很熟悉,所以就想到把表格中的数据导入到数据库中,通过脚本语言来统计,就很方便了!但是目前来看,我还没有 ...
- plsql 导入导出表、数据、序列、视图
一.导出: 1.打开plsql-->工具---->导出用户对象(可以导出表结构和序列.视图) ps:如果上面不选中"包括所有者",这样到导出的表结构等就不包含所有 ...
- SpringMVC札集(07)——JSON数据
自定义View系列教程00–推翻自己和过往,重学自定义View 自定义View系列教程01–常用工具介绍 自定义View系列教程02–onMeasure源码详尽分析 自定义View系列教程03–onL ...
- plsql programming 14 DML和事务管理
我们可以把多个SQL语句集中在一起, 在逻辑上组成一个事务, 从而保证这些操作或者全部被保存到数据库(用sql的说法就是”提交”), 或者被整体驳回(用sql的说法是“回滚”). 事务: ACID 原 ...
随机推荐
- IIS8集成模式下打开静态资源被aspx处理程序处理,StaticFileModule失效问题分析
问题描述: 打开js,css,jpg之类的静态资源文件触发了asp.net mvc的权限认证,并不是直接返回静态内容 问题分析: StaticFileModule 失效 ,可能是文件权限问题 问题解决 ...
- Matlab中struct的用法
struct在matlab中是用来建立结构体数组的.通常有两种用法: s = struct('field1',{},'field2',{},...) 这是建立一个空的结构体,field1,field ...
- CentOS release 6.6 (Final)如何安装firefox和chromium
一.firefox的安装: 1. 安装remi源 rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8 ...
- MySQL对时间的处理总结
1.to_days函数查询今天的数据:select * from 表名 where to_days(时间字段名) = to_days(now()); to_days函数:返回从0000年(公元1年)至 ...
- CMD/AMD的原理、区别和应用
有必要简单提一下两者的主要区别: 1.CMD推崇依赖就近,可以把依赖写进你的代码中的任意一行,例: define(function(require, exports, module) { var a ...
- 轻松学习JavaScript十二:JavaScript基于面向对象之创建对象(二)
四原型方式 我们创建的每一个函数都有一个通过prototype(原型)属性.这个属性是一个对象,它的用途是包括能够由特定类型 的全部实例共享的属性和方法. 逻辑上能够这么理解:prototypt通过条 ...
- 怎样制作一个横版格斗过关游戏 Cocos2d-x 2.0.4
本文实践自 Allen Tan 的文章<How To Make A Side-Scrolling Beat 'Em Up Game Like Scott Pilgrim with Coco ...
- 持续集成之代码质量管理-Sonar
原文:http://blog.csdn.net/abcdocker/article/details/53840582 Sonar介绍 Sonar 是一个用于代码质量管理的开放平台.通过插件机制,Son ...
- docker实战——构建Jekyll
构建第一个应用 要构建的第一个应用是Jekyll框架的自定义网站.我们会构建一下两个镜像. 一个镜像安装Jekyll以及其他用于构建Jekyll网站的必要的软件包. 一个镜像通过Apache来让Jek ...
- react 的死循环
在 componentWillUpdate 中 通过 this.setState 修改状态值,可能会导致死循环,因为会调用 shouldComponentUpdate 可以通过 nextProp.pr ...