0
点赞
收藏
分享

微信扫一扫

oracle的使用


文章目录

  • ​​登录,切换用户​​
  • ​​连接数据库​​
  • ​​切换用户(表空间)​​
  • ​​查看当前数据库(实例名):​​
  • ​​表结构,列结构​​
  • ​​查看所有表名​​
  • ​​查看字段类型,长度,默认值(不带注释)​​
  • ​​查看字段注释​​
  • ​​导出数据字典​​
  • ​​视图结构,列结构​​
  • ​​查看所有视图​​
  • ​​v$ 和 v_$的区别​​
  • ​​查视图字段,类型,长度,默认值​​
  • ​​视图列注释​​
  • ​​dict字典表​​
  • ​​rownum限定行数​​
  • ​​查看前10条​​
  • ​​查看5-10条​​
  • ​​其他​​
  • ​​查看所有表空间(用户)​​
  • ​​查看数据的文件位置​​
  • ​​解锁用户​​
  • ​​是否区分大小写​​


mysql中常说的库,相当于oracle的表空间。

登录,切换用户

连接数据库

sqlplus / as sysdba;   # 匿名用户作为sysdba登录
sqlplus guanyu/1234 # 实际用户登录

切换用户(表空间)

conn root/1234 ; -- 连接用户(也就是库)
-- 查看当前库(表空间)
show user;
select user from dual;
select * from user_users;

查看当前数据库(实例名):

用处并不大,一般切换用户就能到所属库

show parameter instance_name;  -- 这个其实会显示所有有权限的库,一般用户只显示自己的所属库
select name from v$database;

表结构,列结构

查看所有表名

user_tables常用场景:
查看是否有某个表名, table_name
统计库的总行数, num_rows字段 求和

select t.table_name,t.num_rows 
from user_tables t ; -- from tab也可 tab是user_tables的视图

desc dba_data_files; -- 这个是命令,不是sql

查看字段类型,长度,默认值(不带注释)

user_tab_columns 这个用处比较大,查表,查列,字段,长度,默认值等都在这里

select table_name,column_name,data_type,data_length,data_default 
from user_tab_columns where table_name ='t_user';

查看字段注释

user_col_comments(只有三个字段)应用场景:
查看某表的列注释
其他的时候推荐user_tab_columns,字段类型,长度等都在这里。

select 
table_name,
column_name,
comments
from user_col_comments where table_name like '%t_user%';

导出数据字典

有的时候客户要求导出字典表结构,用下面的语句可以满足一般要求:

select t.table_name,t.column_name,
case
-- 文档中常见的字段类型为varchar(32),number(10,2)这样的类
-- 如果是number类型还要考虑精度,data_type,data_precision,data_scale
WHEN t.data_type ='NUMBER'and t.data_precision is not null and t.data_scale is not null THEN
t.data_type||'('||t.data_precision||','||t.data_scale||')'
else t.data_type||'('||t.data_length||')'
end as data_type
,t.nullable,
t2.comments
from user_tab_columns t
-- tab_columns表里面没有注释,所以要关联col_comments表
left join
user_col_comments t2
on t.table_name =t2.table_name and t.column_name =t2.column_name
order by t.table_name

视图结构,列结构

视图和表类似

查看所有视图

查表用*_tables,查视图用*_views。 而且视图最好dba_views,因为user_views太少了。视图一般都是系统级的。

select * from dba_views where view_name like '%$SESSION%'

v$ 和 v_$的区别

作用相同。

select * from sys.v$session;
select * from v$session.;

查视图字段,类型,长度,默认值

视图的列都也是放在*_tab_columns里面,而且都是table_name来查询。但要注意:

1. 最好用dba_tab_columns,不要用user_tab_columns。
2. 视图名要大写,而且最好模糊搜索。
因为视图名跟我想象的可能不一样,如查询中用:
select * from v$session
但是实际视图名是V_$SESSION。

示例语句:

select table_name,column_name,data_type,data_length,data_default 
from dba_tab_columns where table_name like '%$SESSION%';

视图列注释

和表一样。注意用dba_col_comments, 视图名大写。
其实这个没用,因为视图一般没有列注释。

select * from dba_col_comments where table_name  like '%$SQL%'

dict字典表

看了这么多,大家肯定要问,这些表视图,列视图都有哪些,能不能从全局的角度来看下,要不用到一个找一个太被动。
必须能,这些信息都在dict字典表,如sql:

# dict表只有2列table_name,comments
select TABLE_NAME,COMMENTS from dict

这个字典表还是很有用的。

rownum限定行数

查看前10条

select * from sys_dict where rownum<11;

查看5-10条

oracle中的rownum不能使用大于>,所以sql如下:

(select * from sys_dict where rownum<10 )
minus
(select * from sys_dict where rownum<5 );

其他

查看所有表空间(用户)

dba_tablespaces 有表空间名,block,bytes等信息。

select * from dba_tablespaces;

查看数据的文件位置

DBA_DATA_FILES 有文件位置,表空间名,block,bytes等信息。

select * FROM DBA_DATA_FILES;

解锁用户

如果一个某个用户登录请求太频繁,会被锁住,这是一种保护机制。
解锁办法,使用system用户登录,或者使用dba用户登录:

alter user root identified by root 111111 unlock;

是否区分大小写

oracle是区分大小写的。
那么为什么我表名小写还能查询出来?
例如:

select * from test;

发现确实可以查询出来。

那么这条能查出来吗?

select *  from user_col_comments where table_name = 'test';

差不出来的。因为存的是大写的TEST。

所以,如果是作为sql主体可以小写,如果作为字符串,那么需要大写。

oracle为什么要区分大小写。
因为只要你不使用双引号表示区分大小写, ORACLE 会默认把你写的脚本全部转换为大写的。


举报

相关推荐

0 条评论