抽象数据类型
1、创建类型
--地址类型
CREATE OR REPLACE TYPE AddressType AS OBJECT
(
Country varchar2(15),
City varchar2(20),
Street varchar2(30)
);
2、类型嵌套
--创建基于前一个类型的新的抽象数据类型:巨星类型
CREATE OR REPLACE TYPE SuperStarType AS OBJECT
(
StarName varchar2(30),
Address AddressType
);
3、基于抽象类型创建关系表
CREATE TABLE SuperStar
(
StarID varchar(10),
Star SuperStarType
);
4、基于抽象类型创建对象表
CREATE TABLE SuperStarObj of SuperStarType;
5、使用构造方法在表中插入记录
INSERT INTO SuperStar VALUES(''001'',SuperStarType(''Zidane'',AddressType(''France'',''Paris'',''People Street NO.1'')));
6、查询表中记录
(1)SQL> SELECT * from SuperStar;
STARID
----------
STAR(STARNAME, ADDRESS(COUNTRY, CITY, STREET))
--------------------------------------------------------------------------------
001
SUPERSTARTYPE(''Zidane'', ADDRESSTYPE(''France'', ''Paris'', ''People Street NO.1''))
(2)
SELECT s.StarID,s.Star.StarName,s.Star.Address.Coun ......
Oracle group by及其若干相关函数的一些说明
http://blog.csdn.net/roland_wg/archive/2009/07/03/4319323.aspx
Oracle的group by除了基本用法以外,还有3种扩展用法,分别是rollup、cube、grouping sets。
假设有一个表test,有A、B、C、D、E5列。
1) 如果使用group by rollup(A,B,C),首先会对(A、B、C)进行GROUP BY,然后对(A、B)进行GROUP BY,然后是(A)进行GROUP BY,最后对全表进行GROUP BY操作。roll up的意思是“卷起”,这也可以帮助我们理解group by rollup就是对选择的列从右到左以一次少一列的方式进行grouping直到所有列都去掉后的grouping(也就是全表grouping),对于n个参数的rollup,有n+1次的grouping。以下2个sql的结果集是一样的:
Select A,B,C,sum(E) from test group by rollup(A,B,C)和
Select A,B,C,sum(E) from test group by A,B,C
union all
Select A,B,null,sum(E) from test group by A,B
union all
Select A,null,null,sum(E) from test group by A
union all
Select null,null,null,sum(E) from test
2) cube的意思是立方,对cube的每个参数,都可以理解为取值为参与grouping和不参与grouping两个值的一个维度,然后 ......
Oracle数据导入导出imp/exp就相当于oracle数据还原与备份。exp命令可以把数据从远程数据库服务器导出到本地的dmp文件,imp命令可以把dmp文件从本地导入到远处的数据库服务器中。利用这个功能可以构建两个相同的数据库,一个用来测试,一个用来正式使用。
执行环境:可以在SQLPLUS.EXE或者DOS(命令行)中执行,DOS中可以执行时由于 在oracle 8i 中 安装目录\ora81\BIN被设置为全局路径,该目录下有EXP.EXE与IMP.EXE文件被用来执行导入导出。oracle用java编写,SQLPLUS.EXE、EXP.EXE、IMP.EXE这两个文件有可能是被包装后的类文件。
SQLPLUS.EXE调用EXP.EXE、IMP.EXE所包裹的类,完成导入导出功能。下面介绍的是导入导出的实例。
数据导出:
1 将数据库TEST完全导出,用户名system 密码manager 导出到D:\daochu.dmp中
exp system/manager@TEST file=d:\daochu.dmp full=y
2 将数据库中system用户与sys用户的表导出
exp system/manager@TEST file=d:\daochu.dmp owner=(system,sys)
3 将数据库中的表inner_notify、notify_staff_relat导出
exp aichannel/aichannel@TESTDB2 file= d ......
-- 删除重复记录
DELETE from mytable t1 WHERE ROWID > (SELECT MIN (ROWID) from mytable t2 WHERE t1. key = t2.key);
-- 当前日期
SELECT TO_CHAR(SYSDATE, 'yyyy-MM-dd') from DUAL;
-- 上月当前日期
SELECT TO_CHAR(ADD_MONTHS(SYSDATE,
-1), 'yyyy-MM-dd') from DUAL;
-- 下月当前日期
SELECT
TO_CHAR(ADD_MONTHS(SYSDATE, 1), 'yyyy-MM-dd') from DUAL;
--
上月首天
SELECT TO_CHAR(ADD_MONTHS(LAST_DAY(SYSDATE) + 1,
-2),'yyyy-MM-dd') from DUAL;
-- 上月月末
SELECT
TO_CHAR(LAST_DAY(ADD_MONTHS(LAST_DAY(SYSDATE) + 1, -2)),'yyyy-MM-dd') from DUAL;
-- 当月首天
SELECT
TO_CHAR(ADD_MONTHS(LAST_DAY(SYSDATE) + 1, -1), 'yyyy-MM-dd') from DUAL;
-- 当月月末
SELECT
TO_CHAR(LAST_DAY(ADD_MONTHS(LAST_DAY(SYSDATE) + 1, -1)),'yyyy-MM-dd') from DUAL;
-- 下月首天
SELECT
TO_CHAR(ADD_MONTHS(LAST_DAY(SYSDATE) + 1, 0), 'yyyy-MM-dd') from DUAL;
-- 下月月末
SELECT
TO_CHAR(LAST_DAY(ADD_MONTHS(LAST_DAY(SYSDATE) + 1, 0)), 'yyyy-MM-dd') from DUAL;
-- 今年首天
SELECT TO_CHAR(TRUNC(SYSDATE,' ......
create table a(
id number primary key,
name varchar2(20)
);
create table b(
id number,
name varchar2(20),
aid number references a(id)
);
insert into a values(1,'1');
insert into b values(1,'aaa',1);
如果 create view vi_new as select * from a
在视图vi_new 上做任何 dml操作都会修改 对应的基表中的数据
因为视图就是一个指针
测试 若果drop table 基表 视图同时也会报错 说明 视图不是单独存在的 而是指向基表的
如果 create view vi_new as select t.a,s.name from A t,B s where t.a=s.id
这样就只能进行查询操作了 进行增删改就会跑错
视图的优点
1.对数据库的访问,因为视图可以有选择性的选取数据库里的一部分。
2.用户通过简单的查询可以从复杂查询中得到结果。
3.维护数据的独立性,试图可从多个表检索数据。
4.对于相同的数据可产生不同的视图。 ......
今天遇到这样的问题,修改主机名后oracle agent 服务突然无法启动,上网找了一会做如下操作。可以正常使用了
1、将%oracle_home\ora92\network\admin下的listener.ora和tnsnames.ora内的所有原主机名改为现有主机名或者固定IP地址(以便客户端机器能够访问Server),当然如果系统重启后自动改正,可忽略此步骤。
2、将%oracle_home\ora92\network\agent下的services.ora内的原主机名也修改为现有主机名或者IP地址。
3、将%oracle_home\ora92\network\agent目录下的所有*.q文件全部删除,重启电脑。 ......