//创建用户
1.用系统管理员登陆
2.create user 用户名 identified by 密码
3.授权
grant connect to 用户名					//授予连接权限
grant resource to 用户名				//授予基本权限

show user;						//查看当前用户
clear screen;						//清屏
conn system/密码 as sysdba;				//更换用户
conn orcle用户/用户密码;				//断开连接,然后再为指定的用户建立连接
alter user 用户名 account unlock;			//解锁
alter user 用户名 identified by 新密码;			//设置新密码
drop user 用户名					//删除用户(必须SYSTEM用户下)

grant 权限 on 表名 to 用户名;				//设置权限  
//如果使用了“with grant option”来授予用户权限,则接受该权限的用户可以将此权限继续授予其他用户

revoke 权限 on 表名 from 用户名;			//撤销权限
//可以使用ALL关键字来授予所有对象权限

select table_name from user_tables;			//查看当前用户所有表名
desc 表名;						//显示表结构

constraint 约束名 check(列名约束)			//check约束
constraint 约束名 foreign key(本表列名) references 外表名(外表列名)	//外键约束

alter table 表名 add 列名 列名类型;			//向表中增加一个新列
alter table 表名 modify 列名 列名类型;			//修改表中指定列的数据类型与类型长度
alter table 表名 drop column 列名;				//删除表中指定的列

column 列名 format a(大小)				//屏幕显示列的范围大小

truncate table 表名;					//删除表中所有内容,不更改结构
drop table 表名;					//删除表及全部数据
insert into 表名[(字段1 ,字段2...)]values(值1,值2..)	//插入语句,[]内为可选
//日期默认插入格式是“DD-MM-YY”分别代表日,月,年

commit;							//提交事务
rollback;						//回滚事务
savepoint name;						//设置保存点 用"rollback to name"回滚

create [or replace] synonym 同义词名称 for 表名		//创建同义词,必须有"CREATE ANY SYNONYM"权限
create [or replace] public synonym  同义词名称 for 表名	//创建公共同义词
drop synonym 同义词名称					//删除同义词
drop public synonym 同义词名称				//删公共同义词
select * from 用户名.表名				//其他用户使用另一个用户创建的方案同义词

/*创建序列,一般只需指定起始值增量*/
create sequence 序列名	
start with 起始值
increment by 增量 默认值为1
[maxvalue] 最大值
[minvalue] 最小值
[order] 排序方式
[cache] 缓存生成个数 默认值为20
cycle 循环

序列名.nextval						//返回序列生成的下一个值
序列名.currval 						//返回序列生成的当前值
alter sequence 序列名					//修改序列 不能修改初始值
drop sequence 序列名					//删除序列

//创建视图
create [or replace] [force] view 视图名			//force:强制创视图 
[列名]	
as select语句
[with check option [CONSTRAINT constraint]]		//视图DML操作时,满足select语句中的where条件
[with read only];					//只能查询

//查询视图的可更新列
select a.column_name,a.updatable,a.insertable,a.deletable
from user_updatable_columns a
where a.table_name=upper('视图名');

//查询视图的定义信息
select c.view_name,c.text 
from user_views c
where c.view_name=upper('视图名');

drop view 视图名					//删除视图

//创建索引
create index 索引名 on 表名(列名) [tablespace 表空间] 

set autotrace on explain				//使用索引前
create unique index 索引名 on 表名(列名)		//唯一索引
create  index 索引名 on 表名(列名1,列名2...)		//复合索引
create bitmap index 索引名 on 表名(列名)		//位图索引
create index 索引名 on where后的条件			//函数索引
alter index 索引名 coalesce;				//合并索引
alter index 索引名 rebuild;				//重建索引

//查看被监视的索引
select 		
a.index_name,						
a.monitoring,						//YES表示已出于监视状态
a.used,							//NO表示从开始监视以来还未被使用过
a.start_monitoring,					
a.end_monitoring
from v$object_usage a;
	
alter index 索引名 monitoring usage;			//使索引处于被监视状态

//查看索引信息
select
index_name,						//索引名
index_type,	//function-based normal:基于函数的B树索引;bitmap:位图索引;normal:普通的B树索引
uniqueness						//是否唯一索引
from user_indexes
where table_name in ('表名');

PL/SQL基本结构:
DECLARE
	定义部分
BEGIN
	执行部分
EXCEPTION
	异常处理部分
END;

变量 列名.表名%TYPE					//定义%TYPE变量

变量 表名%ROWTYPE					//定义一个表中一行记录的变量(数据类型一致)

TYPE 记录类型名字 IS RECORD				//定义记录类型
(
	变量名 数据类型(一般定义%TYPE)
	...
);
记录类型变量名 记录类型名字;				//定义记录类型变量

TYPE 表名 IS TABLE OF 数据类型 [NOT NULL] 		//定义索引表(类似一维数组的方式使用)
INDEX BY [BINARY_INTEGER|PLS_INTEGER|VARCHAR2] 
类型变量名 表名;					//定义变量

TYPE 数组名 IS VARRAY(成员个数) OF 数据类型 [NOT NULL];	//定义VARRAY数据类型(下标从1开始)
变量名 数组名:=数组名(值1,值2,...);			//声明变量并用构造函数赋值

IF 条件表达式 THEN					//二重条件分支结构
	语句段1
ELSE
	语句段2
END IF;

IF 条件表达式1 THEN					//多重条件分支结构
	语句段1
ELSIF 条件表达式2 THEN
	语句段2
ELSIF 条件表达式3 THEN
	语句段3
......
ELSIF 条件表达式n 
	语句段n
END IF;

CASE 表达式						//CASE结构
	WHEN 条件表达式1 THEN
		语句段1;
	WHEN 条件表达式2 THEN
		语句段2;
		......
	ELSE
		语句段n;
END CASE;

CASE 							//CASE搜索结构
	WHEN 条件表达式结果1 THEN
		语句段1;
	WHEN 条件表达式结果2 THEN
		语句段2;
		......
	ELSE
		语句段n;
END CASE;

LOOP							//基本循环
	语句段;
	EXIT[WHEN 条件表达式]
END LOOP;

WHILE 条件表达式 LOOP					//WHILE循环
	语句段;
END LOOP;

FOR 循环变量 in [REVERSE] 初值表达式..总值表达式 LOOP	//FOR循环
	语句段;
END LOOP;

set serveroutput on					//输出

CREATE [OR REPLACE] PROCEDURE 过程名称			//创建过程
(
	参数
)
IS [AS]
	声明部分
BEGIN
	执行部分
EXCEPTION
	异常处理部分
END;

EXEC [CALL] 过程名称					//运行过程

begin							//运行过程
过程名称
end;
/

DROP PROCEDURE 过程名称;				//删除过程

CREATE [OR REPLACE] FUNCTION 函数名称			//创建函数
(
	参数
)
RETURN 返回值的数据类型
	IS|AS
		声明部分
	BEGIN
		执行部分
	EXCEPTION
		异常处理部分
	END;

调用函数
1.使用变量接收函数返回值
2.在SQL语句中直接调用函数

DROP FUNCTION 函数名称;					//删除函数		

SELECT text FROM User_Source WHERE 			//显示子程序的源码
name=upper('子程序名称');

SELECT object_name,created,status FROM user_objects	//列出当前用户所包含的过程和函数
WHERE object_type IN('PROCEDURE','FUNCTION');

SHOW ERRORS PROCEDURE 子程序名称;			//确定错误原因和位置

SELECT NAME,TYPE FROM User_Dependencies a		//列出对象依赖关系
WHERE a.referenced_name='表名';				

ALTER PROCEDURE 子程序名称 COMPILE;			//重新编译子程序

CURSOR 游标名称 IS SELECT语句;				//定义游标

OPEN 游标名称;						//打开游标

FETCH 游标名称 INTO 接收游标数据的变量;			//提取数据

CLOSE 游标名称;						//关闭游标

游标名%ISOPEN						//确定游标是否打开

游标名%FOUND						//检查是否从结果集中

游标名%NOTFOUNT						//与%FOUNT属性相反

游标名%ROWCOUNT						//返回到当前行为止已经提取到的实际行数

FETCH 游标名称 BULK COLLECT INTO 接收游标数据的变量;	//提取所有数据

游标记录类型名 游标名%ROWTYPE;				//定义游标记录类型

CURSOR 游标名(参数名 参数类型) IS SELECT语句;		//参数游标
OPEN 游标名(参数值);

CURSOR 游标名(参数名 参数类型) IS SELECT语句 FOR UPDATE;//修改或删除数据
必须在UPDATE或DELETE语句中引用"WHERE CURRENT OF 游标名"

FOR 变量名 IS 游标名 LOOP				//游标FOR循环,会隐含地打开和关闭游标
	......
END LOOP;
						
CREATE [OR REPLACE] TRIGGER 触发器名 			//创建DML触发器
触发时机(BEFORE或AFTER) INSERT OR UPDATE OR DELETE
ON 所操作的表名
BEGIN
	......
END;

CREATE [OR REPLACE] TRIGGER 触发器名 			//创建行触发器,":NEW"代表新行,可更新;":OLD"代表旧行,只读
触发时机(BEFORE或AFTER) INSERT OR UPDATE OR DELETE
ON 所操作的表名
FOR EACH ROW
BEGIN
	......
END;

--导出SCOTT方案中emp,dept表
在d:\dump目录创建par_emp_dept.txt
内容:
DIRECTORY=dirdp1
DUMPFILE=tab_emp_dept.dmp
LOGFILE=dirdp1:tab_emp_dept.log
TABLES=emp,dept
登录系统权限
create directory dirdp1 as 'd:\dump';
grant read,write on directory dirdp1 to scott;
select * from dba_directories where directory_name like 'DIR%';
进入CMD
expdp scott/tiger parfile=d:\dump\par_emp_dept.txt

--删除emp,dept表并恢复
在d:\dump目录创建imp_par_table.txt
内容:
DIRECTORY=dirdp1
DUMPFILE=tab_emp_dept.dmp
LOGFILE=imp_table_emp_dept.log
TABLE_EXISTS_ACTION=TRUNCATE
TABLES=emp,dept
进入CMD
impdp scott/tiger parfile=d:\dump\imp_par_table.txt					

id自增
create sequence seq_id
start with 1
increment by 1;

create or replace trigger tr_id
before 
insert
on 表名 for each row
begin
  select seq_stu.nextval into :new.id from dual;
end;
/

一般sql查询命令顺序  
from -->where --> group by --> having --> order by