
-----SQL/PLSQL基础
文章平均质量分 88
清风智语
十年以上数据库领域一线实战经验,涵盖高可用,灾备中心设计,备份恢复,数据库开发,数据挖掘,数据库设计,性能优化等;其产品服务领域包括Oracle,MySQL,SQLserver,MongoDB等。曾先后服务于晨星资讯,dbadirect,香港易高科技等金融,证券软件行业;并提供企业级数据库性能优化,运维管理相关培训,先后提供培训服务的对象有速尔快递,同洲电子,民太安保险,康拓普,广州电信研究院,中行浙江分行等。
展开
-
DML Error Logging 特性
最近的项目中发现处理DML Error 时,逐条逐条处理1千多条的数据从临时表 insert 到正式表需要差不多1分钟的时间,性能相当低下,而Oracle 10g中的DML error logging对于DML异常处理性能卓著。原本打算写篇关于这个特性的文章,正好有经典篇章,于是乎,索性翻译供大家参考,有不尽完美之处,请大家拍砖。 缺省情况下,一个DML命令失败的时候,在侦测到错误之前,翻译 2012-07-25 11:07:28 · 6468 阅读 · 0 评论 -
SQL, PL/SQL 之NUMBER数据类型
NUMBER数据类型在Oracle中使用的较为广泛,可以存储零值,正负数,以及定长数,对于这个数据类型有个几个概念要搞清,否则容易搞混,下面给出具体描述。 1、可表示范围及存储空间 从1.0 x 10-130 到 1.0 x 10126(不包括),如果表达式或值大于1.0 x 10126,Oracle会返回错误信息 所需的存储空间为1到22个字节 2、Number类型表示法 NU原创 2012-11-06 17:24:15 · 48157 阅读 · 2 评论 -
SQL,PL/SQL 数据类型一览表
The following is a list of datatypes available in Oracle.Character DatatypesThe following are the Character Datatypes in Oracle:Data Type SyntaxOracle 9iOracle 10gOracle 11gExplanation(if applicable)c原创 2012-11-01 10:38:51 · 4912 阅读 · 0 评论 -
FORALL 之 SAVE EXCEPTIONS 子句应用一例
对于大批量的DML操作中出现的错误,除了使用DML error logging特性来记录在DML期间出现的错误之外,使用批量SQL语句FORALL的SAVEEXCEPTIONS是不错的选择之一。DML error logging特性的使用较FORALL之 SAVE EXCEPTIONS相对简单,也存在一些不足,如每一个被操作的DML对象需要创建相应的对应的日志表,不利于集中管理。本文对DML er原创 2012-08-12 20:06:42 · 7957 阅读 · 0 评论 -
PL/SQL 嵌套记录与记录集合
将多个逻辑上不相关列组合到一起形成了PL/SQL的记录类型,从而可以将记录类型作为一个整体对待来处理。而且PL/SQL记录类型可以进行嵌套以及基于PL/SQL记录来定义联合数组,嵌套表等。本文首先回顾了PL/SQL记录的几种声明形式,接下来主要描述PL/SQL记录的嵌套以及基于记录的集合。 有关PL/SQL 记录语法、以及在SQL中使用PL/SQL记录,请参考:PL/SQL --> PL/S原创 2012-05-15 17:16:12 · 4887 阅读 · 0 评论 -
PL/SQL 包编译时hang住的处理
最近PL/SQL包在编译时被hang住,起初以为是所依赖的对象被锁住。结果出乎意料之外。下面直接看代码演示。1、在SQL*Plus下编译包时被hang住 SQL> alter package bo_syn_data_pkg compile;alter package bo_syn_data_pkg compile*ERROR at line 1:ORA-01013: user原创 2012-05-30 16:48:09 · 7611 阅读 · 3 评论 -
PL/SQL 如何输出布尔型
布尔类型是PL/SQL数据类型的一种,能存储逻辑值TRUE、FALSE。只有逻辑操作符才允许应用在布尔变量上。数据库 SQL 类型并不支持布尔类型,只有PL/SQL才支持。所以不能往数据库中插入或从数据库中检索出布尔类型的值。下面描述了布尔型的声明、赋值以及如何输出布尔型。1、布尔型的声明与赋值 PL/SQL提供的两个表示布尔值的直接量为TRUE和FALSE。这些值不是字符串,我们也不用加引号原创 2012-05-09 14:13:29 · 15976 阅读 · 0 评论 -
批量 SQL 之 FORALL 语句
对PL/SQL而言,任何的PL/SQL块或者子程序都是PL/SQL引擎来处理,而其中包含的SQL语句则由PL/SQL引擎发送SQL语句转交到SQL引擎来处理,SQL引擎处理完毕后向PL/SQL引擎返回数据。Pl/SQL与SQL引擎之间的通信则称之为上下文切换。过多的上下文切换将带来过量的性能负载。因此为减少性能的FORALL与BULK COLLECT的子句应运而生。即仅仅使用一次切换多次执行来降低原创 2012-05-05 10:26:09 · 15757 阅读 · 0 评论 -
批量SQL之 BULK COLLECT 子句
BULK COLLECT 子句会批量检索结果,即一次性将结果集绑定到一个集合变量中,并从SQL引擎发送到PL/SQL引擎。通常可以在SELECT INTO、FETCH INTO以及RETURNING INTO子句中使用BULK COLLECT。本文将逐一描述BULK COLLECT在这几种情形下的用法。 有关FORALL语句的用法请参考:批量SQL之 FORALL 语句 一、BULK COL原创 2012-05-08 11:45:18 · 35271 阅读 · 4 评论 -
PL/SQL 集合的方法
PL/SQL中提供了常用的三种集合联合数组、嵌套表、变长数组,而对于这几个集合类型中元素的操作,PL/SQL提供了相应的函数或过程来操纵数组中的元素或下标。这些函数或过程称为集合方法。一个集合方法就是一个内置于集合中并且能够操作集合的函数或过程,可以通过点标志来调用。本文主要描述如何操作这些方法。一、集合类型提供的方法与调用方式1、集合的方法与调用方式 EXISTS 函数EXI原创 2012-05-02 20:52:48 · 6956 阅读 · 0 评论 -
PL/SQL 集合的初始化与赋值
对于集合类型,与单一的数据类型相比较而言,应该以一个整体的观念来考虑集合,即是一批类型相同的数据组合而非单一的数据。因此集合类型集合的声明、赋值、初始化较之单一类型而言,有很大的不同。尤其是嵌套表与变长数组,在赋值之前必须先初始化。当嵌套表和变长数组在声明时,它们都会自动地被设置成NULL值。也就是嵌套表和变长数组中集合不存在任何元素,并不是针对它所拥有的元素。可以使用系统定义的与集合类型同名的函原创 2012-05-01 16:15:47 · 14317 阅读 · 2 评论 -
PL/SQL 联合数组与嵌套表
通常情况下,在PL/SQL中,处理单行单列的数据可以使用标量变量,而处理单行多列的数据则使用PL/SQL记录是不错的选择。单列多行数据则由联合数组或嵌套表来完成,其特点是类似于单列数据库表。在Oracle 9i 之前称为PL/SQL索引表,9i 之后称之为联合数组。嵌套表也是集合类型中的一种,下面分别介绍这两种集合数据类型的使用方法。 一、联合数组1、联合数组的特性 类似于一张简单的SQL表,原创 2012-03-20 10:32:58 · 14513 阅读 · 0 评论 -
当心 CREATE TABLE AS
对 DBA 而言,CREATE TABLE AS 可谓是家常便饭,顺手拈来。需不知该方式虽然简单,但疏忽也容易导致意想不到的问题。笔者前阵子就碰上了这样的事情。由于是对原表进行克隆,且数据存储在不同的表空间,因此毫不犹豫地使用了CREATE TABLE AS,结果在运行package时,error...--1、非空约束遗失-->使用create table as 来创建对象scott@CNMM原创 2012-03-16 17:32:41 · 15200 阅读 · 0 评论 -
ORA-06502 assigning values from SQL to PL/SQL variables
最近SQL查询返回的结果给PL/SQL变量出现ORA-06502错误。这个错误的描述是ORA-06502: PL/SQL: numeric or value error: character string buffer too small. 显而易见的是字符变量定义的长度不够,加到20,到100,继续06502,汗,咋回事呢?1、问题描述 --出现问题是在一个package里,有两个参数游标原创 2012-12-20 10:04:05 · 4352 阅读 · 0 评论 -
Linux/Unix shell sql 之间传递变量
灵活结合Linux/Unix Shell 与SQL 之间的变量传输,极大程度的提高了DBA的工作效率,本文针对Linux/Unix shell sql 之间传递变量给出几个简单的示例以供参考。 Linux/Unix 下调用SQL,RAMN 请参考:Linux/Unix shell 脚本中调用SQL,RMAN脚本 一、示例1、shell变量接受sql返回值之方式一oracle@SZD原创 2012-09-14 11:04:04 · 16323 阅读 · 0 评论 -
Linux/Unix shell 脚本中调用SQL,RMAN脚本
Linux/Unix shell脚本中调用或执行SQL,RMAN 等为自动化作业以及多次反复执行提供了极大的便利,因此通过Linux/Unix shell来完成Oracle的相关工作,也是DBA必不可少的技能之一。本文针对Linux/Unix shell脚本调用sql, rman 脚本给出了相关示例。 一、由shell脚本调用sql,rman脚本1、shell脚本调用sql脚本#首先编辑sql原创 2012-09-11 10:00:07 · 22604 阅读 · 1 评论 -
PL/SQL 游标变量
游标变量与游标相似,有其共性,也有其不同点。就其共性来说两者都是指向多行查询的结果集中的当前行。都要经历声明,打开,检索与关闭的过程。所不同的是游标与游标变量类似于常量与变量。游标是静态的,而游标变量是动态的,因为游标变量并不与某个特定的查询相绑定。所以,游标变量可以打开任何类型兼容的查询。其次可以将游标变量作为参数传递给本地和存储子程序。本文主要描述游标变量的使用。 一、什么是游标变量 显原创 2012-06-01 15:19:56 · 8049 阅读 · 1 评论 -
CASE语句与CASE表达式
case语句与case表达式是plsql流程控制的重要组成部分,尽管其使用方法较为简单,但容易混淆。本文将描述case语句与case表达式并给出演示以便于更好理解两者的异同及使用时的注意事项。一、简单case语句-->语法CASE SELECTORWHEN EXPRESSION 1 THEN STATEMENT 1;WHEN EXPRESSION 2 THEN STATEMENT 2;.原创 2012-03-10 17:20:46 · 10411 阅读 · 0 评论 -
SQL基础-->数据库事务(TRANSACTION)
本文描述了Oracle中的事务及事务的ACID属性,同时也讲述了COMMIT,ROLLBACK,SAVEPOINT等的使用。原创 2010-07-06 21:21:00 · 14989 阅读 · 2 评论 -
PL/SQL-->UTL_FILE包的使用介绍
在PL/SQL中,UTL_FILE包提供了文本文件输入和输出互功能。也就是说我们可以通过该包实现从操作系统级别来实现文件读取输入或者是写入到操作系统文件。通过该包也可以将其他系统的数据加载到数据库中。如加载web服务器日志,用户登录数据库日志乃至Oracle日志文件等等。本文主要描述了UTL_FILE的功能以及通过实例演示并理解这个包下相关过程函数的用法。 1、UTL_FILE介绍 a、实现基原创 2013-12-16 10:18:48 · 20224 阅读 · 0 评论 -
PL/SQL --> 动态SQL调用包中函数或过程
动态SQL主要是用于针对不同的条件或查询任务来生成不同的SQL语句。最常用的方法是直接使用EXECUTE IMMEDIATE来执行动态SQL语句字符串或字符串变量。但是对于系统自定义的包或用户自定的包其下的函数或过程,不能等同于DDL以及DML的调用,其方式稍有差异。如下见本文的描述。 有关动态SQL的描述,请参考: PL/SQL --> 动态SQL原创 2013-09-17 17:28:40 · 8541 阅读 · 0 评论 -
PL/SQL --> 函数
函数通常用于返回特定的数据。其实质是一个有名字的PL/SQL块,作为一个schema对象存储于数据库,可以被反复执行。函数通常被作为一个表达式来调用或存储过程的一个参数,具有返回值……原创 2010-12-11 14:24:00 · 11472 阅读 · 1 评论 -
使用 DBMS_REPAIR 修复坏块
对于Oracle数据块物理损坏的情形,在我们有备份的情况下可以直接使用备份来恢复。对于通过备份恢复,Oracel为我们提供了很多种方式,冷备,基于用户管理方式,RMAN方式等等。对于这几种方式我们需要实现基于数据库以及文件级别的恢复。RMAN同时也提供了基于块介质方式的恢复。也就是说我们根本不需要还原数据文件,而是直接从备份文件基于块来提取以实现联机恢复。可参考基于RMAN实现坏块介质恢复(blo原创 2013-08-30 17:03:22 · 9669 阅读 · 4 评论 -
dbms_lock.relase 无法释放自定义的锁?
最近开发人员说使用dbms_lock.allocate_unique自定义的锁在使用dbms_lock.relase无法释放,下面来个演示的例子来看看到底怎么一回事? 1、演示锁不能释放的情形 --演示环境goex_admin@GOBO1> select * from v$version where rownum<2;BANNER-----------------------原创 2013-06-20 17:50:13 · 5303 阅读 · 0 评论 -
SQL*Plus copy 命令处理大批量数据复制
对于数据库表级上的数据复制,我们最常用的是CREATE TABLE AS(CTAS)..方式。其实在SQL*Plus下面copy命令可以完成同样的工作,而且更加出色,性能也比较优异。更突出的是支持跨平台,异构数据库之间的数据复制。copy命令可以类似地完成一些stream完成的功能,尽管copy命令与stream方式不是一个重量级。下面描述copy命令的主要用法。 1、copy命令的帮助信息sco原创 2013-05-02 09:36:19 · 7761 阅读 · 0 评论 -
SQL*Plus break与compute的简单用法
在SQL*Plus提示符下输出求和报表,我们可以借助break与compute两个命令来实现。这个两个命令简单易用,可满足日常需求,其实质也相当于在编写SQL语句时使用分组及聚合函数。不同的是在报表中的分组的最下方或整个报表的最下方我们可以得到如sum,avg以及自定义的聚合字样。见下面的演示。 1、break的用法a、获取帮助信息 --如果帮助不可用,需要安装SQL*Plus help,参考原创 2013-04-27 10:38:11 · 6587 阅读 · 0 评论 -
SQL*PLus 帮助手册(SP2-0171)
对于经常在SQL*Plus 下工作的大师们而言,总是时不时查询SQL*Plus的帮助命令。着实太多了,记不住。SQL*Plus下直接提供了help命令来帮助描述所有命令的用法。嘎嘎,再也不用查SQL*Plus reference了。对于Oracle 10g缺省情况下,SQL*Plus的help手册并没有被安装,需要手动安装。Oracle 10/11g下采用相同的安装方式,下面来描述一下help的安原创 2013-04-26 08:01:00 · 5778 阅读 · 0 评论 -
sqlplus spool 到动态日志文件名
通过sqlplus的spool功能我们将数据库日常运维的结果输出到日志文件,而有时候则需要定时输出,为避免日志文件名的重复,我们可以将输出的日志文件名采用动态命名方式来实现。本文则是针对这个问题给出一个示例,供大家参考。 1、生成动态日志文件的脚本 robin@SZDB:~> more dynamic_logfile_name.sql--+ =========================原创 2013-03-15 11:26:31 · 8332 阅读 · 0 评论 -
SQL*Plus 执行脚本时传递参数(@script_name var1,var2)
在使用sqlplus执行sql脚本时,经常碰到向脚本传递参数的情形。类似于shell脚本的参数传递,我们同样可以向sql脚本传递参数,其方法是脚本后面直接跟多个连续的参数并以空格分开。本文描述该内容并给出示例。1、SQLPlus 的帮助信息 下面的帮助信息是关于sqlplus调用带参脚本的说明 sqlplus -H is: @|[.] [ ...] R原创 2013-03-06 13:05:16 · 10064 阅读 · 0 评论 -
PL/SQL变长数组
PL/SQL变长数组时PL/SQL集合数据类型中的一种,其使用方法与PL/SQL嵌套表大同小异,唯一的区别则是变长数组的元素的最大个数是有限制的。也即是说变长数组的下标固定下限等于1,上限可以扩展。下面给出具体的描述及其使用方法。 一、变长数组语法 TYPE type_name IS {VARRAY | VARYING ARRAY} (size_limit) OF -->type_原创 2012-03-23 15:47:29 · 12688 阅读 · 2 评论 -
查看PL/SQL编译时的错误信息
编译无效对象是DBA与数据库开发人员常见的工作之一。对于编译过程中的错误该如何去捕获,下面给出两种捕获错误的方法。一、当前数据库版本信息及无效对象 1、查看当前数据库版本 SQL> select * from v$version;原创 2011-10-28 09:27:16 · 17578 阅读 · 0 评论 -
SQL 基础-->创建和管理表
本文介绍了创建表(create table)、创建临时表、修改表(alter table)表的管理等。如添加列,修改列的长度,修改列的数据类型,删除列,将列置为unused。查看表、列的相关信息,truncate table,删除表等。原创 2010-06-23 14:17:00 · 6006 阅读 · 0 评论 -
SQL 基础--> ROLLUP与CUBE运算符实现数据汇总
介绍了使用ROLLUP与CUBE运算符实现数据汇总。原创 2010-06-01 17:16:00 · 13183 阅读 · 1 评论 -
SQL 基础--> 视图(CREATE VIEW)
--================================-- SQL 基础--> 视图(CREATE VIEW)--================================ 视图: 从表中抽出来的逻辑上相关的数据集合 视图其实就是一条查询SQL语句,用于显示一个或多个表或其它视图中相关数据。 视图将查询的结果作为一个表来使用,因此视原创 2010-05-28 12:52:00 · 16564 阅读 · 2 评论 -
SQL基础-->层次化查询(START BY ... CONNECT BY PRIOR)
--======================================================--SQL基础-->层次化查询(START BY ... CONNECT BY PRIOR)--====================================================== 层次化查询,即树型结构查询,是SQL中经常用到的功能之一,原创 2010-05-22 20:29:00 · 41172 阅读 · 4 评论 -
SQL 基础--> 集合运算(UNION 与UNION ALL)
--=============================================-- SQL 基础--> 集合运算(UNION 与UNION ALL)--============================================= 集合运算操作符可以将两个或多个查询返回的行组合起来,即集合属于纵向连接运算 一、常用的集合运算符原创 2010-05-20 16:40:00 · 8911 阅读 · 1 评论 -
SQL 基础--> 子查询
--=========================--SQL 基础--> 子查询--========================= /*一、子查询 子查询就是位于SELECT、UPDATE、或DELETE语句中内部的查询 二、子查询的分类 单行子查询 返回零行或一行 多行子查询 返回一原创 2010-05-14 15:49:00 · 23261 阅读 · 1 评论 -
SQL基础--> 约束(CONSTRAINT)
本文介绍了几类不同的约束以及在不同的情况下来实现约束(CONSTRAINT),比如建表时如何创建约束,已经存在的表的约束的添加、删除、启用等等。原创 2010-07-03 22:28:00 · 87887 阅读 · 9 评论 -
SQL基础--> 数据处理(DML、RETURNING、MERGE INTO)
本文介绍了SQL中常用的数据处理DML、RETURNING、MERGE INTO等相关用法。原创 2010-07-04 11:12:00 · 6179 阅读 · 0 评论 -
SQL基础-->多表查询
--==========================--SQL基础-->多表查询--==========================/*一、多表查询 简言之,根据特定的连接条件从不同的表中获取所需的数据 笛卡尔集的产生条件: 省略连接条件 连接条件无效 第一个表中的所有行与第二个表中的所有行相连接原创 2010-05-06 14:08:00 · 126485 阅读 · 4 评论