Oracle学习个人笔记
2015-07-11 21:35
561 查看
--以sys@ORCL AS SYSDBA登录进行赋权
SQL> grant connect,resource,dba to scott;
---查看该用户的所有表名字、表注释、字段名、字段注释、是否为空、字段类型
select distinct TABLE_COLUMN.*,
TABLE_NALLABLE.DATA_TYPE,
TABLE_NALLABLE.NULLABLE
from (select distinct utc.table_name table_name,
utc.comments table_comments,
ucc.column_name column_name,
ucc.comments column_comments
from user_tab_comments utc, user_col_comments ucc
where utc.table_name = ucc.table_name
and utc.table_name not like '%_B'
and utc.table_name not like '%_Z'
and utc.table_name not like '%1%') TABLE_COLUMN,
(select distinct table_name, column_name, nullable, DATA_TYPE
from user_tab_cols
where table_name not like '%_B'
and table_name not like '%_Z'
and table_name not like '%1%') TABLE_NALLABLE
where TABLE_COLUMN.column_name = TABLE_NALLABLE.column_name
and TABLE_COLUMN.TABLE_NAME = TABLE_NALLABLE.table_name
--and TABLE_COLUMN.column_comments like '%学%' ---字段注释
and TABLE_COLUMN.table_comments like '%学生表%'; ---表注释
----下面的语句用来查询哪些对象被锁
select object_name,machine,s.sid,s.serial#
from v$locked_object l,dba_objects o ,v$session s
where l.object_id = o.object_id and l.session_id=s.sid;
alter system kill session '24,111'; (其中24,111分别是上面查询出的sid,serial#)
create table wsg_menu
(
wsg_menu_id varchar2(64) default rawtohex(sys_guid()),---创建表时给字
段默认值
m_name varchar2(100) not null, ---创建表时给字段添加
不可为空的限制
m_level char(1) not null,
m_parent char(1) not null,
m_link varchar2(1000), --可为空
constraint pk_wsg_menu_id primary key(wsg_menu_id) ---创建表设置表的主
键
);
---删除表
drop table wsg_menu;
---添加表字段
alter table tablename add (add_column datatype [default value][null/not
null],….);
---修改表字段
alter table tablename modify (column datatype [default value][null/not null],
….);
---删除表字段
alter table tablename drop (column);
----修改表名
ALTER TABLE tablename RENAME TO tablename2;
----修改表列名
ALTER TABLE tablename RENAME COLUMN column_name1 TO column_name2;
--修改字段类型
ALTER TABLE tablename MODIFY column_name NUMBER(20);
------备份表
----完全Copy那张表的数据到另一张表当中去
create table table_name_curdate_bak as select * from table_name;
alter table wsg_menu add constraint pk_wsg_menum_id primary key(wsg_menu_id);
--给表添加主键
/**给表加上注释*/
comment on table wsg_menu is 'wsg的菜单表';
/**给表字段加上注释*/
comment on column wsg_menu.wsg_menu_id is'主键';
comment on column wsg_menu.m_name is'菜单名称';
comment on column wsg_menu.m_level is'菜单级别';
comment on column wsg_menu.wsg_menu_id is'菜单链接地址';
-------------------------------------------------
/**
1. 树结构的描述
树结构的数据存放在表中,数据之间的层次关系即父子关系,通过表中的列与列间的关
系来描述,如EMP表中的EMPNO和MGR。EMPNO表示该雇员的编号,MGR表示领导该雇员的人
的编号,即子节点的MGR值等于父节点的EMPNO值。在表的每一行中都有一个表示父节点
的MGR(除根节点外),通过每个节点的父节点,就可以确定整个树结构。
在SELECT命令中使用CONNECT BY 和蔼START WITH 子句可以查询表中的树型结构关系。
其命令格式如下:
SELECT 。。。
CONNECT BY {PRIOR 列名1=列名2|列名1=PRIOR 裂名2}
[START WITH];
其中:CONNECT BY子句说明每行数据将是按层次顺序检索,并规定将表中的数据连入树
型结构的关系中。PRIORY运算符必须放置在连接关系的两列中某一个的前面。对于节点
间的父子关系,PRIOR运算符在一侧表示父节点,在另一侧表示子节点,从而确定查找树
结构是的顺序是自顶向下还是自底向上。在连接关系中,除了可以使用列名外,还允许
使用列表达式。START WITH 子句为可选项,用来标识哪个节点作为查找树型结构的根节
点。若该子句被省略,则表示所有满足查询条件的行作为根节点。
START WITH: 不但可以指定一个根节点,还可以指定多个根节点。
2. 关于PRIOR
运算符PRIOR被放置于等号前后的位置,决定着查询时的检索顺序。
PRIOR被置于CONNECT BY子句中等号的前面时,则强制从叶节点到根节点的顺序检索,即
由父节点向子节点方向通过树结构,我们称之为自顶向下的方式。如:
CONNECT BY PRIOR EMPNO=MGR
PIROR运算符被置于CONNECT BY 子句中等号的后面时,则强制从根节点到叶节点的顺序
检索,即由子节点向父节点方向通过树结构,我们称之为自底向上的方式。例如:
CONNECT BY EMPNO=PRIOR MGR
在这种方式中也应指定一个开始的节点。
3. 定义查找起始节点
在自顶向下查询树结构时,不但可以从根节点开始,还可以定义任何节点为起始节点,
以此开始向下查找。这样查找的结果就是以该节点为开始的结构树的一枝。
4.使用LEVEL
在具有树结构的表中,每一行数据都是树结构中的一个节点,由于节点所处的层次位置
不同,所以每行记录都可以有一个层号。层号根据节点与根节点的距离确定。不论从哪
个节点开始,该起始根节点的层号始终为1,根节点的子节点为2, 依此类推。
5.节点和分支的裁剪
在对树结构进行查询时,可以去掉表中的某些行,也可以剪掉树中的一个分支,使用
WHERE子句来限定树型结构中的单个节点,以去掉树中的单个节点,但它却不影响其后代
节点(自顶向下检索时)或前辈节点(自底向顶检索时)。
6.排序显示
象在其它查询中一样,在树结构查询中也可以使用ORDER BY 子句,改变查询结果的显示
顺序,而不必按照遍历树结构的顺序。
**/
---查找一个节点的所有直属子节点(所有后代)递归算法
select *
from wsg_menu m
start with m.wsg_menu_id = 'first_menu_one'
connect by m.m_parent = prior m.wsg_menu_id;
---查找一个节点的直属父节点(父亲)。 如果查找的是节点的直属父节点,也是不用
到树型查询的。
--c-->child, p->parent
select c.wsg_menu_id, c.m_name, p.wsg_menu_id parent_id, p.m_name
parent_title
from wsg_menu c, wsg_menu p
where c.m_parent=p.wsg_menu_id and c.wsg_menu_id='three_menu_one';
---查找一个节点的所有直属父节点(祖宗)
select * from wsg_menu m start with m.wsg_menu_id='three_menu_one'
connect by prior m.m_parent=m.wsg_menu_id;
---------------------将字符串转换成数字
select 30-to_number('25') numberStr from dual
-----多表关联时候join on与where里进行的一些小区别
/*建议使用join on
因为写where如果忘记写关联条件 就成笛卡尔积了
join on 是个好的习惯能避免这种不必要的错误出现*/
----------------------自然连接
/*自然连接是在两张表中寻找那些数据类型和列名都相同的字段,然后自动地将他们连
接起来,并返回所有符合条件按的结果。*/
Select emp.ename,dept.dname From emp natural join dept;
/*这里我们并没有指定连接的条件,实际上oracle为我们自作主张的将,emp中的deptno
和dept中的deptno做了连接。
也就是实际上相当于*/
Select emp.ename,dept.dname
From emp join dept on emp.deptno = dept.deptno;
Select emp.empno,emp.ename,emp.job,emp.deptno,dept.dname
--From emp natural join dept; 这个会报错
from emp,dept where emp.deptno = dept.deptno; --这个不会报错
/*
1.如果做自然连接的两个表的有多个字段都满足有相同名称个类型,那么他们会被作为
自然连接的条件。
2.如果自然连接的两个表仅是字段名称相同,但数据类型不同,那么将会返回一个错误
。
3.由于oracle中可以进行这种非常简单的natural join,我们在设计表时,应该尽量在
不同表中具有相同含义的字段使用相同的名字和数据类型*/
-----------------------等值连接即内连接
---旧语法:
select ename ,dname from emp ,dept where emp.deptno = dept . deptno;
--新语法:
------------------自然连接 把一张表当两张表用
select e1.ename ,e2.ename from emp e1 join emp e2 on (
d05f
e1.mgr = e2.empno ) ;
select ename,dname from emp join dept on (emp.deptno=dept.deptno);
---等值连接的简洁写法:
select ename ,dname from emp join dept using (deptno);
---外连接:
--左外连接
select e1.ename ,e2.ename from emp e1 left join emp e2 on (e1.mgr =
e2.empno ) ;
select e1.ename ,e2.ename from emp e1,emp e2 where e1.mgr=e2.empno(+);
--右外连接:
select e1.ename ,e2.ename from emp e1 right join emp e2 on (e1.mgr =
e2.empno ) ;
select e1.ename ,e2.ename from emp e1,emp e2 where e1.mgr(+) = e2.empno;
/*笛卡尔积笛卡尔积对两个关系R和S进行操作,产生的关系中元组个数为两个关系中元
组个数之积。等值联接则是在笛卡尔积的结果上再进行选择操作,挑选关系第i个分量与
第(r+j)个分量值相等的元组;自然连接则是在等值联接(以公共属性值相等为条件)的基
础上再行投影操作,去掉S中的公共属性列,当两个关系没有公共属性时,自然连接就转
化成笛卡尔积 内连接分:等值连接 不等值连接 自然连接 外连接分:左外连接 右外连
接 交叉连接: cross join 笛卡尔积*/
PL/SQL导出表结构
一、tools->export user objects是导出表结构
二、可以用tools->export tables
用中间的sql inserts页面,选中create tables选项,where clause 里写入 where
rownum<1。
如果表包含有CLOB类型字段的话,sql是无法导出的。这时候可以改用PL/SQL的pde
格式进行导出。
导出数据:
一、在select * from table_name;页面点击“导出查询结果”就可以导出当前的表
二、tools->export tables
三、选中表右单击,点击导出“导出数据”
使用语句备份 某张表的全部数据
create table wsg_menu_bak_bak as select * from wsg_menu;
---同一个数据库的情况下
-----全部字段全部插入
insert into WSG_MENU_bak select * from WSG_MENU w where
w.m_parent='first_menu_three';
----选择相应字段插入情况
insert into WSG_MENU_bak(wsg_menu_bak_id ,m_Level,m_Parent) select
e.wsg_menu_id,
e.m_level,e.m_parent from wsg_menu e where e.m_parent='first_menu_three';
-----有两张表,表结构是一样的,只是属于不同的数据库
1、先建立一个database link,将两个库连接起来
create database link mylink connect to user_name identified by password using
'test01'
2、用insert into将test01表a的数据写入test表a
insert into a select * from a@mylink
SELECT l.session_id sid,
s.serial#,
l.locked_mode,
l.oracle_username,
s.user#,
l.os_user_name,
s.machine,
s.terminal,
a.sql_text,
a.action,
s.BLOCKING_SESSION
FROM v$sqlarea a, v$session s, v$locked_object l
WHERE l.session_id = s.sid
AND s.prev_sql_addr = a.address
ORDER BY sid, s.serial#;
SQL> grant connect,resource,dba to scott;
---查看该用户的所有表名字、表注释、字段名、字段注释、是否为空、字段类型
select distinct TABLE_COLUMN.*,
TABLE_NALLABLE.DATA_TYPE,
TABLE_NALLABLE.NULLABLE
from (select distinct utc.table_name table_name,
utc.comments table_comments,
ucc.column_name column_name,
ucc.comments column_comments
from user_tab_comments utc, user_col_comments ucc
where utc.table_name = ucc.table_name
and utc.table_name not like '%_B'
and utc.table_name not like '%_Z'
and utc.table_name not like '%1%') TABLE_COLUMN,
(select distinct table_name, column_name, nullable, DATA_TYPE
from user_tab_cols
where table_name not like '%_B'
and table_name not like '%_Z'
and table_name not like '%1%') TABLE_NALLABLE
where TABLE_COLUMN.column_name = TABLE_NALLABLE.column_name
and TABLE_COLUMN.TABLE_NAME = TABLE_NALLABLE.table_name
--and TABLE_COLUMN.column_comments like '%学%' ---字段注释
and TABLE_COLUMN.table_comments like '%学生表%'; ---表注释
----下面的语句用来查询哪些对象被锁
select object_name,machine,s.sid,s.serial#
from v$locked_object l,dba_objects o ,v$session s
where l.object_id = o.object_id and l.session_id=s.sid;
alter system kill session '24,111'; (其中24,111分别是上面查询出的sid,serial#)
create table wsg_menu
(
wsg_menu_id varchar2(64) default rawtohex(sys_guid()),---创建表时给字
段默认值
m_name varchar2(100) not null, ---创建表时给字段添加
不可为空的限制
m_level char(1) not null,
m_parent char(1) not null,
m_link varchar2(1000), --可为空
constraint pk_wsg_menu_id primary key(wsg_menu_id) ---创建表设置表的主
键
);
---删除表
drop table wsg_menu;
---添加表字段
alter table tablename add (add_column datatype [default value][null/not
null],….);
---修改表字段
alter table tablename modify (column datatype [default value][null/not null],
….);
---删除表字段
alter table tablename drop (column);
----修改表名
ALTER TABLE tablename RENAME TO tablename2;
----修改表列名
ALTER TABLE tablename RENAME COLUMN column_name1 TO column_name2;
--修改字段类型
ALTER TABLE tablename MODIFY column_name NUMBER(20);
------备份表
----完全Copy那张表的数据到另一张表当中去
create table table_name_curdate_bak as select * from table_name;
alter table wsg_menu add constraint pk_wsg_menum_id primary key(wsg_menu_id);
--给表添加主键
/**给表加上注释*/
comment on table wsg_menu is 'wsg的菜单表';
/**给表字段加上注释*/
comment on column wsg_menu.wsg_menu_id is'主键';
comment on column wsg_menu.m_name is'菜单名称';
comment on column wsg_menu.m_level is'菜单级别';
comment on column wsg_menu.wsg_menu_id is'菜单链接地址';
-------------------------------------------------
/**
1. 树结构的描述
树结构的数据存放在表中,数据之间的层次关系即父子关系,通过表中的列与列间的关
系来描述,如EMP表中的EMPNO和MGR。EMPNO表示该雇员的编号,MGR表示领导该雇员的人
的编号,即子节点的MGR值等于父节点的EMPNO值。在表的每一行中都有一个表示父节点
的MGR(除根节点外),通过每个节点的父节点,就可以确定整个树结构。
在SELECT命令中使用CONNECT BY 和蔼START WITH 子句可以查询表中的树型结构关系。
其命令格式如下:
SELECT 。。。
CONNECT BY {PRIOR 列名1=列名2|列名1=PRIOR 裂名2}
[START WITH];
其中:CONNECT BY子句说明每行数据将是按层次顺序检索,并规定将表中的数据连入树
型结构的关系中。PRIORY运算符必须放置在连接关系的两列中某一个的前面。对于节点
间的父子关系,PRIOR运算符在一侧表示父节点,在另一侧表示子节点,从而确定查找树
结构是的顺序是自顶向下还是自底向上。在连接关系中,除了可以使用列名外,还允许
使用列表达式。START WITH 子句为可选项,用来标识哪个节点作为查找树型结构的根节
点。若该子句被省略,则表示所有满足查询条件的行作为根节点。
START WITH: 不但可以指定一个根节点,还可以指定多个根节点。
2. 关于PRIOR
运算符PRIOR被放置于等号前后的位置,决定着查询时的检索顺序。
PRIOR被置于CONNECT BY子句中等号的前面时,则强制从叶节点到根节点的顺序检索,即
由父节点向子节点方向通过树结构,我们称之为自顶向下的方式。如:
CONNECT BY PRIOR EMPNO=MGR
PIROR运算符被置于CONNECT BY 子句中等号的后面时,则强制从根节点到叶节点的顺序
检索,即由子节点向父节点方向通过树结构,我们称之为自底向上的方式。例如:
CONNECT BY EMPNO=PRIOR MGR
在这种方式中也应指定一个开始的节点。
3. 定义查找起始节点
在自顶向下查询树结构时,不但可以从根节点开始,还可以定义任何节点为起始节点,
以此开始向下查找。这样查找的结果就是以该节点为开始的结构树的一枝。
4.使用LEVEL
在具有树结构的表中,每一行数据都是树结构中的一个节点,由于节点所处的层次位置
不同,所以每行记录都可以有一个层号。层号根据节点与根节点的距离确定。不论从哪
个节点开始,该起始根节点的层号始终为1,根节点的子节点为2, 依此类推。
5.节点和分支的裁剪
在对树结构进行查询时,可以去掉表中的某些行,也可以剪掉树中的一个分支,使用
WHERE子句来限定树型结构中的单个节点,以去掉树中的单个节点,但它却不影响其后代
节点(自顶向下检索时)或前辈节点(自底向顶检索时)。
6.排序显示
象在其它查询中一样,在树结构查询中也可以使用ORDER BY 子句,改变查询结果的显示
顺序,而不必按照遍历树结构的顺序。
**/
---查找一个节点的所有直属子节点(所有后代)递归算法
select *
from wsg_menu m
start with m.wsg_menu_id = 'first_menu_one'
connect by m.m_parent = prior m.wsg_menu_id;
---查找一个节点的直属父节点(父亲)。 如果查找的是节点的直属父节点,也是不用
到树型查询的。
--c-->child, p->parent
select c.wsg_menu_id, c.m_name, p.wsg_menu_id parent_id, p.m_name
parent_title
from wsg_menu c, wsg_menu p
where c.m_parent=p.wsg_menu_id and c.wsg_menu_id='three_menu_one';
---查找一个节点的所有直属父节点(祖宗)
select * from wsg_menu m start with m.wsg_menu_id='three_menu_one'
connect by prior m.m_parent=m.wsg_menu_id;
---------------------将字符串转换成数字
select 30-to_number('25') numberStr from dual
-----多表关联时候join on与where里进行的一些小区别
/*建议使用join on
因为写where如果忘记写关联条件 就成笛卡尔积了
join on 是个好的习惯能避免这种不必要的错误出现*/
----------------------自然连接
/*自然连接是在两张表中寻找那些数据类型和列名都相同的字段,然后自动地将他们连
接起来,并返回所有符合条件按的结果。*/
Select emp.ename,dept.dname From emp natural join dept;
/*这里我们并没有指定连接的条件,实际上oracle为我们自作主张的将,emp中的deptno
和dept中的deptno做了连接。
也就是实际上相当于*/
Select emp.ename,dept.dname
From emp join dept on emp.deptno = dept.deptno;
Select emp.empno,emp.ename,emp.job,emp.deptno,dept.dname
--From emp natural join dept; 这个会报错
from emp,dept where emp.deptno = dept.deptno; --这个不会报错
/*
1.如果做自然连接的两个表的有多个字段都满足有相同名称个类型,那么他们会被作为
自然连接的条件。
2.如果自然连接的两个表仅是字段名称相同,但数据类型不同,那么将会返回一个错误
。
3.由于oracle中可以进行这种非常简单的natural join,我们在设计表时,应该尽量在
不同表中具有相同含义的字段使用相同的名字和数据类型*/
-----------------------等值连接即内连接
---旧语法:
select ename ,dname from emp ,dept where emp.deptno = dept . deptno;
--新语法:
------------------自然连接 把一张表当两张表用
select e1.ename ,e2.ename from emp e1 join emp e2 on (
d05f
e1.mgr = e2.empno ) ;
select ename,dname from emp join dept on (emp.deptno=dept.deptno);
---等值连接的简洁写法:
select ename ,dname from emp join dept using (deptno);
---外连接:
--左外连接
select e1.ename ,e2.ename from emp e1 left join emp e2 on (e1.mgr =
e2.empno ) ;
select e1.ename ,e2.ename from emp e1,emp e2 where e1.mgr=e2.empno(+);
--右外连接:
select e1.ename ,e2.ename from emp e1 right join emp e2 on (e1.mgr =
e2.empno ) ;
select e1.ename ,e2.ename from emp e1,emp e2 where e1.mgr(+) = e2.empno;
/*笛卡尔积笛卡尔积对两个关系R和S进行操作,产生的关系中元组个数为两个关系中元
组个数之积。等值联接则是在笛卡尔积的结果上再进行选择操作,挑选关系第i个分量与
第(r+j)个分量值相等的元组;自然连接则是在等值联接(以公共属性值相等为条件)的基
础上再行投影操作,去掉S中的公共属性列,当两个关系没有公共属性时,自然连接就转
化成笛卡尔积 内连接分:等值连接 不等值连接 自然连接 外连接分:左外连接 右外连
接 交叉连接: cross join 笛卡尔积*/
PL/SQL导出表结构
一、tools->export user objects是导出表结构
二、可以用tools->export tables
用中间的sql inserts页面,选中create tables选项,where clause 里写入 where
rownum<1。
如果表包含有CLOB类型字段的话,sql是无法导出的。这时候可以改用PL/SQL的pde
格式进行导出。
导出数据:
一、在select * from table_name;页面点击“导出查询结果”就可以导出当前的表
二、tools->export tables
三、选中表右单击,点击导出“导出数据”
使用语句备份 某张表的全部数据
create table wsg_menu_bak_bak as select * from wsg_menu;
---同一个数据库的情况下
-----全部字段全部插入
insert into WSG_MENU_bak select * from WSG_MENU w where
w.m_parent='first_menu_three';
----选择相应字段插入情况
insert into WSG_MENU_bak(wsg_menu_bak_id ,m_Level,m_Parent) select
e.wsg_menu_id,
e.m_level,e.m_parent from wsg_menu e where e.m_parent='first_menu_three';
-----有两张表,表结构是一样的,只是属于不同的数据库
1、先建立一个database link,将两个库连接起来
create database link mylink connect to user_name identified by password using
'test01'
2、用insert into将test01表a的数据写入test表a
insert into a select * from a@mylink
SELECT l.session_id sid,
s.serial#,
l.locked_mode,
l.oracle_username,
s.user#,
l.os_user_name,
s.machine,
s.terminal,
a.sql_text,
a.action,
s.BLOCKING_SESSION
FROM v$sqlarea a, v$session s, v$locked_object l
WHERE l.session_id = s.sid
AND s.prev_sql_addr = a.address
ORDER BY sid, s.serial#;
相关文章推荐
- oracle中表被锁了怎么办
- oracle 11g ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务解决方法
- oracle数据库的导入dmp文件和导出dmp文件
- oracle常用到的一些应用(创建用户,用户授权)
- Oracle外键级联删除和级联更新
- Oracle-BPM(九)
- Oracle操作ORA-02289: 序列不存在 解决方案
- Oracle-BPM(八)
- ORACLE ADF Summit示例程序的一些问题
- Oracle-BPM(七)
- Oracle-BPM(六)
- oracle EBS上传和下载文件(转)
- Oracle-BPM(五)
- Oracle常用函数TO_CHAR用法详解(转自博客园-小小草博文)
- Oracle-BPM(四)
- oracle监听服务无法启动解决办法
- Oracle 10g RAC Cluster interconnects
- 讲解Oracle数据库移植到MySQL
- Oracle数据库关于创建使用数据库、表空间呢、多表、视图、存储过程、序列的使用
- Oracle基本语句