ORACLE-SQL积累(查询外检约束、记录长度、字段长度、启用禁用触发器、case用法、分组连接函数、查询被锁表)

原创 2015年11月20日 16:55:05

查看所有外键约束:

SELECT
  USER_CONS_COLUMNS.CONSTRAINT_NAME AS 约束名,
  USER_CONS_COLUMNS.TABLE_NAME AS 子表名,
  USER_CONS_COLUMNS.COLUMN_NAME AS 子表列名,
  USER_CONS_COLUMNS.POSITION AS 位置,
  USER_INDEXES.TABLE_NAME AS 主表名,
  USER_IND_COLUMNS.COLUMN_NAME AS 主表列名
FROM
  USER_CONSTRAINTS
    JOIN USER_CONS_COLUMNS
    ON (USER_CONSTRAINTS.CONSTRAINT_NAME
        = USER_CONS_COLUMNS.CONSTRAINT_NAME)
    JOIN USER_INDEXES
    ON (USER_CONSTRAINTS.R_CONSTRAINT_NAME
        = USER_INDEXES.INDEX_NAME)
    JOIN USER_IND_COLUMNS
    ON (USER_INDEXES.INDEX_NAME = USER_IND_COLUMNS.INDEX_NAME)
WHERE
  CONSTRAINT_TYPE = 'R';


查看表记录长度、字段长度:

select table_name,sum(data_length)
FROM cols t group by t.TABLE_NAME

select table_name,column_name,data_type, to_char(data_length) 
FROM cols t 

1. 查询一张表里面索引 
select * from user_indexes where table_name=upper('bills'); 
2. 查询被索引字段 
select * from user_ind_columns where index_name=('in_bills'); 

启用禁用触发器:
ALTER TRIGGER <触发器名> DISABLE; 禁用某个触发器
ALTER TRIGGER <触发器名> ENABLE;  启用某个触发器
ALTER TABLE <表名> DISABLE ALL TRIGGERS; 禁用表上的所有的触发器
ALTER TABLE <表名> ENABLE ALL TRIGGERS;  启用表上的所有的触发器


Case具有两种格式。简单Case函数和Case搜索函数。
--简单Case函数
CASE sex
WHEN '1' THEN '男'
WHEN '2' THEN '女'
ELSE '其他' END
--Case搜索函数
CASE WHEN sex = '1' THEN '男'
WHEN sex = '2' THEN '女'
ELSE '其他' END

这两种方式,可以实现相同的功能。简单Case函数的写法相对比较简洁,但是和Case搜索函数相比,功能方面会有些限制,比如写判断式。 
还有一个需要注意的问题,Case函数只返回第一个符合条件的值,剩下的Case部分将会被自动忽略。 
--比如说,下面这段SQL,你永远无法得到“第二类”这个结果
CASE WHEN col_1 IN ( 'a', 'b') THEN '第一类'
WHEN col_1 IN ('a')       THEN '第二类'
ELSE'其他' END



分组连接字符串函数:

select LISTAGG(d.box_id, ';') WITHIN GROUP(ORDER BY d.box_id) from d;


查询哪些对象被锁:

SELECT l.session_id sid, s.serial#, l.locked_mode,l.oracle_username,

  l.os_user_name,s.machine, s.terminal, o.object_name, s.logon_time

  FROM v$locked_object l, all_objects o, v$session s

  WHERE l.object_id = o.object_id

  AND l.session_id = s.sid

  ORDER BY sid, s.serial# ;

语句用来杀死一个进程:
alter system kill session '24,111'; (其中24,111分别是上面查询出的sid,serial#)





用SQL语句查询出所有表的表结构(字段定义,类型,长度等),导出CSV(SQL2008 R2)

领导安排要整理公司一个大型项目的数据库,要求最终形成一个表结构文档,方便以后维护使用,并让在整理SQL过程了解项目。 搜索后找到一个SQL脚本,修改后执行下SQL脚本。 在结果就能看到数据库所有表的结...

如何在sql/plus中把select语句查询显示出来的结果中的显示字段长度缩小

在sql*plus中,如果select语句查询的某一字段很宽,可以使用哪个命令将该行的显示宽度设置为一个 我这边整理了三条设置语句,应该能满足所有相关问题了,若不然后期再添加。 问题图如下: 当我...
  • David96
  • David96
  • 2017年10月25日 20:12
  • 102

Oracle JDBC通过占位符可以查询可变长字段,不可查询固定长度字段

这个问题在半年前,花了我两天的时间才解决,现在刚好想起来,顺便记录一下以防忘了。 通过jdbc,预编译的sql,无法查询到固定长度的字段。 用例子说话: 创建一个表,只有一个字段,长度为固定的c...

Oracle 11g 学习四:多表查询、左右连接、SQL1999语法、统计函数及分组查询

一、多表查询

ORACLE关于锁表查询的部分SQL

--查询表空间名称和大小 SELECT UPPER (F.TABLESPACE_NAME) "表空间名", D.TOT_GROOTTE_MB "表空间大小(M)", D.TO...

查询Oracle正在执行的sql语句,锁表,解锁

原文出处:http://blog.csdn.net/jlds123/article/details/6572559 ----------------------- --查询Oracle正在执行...

Oracle事务、锁表查询及相关实用SQL语句查询

几条简单的oracle系统查询语句: --查某session 正在执行的sql语句,从而可以快速定位到哪些操作或者代码导致事务一直进行没有结束等. SELECT /*+ ORDERED */...

SQL查询字段赋值的case用法

需求:select name from bd_corp where name='ab'  显示结果为“ab”,需求是name='ab'条件下显示为“cd” 我的sql是 select subst...

对oracle当中子查询建表,merge操作,创建,修改,删除约束,创建使用触发器的复习练习

Sql代码 /** 对oracle当中子查询建表,merge操作,创建,修改,删除约束,创建使用触发器的复习练习**/  /**    本例子的作用是熟悉使用oracle当中的触发器:有两...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ORACLE-SQL积累(查询外检约束、记录长度、字段长度、启用禁用触发器、case用法、分组连接函数、查询被锁表)
举报原因:
原因补充:

(最多只允许输入30个字)