前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Oracle数据库的奇技淫巧

Oracle数据库的奇技淫巧

作者头像
Steve Wang
发布2022-05-10 09:06:09
3330
发布2022-05-10 09:06:09
举报
文章被收录于专栏:从流域到海域从流域到海域

这篇博客是Oracle 数据库使用过程的手记,会永久不定时更新一些新的关于Oracle数据库使用的技巧,特别是不同于SQL Server和My SQL的奇技淫巧。 注:数据库版本:Oracle 11g 数据库管理软件:PL/SQL Developer (去IOE指的是,减少使用甚至完全不使用IBM小型机、Oracle数据库、EMC存储设备,除开技术方面的原因,更多是政治方面的考量,与政府机构采用华为的设备而不是思科的设备相类似。)

0. 说明 Oracle不区分大小写,存储在数据库里的数据全部为大写,不管你插入时输出的语句是大写还是小写。在操作任何表时,尤其是使用delete语句或者drop语句,最后使用数据库名.表名的形式,这样可以保证操作准确,不会误删。 1. 表别名 即为关系表起一个简略的名字,方便使用,别名紧跟from后的表名。在表名很长需要查询的内容很多时特别适用。

代码语言:javascript
复制
select * from table_name (标准查询语句)
select t.* from table_name t

2. rowid 在PL/SQL里,只有在查询语句里加上rowid,才能在图形界面编辑数据行并保存。

代码语言:javascript
复制
select t.*,rowid from table_name t
select t.*,t.rowid from table_name t //两者等价

3.rownum 不同于SQL Server,Oracle没有TOP关键字,许多跟查询结果行数有关的操作依赖rownum来实现。

代码语言:javascript
复制
--查询前1000行:
select t.* from table_name t where rownum < 1001
select t.* from table_name t where rownum <=1000
//(推荐使用第一行的方法,<=在数据库中的执行时间甚至有可能是<的两倍)

--查询第11到第20共10条数据
select * from (select t.*,rownum r from cfg_id_generator t) where r >= 11 and r <= 20
//(r是rownum的别名,我尝试过不使用别名,不使用别名无法查询到数据)

--查询最新创建的前10条记录
select * from (select t.* from table_name t order by create_date desc) where rownum < 11

--查询前10条记录并按时间排序
select t.* from table_name t where rownum < 11 order by create_date desc
//比较上下有何不同的地方?
//请注意,如果排序依据是主键,上下两种方法结果是相同的 仅在该情况下 下句可以替换上句 否则两者的操作逻辑是不一样的

4. 查询字段值在特定范围内的数据(通用)

代码语言:javascript
复制
select t.*,rowid from table_name t where id in (10000,11000);--只能查询前后两行

select t.*,rowid from table_name t where id >= 10000 and cfg_task_id <= 11000;

select t.*,rowid from table_name t where id between 10000 and 11000

5. 新建Sequence

代码语言:javascript
复制
create sequence BOOK$SEQ  //表名$SEQ
minvalue 1
maxvalue 99999999999
start with 10
increment by 1
cache 200;

6. 格式转换

代码语言:javascript
复制
//日期格式转换
to_date(‘2017-7-26’, ‘yyyy-mm-dd’);    //使用insert语句插入日期格式也使用这一格式
to_date('2017-8-1 16:36:30', 'YYYY-MM-DD HH24:MI:SS');

//字符格式转换
Declare i int;
to_char(i);

7. 循环建表语句脚本(建立从table_test_0 到 table_test_49一共50张表):

代码语言:javascript
复制
begin
	declare i int;
		tableName varchar2(50);
		sqlString varchar2(1000);
	begin
		i := 0;
		while i < 50 loop
			begin
				tableName := ‘table_test_’ || to_char(i);
				i := i + 1;

				sqlString := ‘create table’ || tableName ||
				‘(
					User_id          number(20),
					User_name       varchar(20),
					Create_Date	    Date,
                )’ ;
                Execute immediate sqlString;
			end;
		end loop;
	end;
end; 

8.查看被锁的表和解锁

代码语言:javascript
复制
--查看被锁的表
select object_name, machine, s.sid, s.serial#
from gv$locked_object l, dba_objects o, gv$session s
where l.object_id = o.object_id
and l.session_id = s.sid;
--对表进行解锁
alter system kill session 'sid, serialid'

参考资料: http://soft.chinabyte.com/database/27/11420027.shtml

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-07-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档