- 博客(31)
- 资源 (8)
- 收藏
- 关注
原创 Oracle SQL 优化精萃
-- Start-- 更多参见:Oracle 精萃-- 声明:转载请注明出处-- Last edited on 2015-06-29-- Created by ShangBo on 2015-06-29-- End
2015-06-29 13:01:56 3335
原创 Oracle 短路评估
-- StartOracle 按照从左到右的顺序评估条件表达式,一旦确定结果就停止后面的评估,所以我们应该尽量将轻量级的条件放在最左边。IF (x > 10) OR function(parameter) THEN-- 更多参见:Oracle SQL 优化精萃-- 声明:转载请注明出处-- Last edited on 2015-06
2015-06-30 14:58:13 1238
原创 Oracle 字符串处理
-- Start如果你需要处理复杂字符串,尽量不要自己编写函数,Oracle 提供了大量的字符串函数供我们使用。点击此处察看 Oracle 支持哪些函数。如果还是不能满足你的要求,我们还可以使用正则表达式。可以说正则表达式几乎没有处理不了的字符串问题。如果你还不知道什么是正则表达式,点击此处(正则表达式精萃),如果你不知道如何在 Oracle 中使用正则表达式, 点击此处察看如
2015-06-30 14:43:01 725
原创 Oracle 数据类型使用注意事项
-- StartOracle 支持 NUMBER,BINARY_FLOAT, BINARY_DOUBLE 等数值数据类型,NUMBER 更精确,BINARY_FLOAT 或 BINARY_DOUBLE 更高效,所以如果有可能,尽量优先使用 BINARY_FLOAT 或 BINARY_DOUBLE此外,PL/SQL 还支持好多它们的子类型,有些子类型是由约束的,如不允许 NULL,尽量不
2015-06-30 14:26:24 1006
原创 Oracle 尽量少用循环语句
-- Start下面是一个使用循环语句删除表记录的例子。DECLARE TYPE NumList IS TABLE OF NUMBER; emps NumList := NumList(10, 30, 70);BEGIN FOR i IN emps.FIRST..emps.LAST LOOP DELETE FROM employees WHERE employee
2015-06-30 13:49:54 1170
原创 Oracle 指定子程序 OUT 或 IN OUT 参数为引用传递
-- Start通常,子程序的 OUT 或 IN OUT 参数为值传递,为了防止程序可能发生的异常,Oracle 将它保存到临时变量中,当程序正常退出时,Oracle 把临时变量中值赋给实际参数,异常退出时,保持实际参数不变。当OUT 或 IN OUT 参数返回大批量数据时,由于使用了临时变量导致占用大量内存,这时我们可以在参数的后面加上 NOCOPY 来提示Oracle使用引用传递.
2015-06-30 11:06:27 2018
原创 Oracle 避免在查询中使用函数
-- Start一个查询可能要搜索上百万行数据,在查询中使用函数就可能被调用上百万次,这会严重影响性能,下面是一个简单的例子。-- 创建表CREATE TABLE Department ( Department_Id NUMBER(9,0), Department_Name VARCHAR2(40));CREATE TABLE Employee( Em
2015-06-29 16:32:01 1786
原创 Oracle 动态 SQL
-- Start如果你还不知道什么是动态 SQL,请参考PL/SQL 动态 SQL如果有可能,尽量不要使用动态 SQL,动态 SQL需要运行时编译,影响性能。如果一定要使用动态 SQL,Oracle 推荐我们优先使用 EXECUTE IMMEDIATE,它要比 DBMS_SQL 性能更好。-- 更多参见:Oracle SQL 优化精萃-- 声明:转载请注
2015-06-29 14:28:40 714
原创 Oracle 子程序内联
-- Start如果子程序 A 调用 B,内联可以把 B 的代码合并到 A 中,从而减少子程序调用,提高性能,下面是一个简单的例子。-- 子程序 APROCEDURE A ISBEGIN -- 指定下面的子程序 B 内联 PRAGMA INLINE (B, 'YES') B(1); -- 注意此处的子程序不会内联 B(2);END A; -- 子程序 B
2015-06-29 14:15:08 1099
原创 Oracle 行转列
-- Start在网上看到这样一个问题.班级 科目 分数1 语文 88001 数学 84201 英语 78122 语文 87152 数学 85112 英语 8512要求转换成下面这样的结果.班级 语文 数学 英语1 8800 8420 78122 8715 8511 8512这是一个非常经典的 4
2015-06-23 11:03:32 2531 1
原创 Oracle 如何写出高效的 SQL
-- Start要想写出高效的SQL 语句需要掌握一些基本原则,如果你违反了这些原则,一般情况下SQL 的性能将会很差。1. 减少数据库访问次数连接数据库是非常耗时的,虽然应用程序会采用连接池技术,但与数据库交互依然很耗时,这就要求我们尽量用一条语句干完所有的事,尤其要避免把SQL 语句写在循环中,如果你遇到这样的人,应该毫不犹豫给他两个耳光。2. 避免在有索引的字段上使用
2015-06-23 10:51:15 2058
原创 Oracle 分页查询
-- Start提起分页查询,除了那些还不知道什么是分页的人,大多数人的都会想到一个词,那就是LIMIT,不过很可惜,Oracle 不支持这个关键字,那么Oracle 的分页查询到底该怎么写呢?只要你学会了分析函数,分页查询是非常简单的。即使你不会分析函数,按照下面的SQL 照猫画虎也可以,如下:SELECT * FROM( SELECT B.*, ROW_NUMBER() OVE
2015-06-19 17:43:34 1600
原创 Oracle 临时集合
-- StartSELECT * FROM ;看到上面的语句了吗?这是我们在熟悉不过的一条语句,我们中的大多人学习SQL 正是从这条语句开始的。所以大多数人认为FROM 语句后只能接一个表或视图(或者压根就没多想),有这种想法的人我非常能理解,因为我曾经也是这其中的一员。其实FROM 后面可以接任何集合(表)。说到这,关于集合和表,我特别想多少几句。SQL 的理论基础是数学中的集合理论,所
2015-06-19 17:35:32 1204
原创 Oracle WITH语句的使用
-- Start说起 WITH 语句,除了那些第一次听说 WITH 语句的人,大部分人都觉得它是用来做递归查询的。那只是它的一个用途而已,其实,它是用来定义临时集合的。下面是一个简单的例子。CREATE TABLE EMPLOYEE (NAME VARCHAR2(20) NOT NULL,---姓名GENDER NUMBER(9,0),---性别(1、男2、女)BIR
2015-06-19 17:21:08 4394 1
原创 Oracle 数据类型转换
-- StartOracle 为每种数据类型都提供了相应的函数,一般情况下它们之间的相互转换是非常简单的,Oracle 提供的函数有:CAST 将一种类型转成另一种类型TO_DATE 将字符串转成 DATETO_TIMESTAMP 将字符串转成 TIMESTAMPTO_TIMESTAMP_TZ
2015-06-19 16:23:11 7652 1
原创 Oracle 尽量避免在 SQL语句中使用 LIKE
-- Start前面,我们介绍了尽量避免在SQL语句的WHERE子句中使用函数,因为这样做会使该字段上的索引失效,影响SQL 语句的性能。基于同样的道理,我们也应该避免使用LIKE。考虑下面的情况:CREATE TABLE PEOPLE(NAME VARCHAR(20) NOT NULL,---姓名MYNUMBER VARCHAR(18)---身份证号码);现在要求你把
2015-06-19 14:21:35 2518
原创 Oracle 尽量避免在 SQL语句的WHERE子句中使用函数
-- Start在 WHERE 子句中应该尽量避免在列上使用函数,因为这样做会使该列上的索引失效,影响SQL 语句的性能。即使该列上没有索引,也应该避免在列上使用函数。考虑下面的情况:CREATE TABLE EMPLOYEE(NAME VARCHAR2(20) NOT NULL,---姓名REGISTERDATE TIMESTAMP---注册时间);现在要
2015-06-19 14:17:15 6940
原创 Oracle IN 与 DISTINCT
-- Start在开始本文之前,我们先看条SQL 语句,如下:SELECT FROM WHERE IN(SELECT DISTINCT FROM );怎么样?看上去是不是很熟悉,可能你曾经写过或者看到别人写过这样的语句,或者压根就没注意。上述语句想表达的意思是:去掉结果集中的重复值,然而却画蛇添足了。写出这样语句的人没有很好的领会 IN 的意图。其实IN只关心集合中有
2015-06-19 13:33:26 1562
原创 Oracle 采集样本数据
-- Start我们经常会遇到这样的情况,想看看某个表中的若干条数据,如10 条、20 条等。我们可以这么写:SELECT * FROM WHERE ROWNUM 不知道你注意到没有,以上这条语句无论你执行多少遍,结果集是不变的。那么我想每次随机的查询10 条记录看看,该怎么处理呢?可以使用下面的SQL:SELECT * FROM (SELECT * FROM ORD
2015-06-19 13:28:46 1704
原创 Oracle 在 ORDER BY 子句中加入主键或唯一键
-- StartORDER BY 子句非常简单,正因为简单,很多人不太在意,随意使用ORDER BY 子句很可能出现逻辑错误,考虑如下情况:CREATE TABLE STUDENT(STUDENT_ID NUMBER(9,0),---学号NAME VARCHAR(20) NOT NULL,---姓名BIRTHDAY DATE---生日);ALTER T
2015-06-19 12:40:21 2102
原创 Oracle 多字段查询
-- Start假设现在有如下表:CREATE TABLE EMPLOYEE(NAME VARCHAR2(20) NOT NULL,---姓名BIRTHDAY DATE,---生日DEGREE VARCHAR2(20));现在,要求你把生日是1980-8-8,学历是硕士的人找出来,很简单,我们可以这么写:SELECT * FROM EMPLOYEE W
2015-06-19 12:28:42 1987
原创 Oracle 相关子查询
-- Start我们先来看两个表的定义:--用户CREATE TABLE EMPLOYEE(USERID NUMBER(9,0) NOT NULL,---用户IDCOMPANYID NUMBER(9,0),---公司IDTELNO VARCHAR2(12)---用户电话);ALTER TABLE "EMPLOYEE" ADD CONSTRA
2015-06-19 12:13:08 6766 1
原创 Oracle 中删除数据
-- Start大家对如何删除数据都不陌生,我们习惯性的这么写:DELETE FROM WHERE ;其实这么写性能并不好,尤其是删除大量数据的时候,要想获得更好的性能,可以采用如下方式:DELETE FROM(SELECT * FROM WHERE );那如果要把一个表的所有数据都删除了,该怎么办?有人可能会说,这简单啊,把WHERE子句去掉不就可以了。回答
2015-06-18 17:22:23 1286 1
原创 Oracle UPDATE 语句
-- Start我估计,只要是知道SQL 语句的人都会用UPDATE 语句,可是大部分人不知道UPDATE 语句有两种写法,首先,考虑下面的情况:CREATE TABLE STUDENT(ID INT,---学号NAME VARCHAR(20) NOT NULL,---姓名BIRTHDAY DATE---生日);INSERT INTO STUDENT (ID,NAME,BIR
2015-06-18 17:10:31 26799 3
原创 Oracle INSERT 语句
-- Start--更多参见:Oracle SQL 精萃-- 声明:转载请注明出处-- Last edited on 2015-06-17-- Created by ShangBo on 2015-06-17-- End
2015-06-17 21:46:16 71354
原创 Oracle 在字符串中输入单引号或特殊字符
-- Start字符串是用单引号括起来的,如果想在字符串中输入单引号该怎么办呢?有两种方法。方法一:是用两个单引号代表一个单引号SELECT 'I''m Shangbo' FROM DUAL;方法二:使用 Oracle 特殊语法SELECT q'/I'm Shangbo/' FROM DUAL;--更多参见:Oracle SQL 精萃-- 声
2015-06-17 21:39:25 19013 1
原创 Oracle 连接字符串
-- Start如何将两个或多个字符串连接起来呢?Oracle 提供了两种方法,如下所示:方法1(利用运算符):SELECT 'A' || 'B' FROM DUAL;方法2(利用函数):SELECT CONCAT('A', 'B') FROM DUAL;一般来说,当要连接多个字符串的时候,使用运算符要简单一点。--更多参见:Oracle SQL
2015-06-17 21:32:10 3189
原创 Oracle 递归查询
Oracle 递归查询递归查询的一个典型的例子是对树状结构的表进行查询,考虑如下的情况:论坛首页--数据库开发----DB2------DB2 文章1--------DB2 文章1 的评论1--------DB2 文章1 的评论2------DB2 文章2----Oracle--Java 技术以上是一个论坛的典型例子,下面我们新建
2015-06-16 22:08:11 2729
原创 Oracle 格式化日期
-- Start所谓格式化日期指的是将日期转为字符串,或将字符串转为日期,下面几个函数可以用来格式化日期。TO_CHAR(datetime, 'format')TO_DATE(character, 'format')TO_TIMESTAMP(character, 'format')TO_TIMESTAMP_TZ(character, 'format')我们先来看看通过下面的
2015-06-15 13:24:37 82571 1
原创 Oracle 格式化数字
-- Start所谓格式化数字指的是将数字转为字符串,或将字符串转为数字,下面几个函数可以用来格式化数字。TO_CHAR(number, 'format')TO_NUMBER('character', 'format')TO_BINARY_FLOAT('character', 'format')TO_BINARY_DOUBLE('character', 'format')我们
2015-06-12 16:31:42 25823
原创 基金
-- Start什么是基金基金是一种投资工具,把众多投资人的钱集中起来,由银行托管,由基金管理公司管理和运营,投资股票或债券等实现收益。开放式和封闭式基金开放式基金可以随时认购或赎回,基金的总份额会随着认购或赎回而变化。封闭式基金不可以随时认购或赎回,到期才能赎回,但你可以转让给其他投资人,基金的总份额保持不变。股票型,债券型和混合型基金
2015-06-11 23:21:52 1460
Korn Shell 精萃
2015-12-20
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人