Oracle自带系统表与常用的SQL语法

1、 Oracle的系统常用表

  • 场景:用最多的场景如: 代码生成器开发或写SQL脚本语句创建表或索引、视图、写存储过程、改变表结构(扩展字段,修改字段,修改字段长度)等。
表名 表描述(作用)
user_tables 可查询当前用户的表
all_tables 可查询所有用户的表
dba_tables 可查询包括系统表在内的所有表
user_users 描述当前用户
all_users 列出数据库中对当前用户可见的所有用户
dba_users 描述数据库中所有用户
user_tab_columns 获取用户表的所有字段还有字段的属性
all_tab_columns 获取用户表的所有字段还有字段的属性
dba_tab_columns 获取用户表的所有字段还有字段的属
user_tab_comments 获取表注释
user_col_comments 获取字段注释
user_indexes 查询出用户所有表的索引
user_ind_columns 查询表的索引
user_cons_columns 查询表的主键
user_constraints 查找表的外键
user_cons_columns 查询外键约束的列名
dba_data_files 、dba_tablespaces 查看数据库中所有的表空间
dba_tables 指定用户所拥有的表空间(已经使用了哪些表空间)

2、语法SQL使用

--第一种方法: 查询dba_tab_columns
 
select COLUMN_NAME,DATA_TYPE,DATA_LENGTH from dba_tab_columns where table_name =upper('表名') order by COLUMN_NAME
 
--这种方法需要有DBA权限
 
--第二种方法: 查询 user_tab_cols
select  COLUMN_NAME,DATA_TYPE,DATA_LENGTH   from  user_tab_cols   where table_name=upper('表名')
 
order by COLUMN_NAME
--这种方法只能查找当前用户下的表
 
--第三种方法: 查询ALL_TAB_COLUMNS
select distinct COLUMN_NAME,DATA_TYPE,DATA_LENGTH 
from ALL_TAB_COLUMNS
WHERE TABLE_NAME= upper('表名')
--这种方法可以查询所有用户下的表
 
---------------------------补充-------------------------------------------------------------
 
--增加cw_srcbpb表字段
alter table cw_srcbpb  add (SRCBPB_RJBPBL varchar2(100) );
--修改cw_srcbpb表字段
alter table cw_srcbpb  modify (SRCBPB_RJBPBL number(30,3) );
 
--Oracle查看所有表和字段
 
--获取表:

select table_name from user_tables; --当前用户的表       
select table_name from all_tables; --所有用户的表   
select table_name from dba_tables; --包括系统表
select table_name from dba_tables where owner='LBSP'; --获取用户***所拥有的表这里的用户名要记得是用大写的。
-- 获取表字段:其实这里是根据用户的权限来获取字段的属性(表名要大写)
select * from user_tab_columns where Table_Name='用户表';--获取用户表的所有字段还有字段的属性。
select * from all_tab_columns where Table_Name='用户表';--获取用户表的所有字段还有字段的属性。
select * from dba_tab_columns where Table_Name='用户表';--获取用户表的所有字段还有字段的属性。
 
--获取表注释:
select * from user_tab_comments
--user_tab_comments:table_name,table_type,comments
--相应的还有dba_tab_comments,all_tab_comments,这两个比user_tab_comments多了ower列。
 
--获取字段注释:
select * from user_col_comments
--user_col_comments:table_name,column_name,comments
--相应的还有dba_col_comments,all_col_comments,这两个比user_col_comments多了ower列。
--查询出用户所有表的索引
select   *   from   user_indexes
--查询用户表的索引(非聚集索引): 
select   *   from   user_indexes where   uniqueness='NONUNIQUE'
--查询用户表的主键(聚集索引): 
select   *   from   user_indexes where   uniqueness='UNIQUE' 
--查询表的索引
select t.*,i.index_type from user_ind_columns t,user_indexes i where t.index_name = i.index_name and
t.table_name='NODE'
--查询表的主键
select cu.* from user_cons_columns cu, user_constraints au where cu.constraint_name = au.constraint_name and
au.constraint_type = 'P' AND cu.table_name = 'NODE'
--查找表的唯一性约束(包括名称,构成列): 
select column_name from user_cons_columns cu, user_constraints au where cu.constraint_name=au.constraint_name and
cu.table_name='NODE'
--查找表的外键
select * from user_constraints c where c.constraint_type = 'R' and c.table_name='STAFFPOSITION';
--查询外键约束的列名: 
select * from user_cons_columns cl where cl.constraint_name = '外键名称';
--查询引用表的键的列名:
select * from user_cons_columns cl where cl.constraint_name = '外键引用表的键名';

--删除表空间
drop tablespace AHTBSPACETEST including contents and datafiles cascade constraints
--查询当前索引的状态:
select distinct index_name,table_owner,table_name,status from user_indexes

 

3、结合\color{red}{declare}声明声明式高级用法

3.1 创建表:以T_CLASS班级表和T_STUDENT学生表为主
  • 关键字: \color{red}{execute} 执行 、\color{red}{immediate}即时(马上) 、\color{red}{begin}开始 、\color{red}{end }结束、\color{red}{if}如果 、\color{red}{end if}结束语句 \color{red}{commit }关键字的使用,而commit一般SQL脚本只有一个
  • 函数:\color{red}{lower}转换小写
  • 系统表:user_tables
  • 注意:结束以 【/ 斜杆】结束
declare
    iCnt number := 0; 
begin 
    select count(*) into iCnt from user_tables  where  lower(table_name) = lower('T_CLASS'); 
    if iCnt = 0 then -- 如果查询不到这个表就创建这个表
    execute immediate  'create table T_CLASS 
    (
        CLASS_ID    NUMBER(11) NOT NULL ,
        CLASS_NAME    VARCHAR2(50) NOT NULL,
        CLASS_NO    VARCHAR2(30) NOT NULL,
        CLASS_NUM    NUMBER(10) NOT NULL
    )'; 
   --- 对表和表属性加标注
    execute immediate 'comment on table T_CLASS is ''班级表''';
    execute immediate 'alter table T_CLASS add constraint PK_CLASS_ID primary key (CLASS_ID)' ;
    execute immediate 'comment on column T_CLASS.CLASS_NAME is ''班级名称''';
    execute immediate 'comment on column T_CLASS.CLASS_NO is ''班级编号''';
    execute immediate 'comment on column T_CLASS.CLASS_NUM is ''班级人数''';
    end if; 
end; 
/

declare
    iCnt number := 0; 
begin 
    select count(*) into iCnt from user_tables  where  lower(table_name) = lower('T_STUDENT'); 
    if iCnt = 0 then -- 如果查询不到这个表就创建这个表
    execute immediate  'create table T_STUDENT 
    (
        USER_ID    NUMBER(11) NOT NULL ,
        ID_CARD_CODE    VARCHAR2(50) NOT NULL,
        USER_NAME    VARCHAR2(30) NOT NULL,
        PASS_WORD    VARCHAR2(30) NOT NULL,
        AGE    NUMBER(10)  NOT NULL,
        ADDRESS    VARCHAR2(255) ,
        CREATE_TIME    DATE
    )'; 
    execute immediate 'comment on table T_STUDENT is ''学生用户表''';
    execute immediate 'alter table T_STUDENT add constraint PK_USER_ID primary key (USER_ID)' ;
    execute immediate 'comment on column T_STUDENT.ID_CARD_CODE is ''身份证编号''';
    execute immediate 'comment on column T_STUDENT.USER_NAME is ''用户名''';
    execute immediate 'comment on column T_STUDENT.PASS_WORD is ''用户密码''';
    execute immediate 'comment on column T_STUDENT.AGE is ''年龄''';
    execute immediate 'comment on column T_STUDENT.ADDRESS is ''地址''';
    execute immediate 'comment on column T_STUDENT.CREATE_TIME is ''创建时间''';
    end if; 
end; 
/
3.2 创建索引
  • 关键字: \color{red}{create }\color{red}{index }
  • 系统表: user_ind_columns
--对学生表的身份证ID加唯一索引ID_CARD_CODE
declare
  iCnt number := 0;
begin
  select count(*) into iCnt from user_ind_columns  where  lower(index_name) = lower('stu_idx_card_code') and lower(table_name)=lower('T_STUDENT');
  if iCnt = 0 then  
     execute immediate 'create unique index stu_idx_card_code on T_STUDENT(id_card_code)'; 
  end if;
end;
/

--创建学生表序列Id     
declare
  iCount integer;
begin
  select count(*) into iCount from user_sequences where upper(sequence_name)=upper('SQ_T_STUDENT');
  if iCount = 0 then
    execute immediate
      'create sequence SQ_T_STUDENT
        minvalue 1
        maxvalue 999999999999999999999999999
        start with 1
        increment by 1
        nocache';
  end if;
end;
/   
3.3 删除索引
  • 关键字: \color{red}{drop }\color{red}{index }
  • 系统表: user_ind_columns
--删除T_STUDENT的唯一索引
declare
  iCnt number := 0;
begin
  select count(*) into iCnt from user_ind_columns where lower(index_name) = lower('stu_idx_card_code') and lower(table_name)=lower('T_STUDENT');
  if iCnt > 0 then  
     execute immediate 'drop index stu_idx_card_code '; 
  end if;
end;
/

 
--删除学生表序列Id     
declare
  iCount integer;
begin
  select count(*) into iCount from user_sequences where upper(sequence_name)=upper('SQ_T_STUDENT');
  if iCount > 0 then
    execute immediate  'drop sequence SQ_T_STUDENT ';
  end if;
end;
/   
3.4 创建视图与删除视图
  • 关键字: \color{red}{drop }\color{red}{index }\color{red}{REPLACE }\color{red}{VIEW }
  • 系统表: all_views
--传统创建视图脚本
 CREATE OR REPLACE VIEW V_STUDENT AS
    SELECT
       user_id,
       user_name ,  
       pass_word ,  
       age,       
       create_time, 
       id_card_code
     FROM T_STUDENT
WITH READ ONLY;   --只读视图
--声明式删除视图
declare
  iCnt number := 0;
begin 
  SELECT count(*) into iCnt  FROM all_views where upper(view_name)=upper('V_STUDENT');
  if iCnt > 0 then
    execute immediate 'drop VIEW V_STUDENT ';
  end if;
end;
/
 --声明式创建视图脚本,WITH READ ONLY表示只读视图
declare
  iCnt number := 0;
begin 
  SELECT count(*) into iCnt  FROM all_views where upper(view_name)=upper('V_STUDENT');
  if iCnt = 0 then
    execute immediate 'CREATE OR REPLACE VIEW V_STUDENT AS
        SELECT
          user_id,
          user_name ,  
          pass_word ,  
          age,       
          create_time, 
          ID_CARD_CODE
        FROM T_STUDENT
        WITH READ ONLY
      ';
  end if;
end;
/

4、创建用户

  • 四步曲 :(其中文件位置、文件大小、自增量、命名之类可按需自定义)
  • 1、 创建临时表空间:
create temporary tablespace MyTestSpace_Temp tempfile 'C:\APP\ADMINISTRATOR\ORADATA\ORCL\SEAN_TEMP01.DBF'size 10m autoextend on next 10m maxsize 100m extent management local
  • 2 、创建数据表空间:
create tablespace mytest_data logging datafile 'C:\APP\ADMINISTRATOR\ORADATA\ORCL\SEAN_DATA01.DBF' size 10m autoextend on next 10m maxsize 100m extent management local
  • 3 、创建用户并指定表空间:
create tablespace mytest_data logging datafile 'C:\APP\ADMINISTRATOR\ORADATA\ORCL\SEAN_DATA01.DBF' size 10m autoextend on next 10m maxsize 100m extent management local
  • 4 、给用户授予权限:
grant connect,resource,dba to mytest

5、Oracle权限与改表空间

  • 1、给用户赋予DBA权限:
grant dba to mytest
  • 2、撤销用户对所有表空间都可使用的权限(相当于撤销用户在表空间上的DBA权限):
revoke unlimited tablespace from mytest
  • 3 将用户在SYSTEM表空间的配额置为0:
alter user mytest  quota 0 on SYSTEM

*4 设置用户在mytest_data 表空间上配额不受限

alter user mytest  quota unlimited on mytest_data ;
  • 5、修改表空间:
alter table TD_USERS move tablespace TABLESPACE_A // 第一步:将表TD_USERS移至表空间tablesapce_A下
alter index TD_USERS_ID rebuild tablespace TABLESPACE_A // 第二步:修改该表的索引的表空间
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,539评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,911评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,337评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,723评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,795评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,762评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,742评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,508评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,954评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,247评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,404评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,104评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,736评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,352评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,557评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,371评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,292评论 2 352