1.COLUMN 某列 new_val V
表示是取到这个列的最后一条记录,并赋值给变量V,但是有一点要注意的是select查询出来的结果只能有一行
如:
select a.name, b.value from v$statname a, v$mystat b where a.statistic# = b.statistic# --and lower(a.name) like '%' || lower('&S')||'%' and lower(a.name) = lower('&S') /
如果我们用like 进行模糊匹配的话 结果可能有多行数据,这时V就无法被赋上值。
2.查询表空间的使用量、剩余量:
select * from sm$ts_used;
select * from sm$ts_free;
比起用其它的视图写长长的一段脚本, 简便多了。
两个视图的定义:
SQL>select text from dba_views where view_name = 'SM$TS_FREE';
TEXT
--------------------------------------------------------------------------------
select tablespace_name, sum(bytes) bytes from dba_free_space
group by tablespace_name
SQL>select text from dba_views where view_name = 'SM$TS_USED';
TEXT
--------------------------------------------------------------------------------
select tablespace_name, sum(bytes) bytes from dba_segments
group by tablespace_name
3. v$mystat,v$sesstat是用来分别统计会话级别和自实例起动以来数据库各种统计信息的。
两个视图结构一致,只是统计数据不一致。
desc v$mystat;
名称 是否为空? 类型
----------------------------------------------------- -------- ------------------------------------
SID NUMBER
STATISTIC# NUMBER
VALUE NUMBER
SID表示会话编号,与v$session中SID相对应。
STATISTIC# 表示统计项
VALUE 表示统计项相关的值
v$mystat视图中只会有当前用户的会话信息,v$sesstat会有整个实例内所有会话信息。因此在v$sesstat中自然包括v&mystat的统计信息。
一般情况下v$mystat,v$sesstat会与v$statname一起配合使用。
SQL> desc v$statname;
Name Type Nullable Default Comments
---------- ------------ -------- ------- --------
STATISTIC# NUMBER Y
NAME VARCHAR2(64) Y
CLASS NUMBER Y
v$statname视图中STATISTIC#与v$mystat,v$sesstat中STATISTIC#字段是相关联的。而NAME则是对应的英文信息,比如说要查某条DML语句所产生的redo信息。可以这样写:
select value from v$mystat t,v$statname t1 where t.STATISTIC# = t1.STATISTIC# and t1.NAME = 'redo size'
其它信息也是如此,只需将t1.name换成相对应的英文名称即可。
4.
set define off关闭替代变量功能
在SQL*Plus中默认的"&"表示替代变量,也就是说,只要在命令中出现该符号,SQL*Plus就会要你输入替代值。这就意味着你无法将一个含有该符号的字符串输入数据库或赋给变量,如字符串“SQL&Plus”系统会理解为以“SQL”打头的字符串,它会提示你输入替代变量 Plus的值,如果你输入ABC,则最终字符串转化为"SQLABC"。
set define off 则关闭该功能,“&”将作为普通字符,如上例,最终字符就为“SQL&Plus”
set define off关闭替代变量功能
set define on 开启替代变量功能
set define * 将默认替代变量标志符该为“*”(也可以设为其它字符)
5. 查看Oracle表空间是自动段空间管理还是手动的
select tablespace_name,EXTENT_MANAGEMENT,SEGMENT_SPACE_MANAGEMENT from dba_tablespaces;//auto 表示自动 MANUAL表示手动
TABLESPACE_NAME EXTENT_MAN SEGMEN
------------------------------ ---------- ------
SYSTEM LOCAL MANUAL
UNDOTBS1 LOCAL MANUAL
TEMP LOCAL MANUAL
EXAMPLE LOCAL AUTO
INDX LOCAL AUTO
TOOLS LOCAL AUTO
USERS LOCAL AUTO
ALS_INDEX1 LOCAL MANUAL
ALS_INDEX2 LOCAL MANUAL
ASSMDEFAULT LOCAL MANUAL
ASSMTBS LOCAL AUTO
修改表所属表空间:
alter table test111 move tablespace ASSM;
create table test111 tablespace assm as select * from dba_objects;
5.Oracle用户导出和导入
导出Oracle scott方案下用户对象
exp scott/tiger@orcl grants=n feedback=10000 file=e:\scott.dmp owner=scott
grants=n 表示不导出权限;
feedback表示10000条记录反馈一次——表现在终端就是一个黑点;
file就不用说了
owner指明从哪个用户下导出
导入Oracle scott方案下用户对象
首先要创建好表空间和用户
imp userid=ewsvi/ewsvi@orcl file=e:\scott.dmp fromuser=scott touser=ewsvi tables=(dictionary,dictionarytype)
其中,fromuser若为多个表空间的话,使用()将其括起来:fromuser=(a,b);
touser参数仿fromuser参数;
若只导入一部分表,使用tables参数,用()括起要导入的表;如果想全部导入,不需要指定tables参数
6. sqlplus 中定义变量variable deptno number;
select table_name, constraint_name, cname1 || nvl2(cname2,','||cname2,null) || nvl2(cname3,','||cname3,null) || nvl2(cname4,','||cname4,null) || nvl2(cname5,','||cname5,null) || nvl2(cname6,','||cname6,null) || nvl2(cname7,','||cname7,null) || nvl2(cname8,','||cname8,null) columns from ( select b.table_name, b.constraint_name, max(decode( position, 1, column_name, null )) cname1, max(decode( position, 2, column_name, null )) cname2, max(decode( position, 3, column_name, null )) cname3, max(decode( position, 4, column_name, null )) cname4, max(decode( position, 5, column_name, null )) cname5, max(decode( position, 6, column_name, null )) cname6, max(decode( position, 7, column_name, null )) cname7, max(decode( position, 8, column_name, null )) cname8, count(*) col_cnt from (select substr(table_name,1,30) table_name, substr(constraint_name,1,30) constraint_name, substr(column_name,1,30) column_name, position from user_cons_columns ) a, user_constraints b where a.constraint_name = b.constraint_name and b.constraint_type = 'R' group by b.table_name, b.constraint_name ) cons where col_cnt > ALL ( select count(*) from user_ind_columns i where i.table_name = cons.table_name and i.column_name in (cname1, cname2, cname3, cname4, cname5, cname6, cname7, cname8 ) and i.column_position <= cons.col_cnt group by i.index_name ) /
8.
通过使用 SQL,可以为列名称和表名称指定别名(Alias)。
其实,select列的时候取别名有三种方法,这三种方法并不是所有数据库都适用。
方法一、直接在字段名称后面加上别名,中间以空格隔开。
方法二、以as关键字指定字段别名,as在select的字段和别名之间。
当别名没有被双引号括起来时,其显示结果为大写。如果别名中包含了特殊字符,或想让别名原样显示,你就要使用双引号把别名括起来。
SELECT empno AS "Employee Number",ename name,(sal+500)*12 "Annual Salary" FROM emp;
方法三、对于SQL Server 还提供了另外一种方法,之间用“=”号指定。“=”号放在select的字段和别名之间。
例子:
SQL Server | Oracle |
select Emp_Id as EmpId , Emp_Name "Employee Name" , Extemsion=Ext , SUBSTRING(Emp_Id,1.2) "到职位年度" from Employee where Dept_Id='I200' |
select Emp_Id as EmpId , Emp_Name "Employee Name" , Extemsion Ext , SUBSTR(Emp_Id,1.2) "到职位年度" from Employee where Dept_Id='I200' |
在Oracle数据库中,数据表别名是不能加as的,例如:
select a.appname from appinfo a;-- 正确
select a.appname from appinfo as a;-- 错误
注释:这可能是为了防止和Oracle数据库中的存储过程中的关键字as冲突的问题
9.
Oracle中start with...connect by prior子句用法 connect by 是结构化查询中用到的,其基本语法是:
select ... from tablename start with 条件1
connect by 条件2
where 条件3;
例:
select * from table
start with org_id = 'HBHqfWGWPy'
connect by prior org_id = parent_id;
简单说来是将一个树状结构存储在一张表里,比如一个表中存在两个字段:
org_id,parent_id那么通过表示每一条记录的parent是谁,就可以形成一个树状结构。
用上述语法的查询可以取得这棵树的所有记录。
其中:
条件1 是根结点的限定语句,当然可以放宽限定条件,以取得多个根结点,实际就是多棵树。
条件2 是连接条件,其中用PRIOR表示上一条记录,比如 CONNECT BY PRIOR org_id = parent_id就是说上一条记录的org_id 是本条记录的parent_id,即本记录的父亲是上一条记录。
条件3 是过滤条件,用于对返回的所有记录进行过滤。
简单介绍如下:
早扫描树结构表时,需要依此访问树结构的每个节点,一个节点只能访问一次,其访问的步骤如下:
第一步:从根节点开始;
第二步:访问该节点;
第三步:判断该节点有无未被访问的子节点,若有,则转向它最左侧的未被访问的子节,并执行第二步,否则执行第四步;
第四步:若该节点为根节点,则访问完毕,否则执行第五步;
第五步:返回到该节点的父节点,并执行第三步骤。
总之:扫描整个树结构的过程也即是中序遍历树的过程。
10.
11.Oracle来生成UUID,做法很简单,如下:
select sys_guid() from dual;