SELECT * from ALL_SOURCE
where TYPE='PROCEDURE' AND TEXT LIKE
'%0997500%';
--查询ALL_SOURCE中,(脚本代码)内容与0997500模糊匹配的类型为PROCEDURE(存储过程)的信息。
根据GROUP
BY TYPE
该ALL_SOURCE中只有以下5种类型
1 FUNCTION
2 JAVA
SOURCE
3 PACKAGE
4 PACKAGE BODY
5 PROCEDURE ......
SELECT * from ALL_SOURCE
where TYPE='PROCEDURE' AND TEXT LIKE
'%0997500%';
--查询ALL_SOURCE中,(脚本代码)内容与0997500模糊匹配的类型为PROCEDURE(存储过程)的信息。
根据GROUP
BY TYPE
该ALL_SOURCE中只有以下5种类型
1 FUNCTION
2 JAVA
SOURCE
3 PACKAGE
4 PACKAGE BODY
5 PROCEDURE ......
视图查询中怎样将原定于如性别sex 这样的字段,字段值为0,1这样的int类型值,查询时直接返回varchar
型的字符‘男’,‘女’以便于我们读取呢?
有人会想到if …else…这样的语句,可是怎么加,都不知道加哪里,因为总是会出错。其实sql中有一个函数能解决这样的查询读取值的问题。那就是下
面要介绍的 Case 函数了。
Case 是计算条件列表并返回多个可能的结果表达式之一。
Case 有两种格式:
简单 Case 函数将某个表达式与一组简单表达式进行比较以确定结果。
Case 搜索函数计算一组布尔表达式以确
定结果。
两种格式均支持可选的 ELSE 参数。
语法
1. CASE
input_expression
WHEN
when_expression
THEN
result_expression
[
...n
] [ELSE else_result_expression
] END
2. CASE
WHEN
Boolean_express ......
1.避免在where子句中对字段施加函数,这样将导致索引失效,比如:
select * from user where
to_char(create_time,'yyyymmdd')='20090101';
原因:在建立index的时候是根据字段来建立的,也就是说oracle在inidex的时候是索引的字段的值,如果提供给oracle的是一个需要经过函数处理的比较,oracle就没办法通过索引中的索引键值来进行相应的比较,所以就不会走到索引上
2.避免在SQL中发生隐式类型转换
如:
select * from user where id='123';
--这里ID是NUMBER型,会造成oracle将id先转换成varchar类型再比较,造成索引失效
select * from user where
gmt_create =
to_char('2000-01-01','yyyy-mm-dd');
--这里gmt_create是date型,会造成oracle将gmt_create先转换成varchar类型再比较,造成索引失效
3.全模糊查询无法使用INDEX,应当尽可能避免
select * from user where name like '%value%';
4.如果使用Oracle数据库,使用Oracle的外连接,而不是标准的外连接语法
正确:select * from user1 a,user2 b where a.id=b.id(+);
错误:select * from user1 a left join on user2 b a.id=b.id;
5.分页语句必须使用三层嵌套的写法
select * from
(selec ......
复制表的结构
select * into newtable from oldtable where 1<>1
复制表达额内容
insert into new table select *(列名) from oldtable
datediff函数用法
作用
返回两个日期之间的间隔。
语法
DATEDIFF ( date-part, date-expression1, date-expression2 )
date-part :
year | quarter | month | week | day | hour | minute | second | millisecond
参数
date-part 指定要计算其间隔的日期部分。
&nbs ......
本文从SQL存储过程的概念,优点,语法,创建技巧,调用等多方面介绍了SQL存储过程。
一、SQL存储过程的概念,优点及语法
定义:将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来, 那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execute,即可自动完成命令。
那么存储过程与一般的SQL语句有什么区别呢?
存储过程的优点:
1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
2.当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。
3.存储过程可以重复使用,可减少数据库开发人员的工作量
4.安全性高,可设定只有某此用户才具有对指定存储过程的使用权
存储过程的种类:
1.系统存储过程:以sp_开头,用来进行系统的各项设定.取得信息.相关管理工作,
如 sp_help就是取得指定对象的相关信息
2.扩展存储过程 以XP_开头,用来调用操作系统提供的功能
以下为引用的内容:
......
连接到数据库服务器通常由几个需要很长时间的步骤组成。 必须建立物理通道(例如套接字或命名管道),必须与服务器进行初次握手,必须分析连接字符串信息,必须由服务器对连接进行身份验证,必须运行检查以便在当前事务中登记,等等。
实际上,大多数应用程序仅使用一个或几个不同的连接配置。 这意味着在执行应用程序期间,许多相同的连接将反复地打开和关闭。 为了使打开的连接成本最低,ADO.NET 使用称为连接池的优化方法。
连接池减少新连接需要打开的次数。 池进程保持物理连接的所有权。 通过为每个给定的连接配置保留一组活动连接来管理连接。 只要用户在连接上调用 Open,池进程就会检查池中是否有可用的连接。 如果某个池连接可用,会将该连接返回给调用者,而不是打开新连接。 应用程序对该连接调用 Close 时,池进程会将连接返回到活动连接池集中,而不是真正关闭连接。 连接返回到池中之后,即可在下一个 Open 调用中重复使用。
只有配置相同的连接可以建立池连接。 ADO.NET 同时保留多个池,每个配置一个池。 连接由连接字符串以及 Windows 标识(在使用集成的安全性时)分为多个池。 还根据连接是否已在事务中登记来建立池连接。
池连接可以显著提高应用 ......