Oracle查询的时候条件要用单引号包裹,不能用双引号;Oracle的in子查询里面的值最多有1000个。。。。。。。。

连接orcl数据库

C:\Windows\system32>sqlplus sys/123456@orcl as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on 星期五 2月 2 14:32:34 2018

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> show user
USER 为 "SYS"
SQL> conn sbgl/sbgl@orcl
已连接。
SQL> show user
USER 为 "SBGL"
SQL> show parameter instance_name; NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
instance_name string orcl

登录用户切换用户:

C:\Windows\system32>sqlplus /@orcl as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on 星期五 2月 2 17:31:52 2018

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> show user
USER 为 "SYS"
SQL> connect sbgl/sbgl@orcl as sysdba
已连接。
SQL> show user
USER 为 "SYS"
SQL> connect sbgl/sbgl@orcl
已连接。
SQL> show user
USER 为 "SBGL"
SQL>

注意:以sysdba登录实际上登录的sys用户,因此登录用户的时候不要以sysdba登录。

/**1创建表空间**/
create tablespace sbgl datafile 'F:\Oracle\sbgl.dbf'size 200M
autoextend on next 50M force logging;

/**2.创建用户***/
create user sbgl identified by sbgl default tablespace sbgl;

/**3.授予sbgl操作权限**/
grant connect,resource,dba to sbgl;

/***4.创建导出目录(之后手动创建目录)**/
create or replace directory pump_dir as 'F:\expdp';

/********5.向新创的用户授权******/
grant read,write on directory pump_dir to sbgl;

/*******6.查看管理理员目录****/
select * from dba_directories;

导入导出:

*导入数据*
1、将SBGL20180129.EXPDP文件拷贝到d:\expdp;
2、在CMD窗口下执行以下命名
impdp sbgl/sbgl@orcl dumpfile=pump_dir:SBGL20180129.EXPDP table_exists_action=replace nologfile=y *导出数据:*
expdp sbgl/sbgl@orcl dumpfile=pump_dir:SBGL20180129.expdp schemas=sbgl nologfile=y

/****查看用户的角色***/
select * from USER_SYS_PRIVS where USERNAME='sbgl';
select * from dba_sys_privs;

/**查看当前登录用户信息(用户名、创建时间、表空间)*****/
select * from user_users;

/**查看所有用户信息****/

select * from dba_users;              /*查看数据库里面所有用户,前提是有dba权限的帐号,如sys,system*/
select username from dba_users;    //查看所有有dba权限用户名称

select * from all_users;                /*查看能管理的所有用户*/

/****查看用户与表空间的关系***/
select default_tablespace, temporary_tablespace, d.username from dba_users d where username='SBGL';

/***查看所有的表空间**/
select tablespace_name from dba_tablespaces;

/*******删除表空间*********/

drop tablespace 表空间名称 including contents and datafiles;

/*****查看所有的表空间与其对应的数据文件的位置*********/

select * from dba_data_files;

/*查看所有用户**/
select * from dba_users;

/*查看一个表空间下面的所有表**/
select TABLE_NAME,TABLESPACE_NAME from dba_tables where TABLESPACE_NAME='SBGL';

/***查看一个用户有哪些表***/
select * from all_tables where owner='SBGL';

/***********查看当前用户有哪些表****/

select table_name from user_tables;

/**********查看当前用户有哪些试图**********/

select * from user_views;

select VIEW_NAME from user_views;

/*****查看dba_tablespaces表结构*****/
desc dba_tablespaces;

/***查看当前用户***/
show user;

select username from user_users;

/*****查看当前用户所有的权限***/

select * from session_privs;

/***查看当前连接数据库***/
show parameter instance_name;

/****查看建表语句******/

select dbms_metadata.get_ddl('TABLE','a') from dual   只需要将表名的小写改为大写即可;;   //其中a为表名;  如果有PLSQL的话可以直接在可视化界面查看表的建表语句;

/*****oracle查看版本**/

select * from v$version;

/*查看数据库名*/

select name from v$database;

 /*查看sid*/

select instance_name from v$instance;

/**根据约束名称查询对应的表名(有一列是tablename)**/

select * from dba_constraints where constraint_name='xxx外键名' and constraint_type = 'R';

/********删除用户************/

drop user username;

drop user username cascade;//级联删除用户的数据

/************添加一列 *******/
alter table A add( columnname varchar2(20));

/*********修改列名称    ******/
alter table A rename column coluName  to newName;

/************修改列的类型:*******/
alter table A modify coluName varchar(200);

/****删除一列 ***********/
alter table A drop column coluName

/******字符串拼接 (||)***/

select 1||'23' from dual;

结果:

 补充:oracle中多个用户共用一个表空间也是不同的表,表空间、表、用户的关系如下:

用户=商家
表=商品
表空间=仓库
1. 1个商家能有很多商品,1个商品只能属于一个商家
2. 1个商品可以放到仓库A,也可以放到仓库B,但不能同时放入A和B
3. 仓库不属于任何商家
4. 商家都有一个默认的仓库,如果不指定具体仓库,商品则放到默认的仓库中

oracle中用户的所有数据都是存放在表空间中的,很多个用户可以共用一个表空间,也可以指定一个用户只用某一个表空间。
表空间:创建表空间会在物理磁盘上建立一个数据文件,作为数据库对象(用户、表、存储过程等等)的物理存储空间;
用户:创建用户必须为其指定表空间,如果没有显性指定默认表空间,则指定为users表空间;创建用户后,可以在用户上,创建表、存储过程等等其他数据库对象;
表:是数据记录的集合;
创建过程: 表空间--->用户--->表;
所属关系: 表空间 包含 用户 包含 表;

分页查询相关:(对原始的查询进行两层封装)

/*****普通的查询(30数据)****/
select * from ENVIRONMENT_APPLY_AUDIT; /*******查询带行号的数据**/
select ROWNUM ru,AAA.* from ( select * from ENVIRONMENT_APPLY_AUDIT ) AAA; /*******查询第一页 每页5条数据***/
select * from (select AAA.*,ROWNUM ru from (select * from ENVIRONMENT_APPLY_AUDIT ) AAA where ROWNUM<6);
select * from (select ROWNUM ru,AAA.* from (select * from ENVIRONMENT_APPLY_AUDIT ) AAA where ROWNUM<6) where ru>0; /**********查询第二页数据********************/
select * from (select ROWNUM ru,AAA.* from (select * from ENVIRONMENT_APPLY_AUDIT ) AAA where ROWNUM<11) where ru>5; /**********查询第三页数据********************/
select * from (select ROWNUM ru,AAA.* from (select * from ENVIRONMENT_APPLY_AUDIT ) AAA where ROWNUM<16) where ru>10;

/********************oracle表分区相关*************/

1.概念

表空间:是一个或多个数据文件的集合,所有的数据对象都存在指定的表空间中。
分区表:逻辑上分区表仍然是一个完整的表,只是将表中的数据在物理上存放到多个表空间(物理文件上),可以提高查询效率,不至于每次都扫描整张表。

查询oracle版本是否支持分区

select * from v$option where parameter = 'Partitioning';

 结果为true 的时候表示当前oracle版本支持分区。如果不支持需要更换oracle版本为支持分区的版本。XE不支持,ORCL支持。

  对现有表table_8进行分区有两种方式,第一种是创建与现有表一样结构的分区表table_9,然后将原来table_8表的数据插入到table_9,然后删掉表table_8,将table_9命名为table_8;第二种是使用oracle自带的线上重定义功能进行分区,重定义会将基础表table_8和table_9进行交换,包括索引、触发器、外键等也会交换,重定义之后table_8变为分区表,table_9变为普通表,table_9会保留table_8的原有的数据。(两种方式都需要确保基础表table_8和中间表table_9的表结构一致,包括索引、触发器等)

2.练习

====================从无到有创建表分区(散列分区)========================
在列值上使用散列分区。当列的值没有指定条件时,建议使用散列分区。散列分区为同通过指定分区编号来均匀分布数据的一种分区类型。 1.创建两个表空间
create tablespace part1 datafile 'D:\oraclexe\tablespace\part1.dbf'size 1024M autoextend on next 500m force logging;
create tablespace part2 datafile 'D:\oraclexe\tablespace\part2.dbf'size 1024M autoextend on next 500m force logging; 2.创建用户
create user sa identified by 111222 default tablespace part1; 3.授权
grant connect,resource,dba to sa; 4. 查看是否支持分区
select * from v$option where parameter = 'Partitioning'; 5.创建一个测试表
create table table_1(ID NUMBER PRIMARY KEY, name varchar2(200)); 插入数据
insert into table_1 values(1, 'name1');
insert into table_1 values(2, 'name1'); 创建分区表(哈希分区)
CREATE TABLE table_2
(
ID NUMBER PRIMARY KEY,
name VARCHAR2(200)
)
partition BY hash
(
ID
)
(
partition part1 TABLESPACE part1,
partition part2 TABLESPACE part2
); 查看表是否已经分区:
SELECT PARTITIONED FROM USER_TABLES WHERE TABLE_NAME = 'TABLE_2'; 查看表table_2的分区以及分区所在的表空间:
select * from user_tab_partitions where table_name = 'TABLE_2' 测试将表1的数据插入表2:
insert into table_2 select * from table_1 查看分区1的数据:
select * from table_2 partition(part1)
结果:
2 name1
5 name1
6 name1
8 name1 查看分区2的数据:
select * from table_2 partition(part2)
1 name1
3 name1
4 name1
7 name1
9 name1
10 name1 ==============在线重定义将普通表变为分区表=========================
测试能否对表进行在线重定义:
EXEC SYS.dbms_redefinition.can_redef_table('SA', 'table_1'); // 参数是用户, 表名 创建中间分区表table_3:
CREATE TABLE table_3
(
ID NUMBER PRIMARY KEY,
name VARCHAR2(200)
)
partition BY hash
(
ID
)
(
partition part1 TABLESPACE part1,
partition part2 TABLESPACE part2
); 开始重建:
BEGIN
SYS.dbms_redefinition.start_redef_table('SA', 'TABLE_1', 'TABLE_3');
END; 把中间表的内容和数据源表进行同步
EXECUTE SYS.dbms_redefinition.sync_interim_table('sa', 'TABLE_1', 'TABLE_3') 开始重定义之后,完成重定义之前,需要在中间表上创建与源表对应的索引、外键、触发器等,而中间表与源表对应的主键,如果需要按照主键重定义,需要在开始redefine之前创建。 结束在线重定义
EXEC SYS.dbms_redefinition.finish_redef_table('sa', 'TABLE_1', 'TABLE_3') 如果执行在线重定义的过程中出错:
可以在start_redef_table之后,finish_redef_table之前执行:EXEC SYS.dbms_redefinition.abort_redef_table('sa', 'TABLE_1', 'TABLE_3') 测试表table_1是否已经分区
SELECT * FROM user_tab_partitions WHERE table_name = 'TABLE_1' ==================================分区的其他操作=================================================== 分区创建:
1.再开始建表的时候就指定分区
2.有数据的表table_1变为分区表的思路:
(1)建一个分区中间表table_2,表结构与表table_1一样,然后将表table_1的数据插入table_2,删除表table_1之后将table_2重命名为table_1
(2)在线重定义,也是用中间表进行分区 ===============================创建其他方式的分区================================
======范围分区====
1.基于ID进行划分
(1)小于10的一个分区,小于20的一个分区
CREATE TABLE table_4
(
ID NUMBER PRIMARY KEY,
name VARCHAR2(200)
)
partition BY range
(
ID
)
(
partition part41 VALUES less than (10) TABLESPACE part1,
partition part42 VALUES less than (20) TABLESPACE part2
);
插入20的时候会报错,未映射到分区:SQL 错误: ORA-14400: 插入的分区关键字未映射到任何分区。
解决办法:第二个分区建立的时候使用Maxvalue
CREATE TABLE table_4
(
ID NUMBER PRIMARY KEY,
name VARCHAR2(200)
)
partition BY range
(
ID
)
(
partition part41 VALUES less than (10) TABLESPACE part1,
partition part42 VALUES less than (maxvalue) TABLESPACE part2
); 按日期进行分区也是上面的语句:只不过值改为日期比较-> partition part42 VALUES less than (to_date('01-apr-1998','dd-mon-yyyy')) TABLESPACE part2 ======列表分区(适用于一个列的值只有几个值)====
1.创建列表分区
CREATE TABLE table_5
(
ID NUMBER PRIMARY KEY,
name VARCHAR2(200)
)
partition BY list
(
name
)
(
partition part51 VALUES
(
'zs'
)
TABLESPACE part1,
partition part52 VALUES
(
'lisi',
'ww',
'zl',
'tq'
)
TABLESPACE part2
);
如果插入的值不在上面分区允许的范围之内也是报错:SQL 错误: ORA-14400: 插入的分区关键字未映射到任何分区。 ======组合范围散列分区====
基于范围分区和散列分区,表首先按照某列进行范围分区,然后按照某列进行列表分区,分区之中的分区称为子分区
CREATE TABLE table_6
(
ID NUMBER PRIMARY KEY,
name VARCHAR2(200)
)
partition BY range
(
ID
)
subpartition BY list
(
name
)
(
partition part61 VALUES less than (10) TABLESPACE part1 ( subpartition part61sub1 VALUES
(
'zs'
)
TABLESPACE part1, subpartition part61sub2 VALUES
(
'lisi'
)
TABLESPACE part2 ) ,
partition part62 VALUES less than (maxvalue) TABLESPACE part2 ( subpartition part62sub1 VALUES
(
'zs'
)
TABLESPACE part1, subpartition part62sub2 VALUES
(
'lisi'
)
TABLESPACE part2 )
); ==================================分区查询===========================
1.查看当前用户可以访问的所有分区表的信息
select * from all_part_TABLES; 2.显示当前用户所有分区表的信息:
select * from user_part_tables; 3.查看所有的组合分区表的子分区信息:
select * from user_tab_subpartitions ============================带索引的表的重建(在线重定义分区)==================
1.创建带索引的表8
CREATE TABLE table_8
(
ID NUMBER PRIMARY KEY,
name VARCHAR2(200)
); 创建索引:
create index t8_name_index on table_8(name); 插入数据:
insert into table_8 select * from table_1; 2.查看是否支持在线重定义
EXEC SYS.dbms_redefinition.can_redef_table('SA', 'table_8'); 3.创建与表8结构一样的分区表9
CREATE TABLE table_9
(
ID NUMBER PRIMARY KEY,
name VARCHAR2(200)
)
partition BY hash
(
ID
)
(
partition part1 TABLESPACE part1,
partition part2 TABLESPACE part2
); 4.开始重定义
BEGIN
SYS.dbms_redefinition.start_redef_table('SA', 'TABLE_8', 'TABLE_9');
END; 5.进行数据同步
EXECUTE SYS.dbms_redefinition.sync_interim_table('sa', 'TABLE_8', 'TABLE_9') 6.结束在线重定义
EXEC SYS.dbms_redefinition.finish_redef_table('sa', 'TABLE_8', 'TABLE_9') 7.查看表8是否已经分区
SELECT * FROM user_tab_partitions WHERE table_name = 'TABLE_8' 8.查看表8中每个分区的数据:
select * from table_8 partition(part1)
select * from table_8 partition(part2)

/**************Oracle 事务相关********************/

DDL(数据定义语言) - Create、Alter、Drop 这些语句自动提交,无需用Commit提交。

DQL(数据查询语言)- Select查询语句不存在提交问题。

DML(数据操纵语言) - Insert、Update、Delete 这些语句需要Commit才能提交。

DTL(事务控制语言) - Commit、Rollback 事务提交与回滚语句。

DCL(数据控制语言) - Grant、Revoke 授予权限与回收权限语句。

  执行完DML语句,若没有commit再执行DDL语句,也会自动commit未被commit的数据。

  如果打开自动提交,DML操作后也不需要手动提交:SET AUTOCOMMIT ON;

最新文章

  1. 详解Linux交互式shell脚本中创建对话框实例教程_linux服务器
  2. Conditional Split component 用法
  3. virtualenv
  4. Linux卷配置管理
  5. linux驱动的入口函数module_init的加载和释放【转】
  6. DBA_Oracle Startup / Shutdown启动和关闭过程详解(概念)
  7. 学习总结 java基础
  8. PHP event 事件机制
  9. 单元最短路径算法模板汇总(Dijkstra, BF,SPFA),附链式前向星模板
  10. 通过文件流stream下载文件
  11. Android之ScaleGestureDetector(缩放手势检测)
  12. ecmall数据库基本操作
  13. startActivityForResult案例
  14. hdu 4405 Aeroplane chess (概率DP)
  15. Android Fragment的介绍与使用(案例Demo)
  16. 怎样选择PHP的版本
  17. Grid (read-only) objects and methods (client-side reference)获取子表单对象的一些方法 Crm 2016
  18. 游戏平台代表--PS4【推荐】
  19. 【Python】 如何用pyinstaller打包python程序成exe
  20. iOS开发基础-图片切换(3)之属性列表

热门文章

  1. 利用kubeadm快速部署k8s
  2. please upgrade your plan to create a new private reposiory
  3. java在线聊天项目 swt可视化窗口Design 登录框注册按钮点击改变窗口大小——出现注册面板 实现打开登录框时屏幕居中
  4. PAT 乙级 1041
  5. PHP操作MySQL事务实例
  6. 如何用纯 CSS 绘制一个充满动感的 Vue logo
  7. Linux配置使用SSH Key登录并禁用root密码登录(替换同理)
  8. shell-code-5-流程控制
  9. (原)pat1007素数猜想
  10. addEvenListener(&#39;DOMContentLoaded&#39;,function(){})