6. 使用约束时的注意事项 约束里不能用系统函数,如SYSDATE和别的表的字段比较 可以用本表内字段的比较 想在事务处理后, 做约束的 检查 SQL> alter session set constraints deferred. 7. 由实体关系图到创建表的例子 s_dept 前提条件:已有region表且含唯一关键字的字段id SQL> CREATE TABLE s_dept (id NUMBER(7) CONSTRAINT s_dept_id_pk PRIMARY KEY, name VARCHAR2(25) CONSTRAINT s_dept_name_nn NOT NULL, region_id NUMBER(7...
A.*FROM TABLE_AWHERE A.USER_ID NOT IN (SELECT B.USER_ID FROM TABLE_B)目前找到的最优方法,可以秒查。示例如下,查询A表有、B表没有的DEPT_ID数据:SELECT A.*FROM TB_DEPT A, TB_DEPT_LEV B WHERE A.DEPT_ID = B.DEPT_ID(+) AND B.DEPT_ID IS NULL(+)号可以这样来理解: + 表示补充,即哪个表有加号,这个表就是匹配表。这里加号写在右表,左表就是全部显示,故是左连接。 原文:http://blog.csdn.net/dengjh_business/arti...
1.Oracle中DDL语句对事务的影响 在Oracle中,执行DDL语句(如Create Table、Create View等)时,会在执行之前自动发出一个Commit命令,并在随后发出一个Commit或者Rollback命令,也就是说,DDL会象如下伪码一样执行: Commit;DDL_Statement; If (Error) then Rollback; Else Commit;End if; 我们通过分析下面例子来看Oracle中,DDL语句对事务的影响: Insert into some_table values(‘Before’);Creaate table T(x int); Insert int...
oracle SQL语句执行的监控脚本![@more@] --查找bad sql的方法: select * from (select buffer_gets, sql_text from v$sqlarea where buffer_gets >500000 order by buffer_gets desc) where rownum<=30;--執行次數SQLselect sql_text,executions from (select sql_text,executions from v$sqlarea order by executions desc) where rownum<81;--讀磁盤多的SQLselect sql_text,disk_reads from (select...
使用情景: 例如:需要从学生成绩表中,查询分数大于95分的所有学生编号,用逗号分隔成一个字符串。 准备测试数据: create table score (id int,score int) insert into score values(1,90) insert into score values(2,96) insert into score values(3,99) 现在需要通过一个语句查询重“2,,3”这个结果字符串。 SQL Server语句如下: select substring(( SELECT ‘,‘+cast(id as varchar(90)) FROM score where score>95 F...
?SQL Code? 12?select?concat(id,username)?str?from?app_userselect?id||username?str?from?app_user字符串转多列 实际上就是拆分字符串的问题,可以使用 substr、instr、regexp_substr函数方式 字符串转多行 使用union all函数等方式 wm_concat函数 首先让我们来看看这个神奇的函数wm_concat(列名),该函数可以把列值以","号分隔起来,并显示成一行,接下来上例子,看看这个神奇的函数如何应用准备测试数据 ?SQL Code? 123456?create...
UPPER(F.TABLESPACE_NAME) "表空间名",D.TOT_GROOTTE_MB "表空间大小(M)",D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)",TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100,2),‘990.99‘) || ‘%‘ "使用比",F.TOTAL_BYTES "空闲空间(M)",F.MAX_BYTES "最大块(M)"FROM (SELECT TABLESPACE_NAME,ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES,ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTES...
1、查看表空间的名称及大小 SELECT t.tablespace_name, round(SUM(bytes / (1024 * 1024)), 0) ts_size FROM dba_tablespaces t, dba_data_files d WHERE t.tablespace_name = d.tablespace_name GROUP BY t.tablespace_name; --2、查看表空间物理文件的名称及大小 SELECT tablespace_name, file_id, file_name, round(bytes / (1024 * 1024), 0) total_space FROM dba_data_files ORDER BY tablespace_name; --3、查看...
,但是也有一些不同之处,差别如下:Oracle中表名,字段名,存储过程名,变量名不能超过30个字符串长度。Oracle中不支持Top 语法。使用whererownum < n 代替。但需要注意如果在Top前有排序的操作,则需要先排序在利用rownum取得。Oracle中光标的使用与SqlServer中有挺大差别,主要是在循环控制方面不一致。在 Oracle中如果某列是Date类型,那么它默认的格式是yyyy-MM-dd,如果使用where colDate = ‘2005-06-08 17:14:57’就会出错...
--新建表: create table table1( id varchar(300) primary key, name varchar(200) not null);--插入数据 insert into table1 (id,name) values (‘aa‘,‘bb‘);--更新数据 update table1 set id = ‘bb‘ where id=‘cc‘;--删除数据 delete from table1 where id =‘cc‘;--删除表 drop table table1;--修改表名: alter table table1 rename to table2;--表数据复制: insert into table1 (select * from table...
1. 语法 单表:UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值 如:update t_join_situation set join_state=‘1‘whereyear=‘2011‘ 更新年度为“2011”的数据的join_state字段为“1”。如果更新的字段加了索引,更新时会重建索引,更新效率会慢。 多表关联,并把一个表的字段值更新到另一个表中的字段去: update 表a set a.字段1 = (select b.字段1 from 表b where a.字段2=b.字段2) where ...
如果你发现无法对一个表进行修改、删除等操作时,你可以利用以下语句查询是否是该表被锁住了 --查询锁select sess.sid,sess.serial#, lo.oracle_username,lo.os_user_name,ao.object_name,lo.locked_modefrom v$locked_object lo,dba_objects ao,v$session sesswhere ao.object_id = lo.object_idand lo.session_id = sess.sid;其中sid和serial#字段用于下面解锁语句,oracle_username,os_user_name,object_name分别是数据库的登...
1. 选用适合的ORACLE优化器 ORACLE的优化器共有3种: a. RULE (基于规则) b. COST (基于成本) c. CHOOSE (选择性) 设置缺省的优化器,可以通过对init.ora文件中OPTIMIZER_MODE参数的各种声明,如RULE,COST,CHOOSE,ALL_ROWS,FIRST_ROWS . 你当然也在SQL句级或是会话(session)级对其进行覆盖。 为了使用基于成本的优化器(CBO, Cost-Based Optimizer) , 你必须经常运行analyze 命令,以增加数据库中的对象统计信息...
1.列出至少有一个员工的所有部门。(两个表联合查询,及group by...having的用法) select dname from dept where deptno in(select deptno from emp group by deptno having count(*)>1);2.列出薪金比“SMITH”多的所有员工。(经典的自连接查询) select ename from emp where sal>(select sal from emp where ename like‘SMITH‘);3. 列出所有员工的姓名及其直接上级的姓名 select ename,(select ename from emp where empno in(...
select * from emp; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- ---------- --------- ----- ----------- --------- --------- ------7369 SMITH CLERK 7902 1980/12/17 800.00 207499 ALLEN SALESMAN 7698 1981/2/20 1600.00 300.00 307521 WARD SALESMAN 7698 1981/2/22 1250.00 500.00 307566 JONES MANAGER 7...