博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
oracle命令2015
阅读量:4036 次
发布时间:2019-05-24

本文共 14268 字,大约阅读时间需要 47 分钟。

oracle安装完之后有3个默认用户:
sys 超级管理员 权限最高 角色为dba 默认密码:chang_on_install
system 系统管理员 权限很高 角色dbaoper 默认密码:manager   (没有create databse 权限)
scott 普通用户 默认密码:tiger
ALTER USER scott ACCOUNT UNLOCK; 为用户解锁
**********************************************************************************************************************************************
oracle 对用户的操作
start d:\a.sql 或者@ d:\a.sql 运行脚本的命令
edit d:\a.sql 编辑脚本的命令
spool d:\a.sql ; spool off;将sqlplus 屏幕上得命令存储到a.sql 里面。
conn sys/admin as sysdba; 让sys以dba的角色登陆
create user admin identified by admin ;创建admin用户,密码为admin;
password admin;
 修改admin的密码
drop user admin;  删除用户,无法删除自己。当用户已经创建了表 需要带一个参数cascade;(所创建的表也删除)
oracle默认的预定义有connect dba  resource(可以再任何表空间建表)  自定义角色自己创建
grant dba to admin;把dba的角色权限给admin;
grant select on help to admin ; 把system的 help表的查询权限给admin;(select update all ....)
select * from system.help ;在admin下查询system的help表; 
set linesize 120; 设置一行的字符数量
revoke select on help from admin;在system下收回admin 对help表的查询的权限。
grant select on emp to admin with grant option;在scott下授权给admin emp表的查询权限 并且让admin 把这个权限传递下去、
grant select on scott.emp to sa; 在admin下 把scott的emp表的查询权限给sa;
revoke select on emp from admin;在scott下收回admin对emp表的查询权限 同时admin所传递下去的权限也都默认收回了。
create profile rule limit failed_login_attempts 3 password_lock_time 2;创建名字为rule的规则 用户登录时最多输入的3次 登录错误3次后锁定2天
alter user admin profile rule;把rule规则赋给admin用户。
alter user admin account unlock; 解除admin的账号锁定
drop profile rule; 删除名字为rule的规则。
drop profile rule cascade ; 当rule规则指定给某用户时,删除名字为rule的规则需要加上 cadcade。
create profile rule_pass limit password_life_time 3 password_grace_time 2;rule_pass规则 用户密码使用3天后提示更改密码 宽限期为2天。
create profile rule_pas_his limit password_life_time 3 password_grace_time 2 password_reuse_life 3 ;更改密码后 历史密码3天后才能再次使用
**********************************************************************************************************************************************
oracle 对数据库表的操作
alter table user add(uuid number(10)); 对user表添加以一个user 的字段
alter table user modify(uuid number(5));把user表的uuid字段 长度改为5
alter table user drop column uuid;删除user表的uuid字段
rename user to use; 把user表改名字为use
alter session set nls_date_format='yyyy-mm-dd';把日期型的格式改为年月日,默认是日月年 dd-mm-yyyy
set timing on ; 打开查询时间。
insert into user(userid,username.password) select * from user;把当前表的数据复制到本身。
select distinct username from user; 消除重复行查询username
select (sal+nvl(comm,0))*13 ,username from emp; nvl判断该字段是否为空。为空用0替代 不为空用本身的值。
select ename empno from emp where empno in(9875,4563,1546);查询emp中empno为9875 4563 1546的记录。
select enamel mgr from emp where mgr is null;查询mgr 为空的字段
select ename sal from emp where sal=(select max(sal) from emp); 查询出工资最高的员工
select min(sal) "最低工资",avg(sal) "平均工资", count(*) "总人数" from emp; 
select avg(sal) "平均工资",max(sal) "最高工资" ,deptno as "部门编号"from emp group by deptno; 按部门分组查询各部门的最高工资和平均工资
select avg(sal) "平均工资",max(sal) "最高工资" ,deptno as "部门编号" ,job "职位" from emp group by deptno, jOB ORDER BY DEPTNO;查询各部门各职位的工资 并按部门升序排列
SELECT avg(sal) "平均工资",deptno as "部门编号" FROM EMP  GROUP BY deptno HAVING avg(sal)<2000; 按照部门编号分组查询平均工资《2000的部门
select A1.ename,A1.sal,A2.DNAME FROM emp a1 ,DEPT a2 where A1.DEPTNO=A2.DEPTNO; 利用emp和dept的主外键关系进行关联查询;
SELECT EMP.ENAME "名字", EMP.SAL "工资", SALGRADE.GRADE "工资级别" from EMP,SALGRADE WHERE emp.SAL BETWEEN SALGRADE.LOSAL AND SALGRADE.HISAL;
利用 between .. and .. 查询 工资所在范围属于哪个级别。
SELECT a1.ename,A2.ENAME FROM EMP a1,EMP a2 WHERE A1.MGR=A2.EMPNO AND A1.ENAME='FORD'; 从EMP表查员工FORD的上司属于自连接
SELECT * FROM EMP WHERE DEPTNO=(SELECT DEPTNO from EMP WHERE ENAME='SMITH'); 单行子查询 作为条件的查询语句返回值只有一个
SELECT * FROM emp where JOB IN (SELECT distnct(消除重复数据) JOB from EMP where DEPTNO='10');
多行子查询 作为条件的查询语句返回值有多个
SELECT * from EMP where SAL> ALL (SELECT SAL FROM EMP WHERE DEPTNO=20); 多条件查询 可以用关键词All 所有的 ,可以改为
SELECT * from EMP where SAL>(SELECT MAX(SAL) FROM EMP WHERE DEPTNO=20); 直接和最大值比较 性能更好
SELECT * FROM EMP WHERE SAL> ANY(SELECT SAL FROM EMP WHERE DEPTNO=20); 多条件查询 可用关键词 any 任意一个 ,可改为
SELECT * FROM EMP WHERE SAL> ANY(SELECT MIN(SAL) FROM EMP WHERE DEPTNO=20);直接和最小值比较
SELECT * from EMP where  DEPTNO=(SELECT DEPTNO FROM EMP where ENAME='SMITH') and JOB=(SELECT "JOB" FROM EMP where ENAME='SMITH');
和SMITH一个部门一个岗位的员工信息 可改为
SELECT * FROM EMP where (DEPTNO,JOB)=(SELECT DEPTNO,JOB FROM EMP WHERE ENAME='SMITH');
CREATE TABLE mytable as SELECT* from EMP; 复制emp表名字为mytable;
合并查询 关键字 :union union all intersect minus 
SELECT * from  mytable WHERE sal>2000 UNION SELECT * from EMP WHERE DEPTNO=20;        union 相同的记录不在显示 
SELECT * from  mytable WHERE sal>2000 UNION ALL SELECT * from EMP WHERE DEPTNO=20;    union 相同的记录也显示  合集
SELECT * from  mytable WHERE sal>2000 INTERSECT SELECT * from EMP WHERE DEPTNO=20;    intersect 只显示两个查询结果相同的部分 交集
SELECT * from  mytable WHERE sal>2000 MINUS SELECT * from EMP WHERE DEPTNO=20;
     minus 查询差集 前面的减去后面的 显示余下的 如果没有就为空
INSERT into EMP VALUES (7966,'ANGLE','MANAGER',7839,TO_DATE('1989-11-1', 'yyyy-mm-dd'),900,10,20); 日期型数据 插入函数 TO_date(str,formate)
INSERT INTO mytest SELECT empno, ename,SAL from EMP WHERE DEPTNO=10;多条数据的添加;
update  mytest SET(ename,sal) =(SELECT ename,sal from EMP WHERE ename='SMITH') WHERE userid=7782; 多条数据的修改
**************************************************************************************************************************************************
oracle分页
SELECT * FROM(SELECT A1.*,ROWNUM rn from (SELECT * FROM EMP) a1 WHERE ROWNUM<=10) where rn>5;
**************************************************************************************************************************************************
事务的操作 
dml事务(增删改)
savepoint a1; 创建a1保存点
rollback a1; 返回到a1保存点
rollback;   返回到最初状态
commit; 事务提交后或者退出后,保存点都不存在。
只读事务(查)
set stransaction read only; 设置只读事务,其他用户有对数据库进行dml操作时 是看不到的。
***********************************************************************************************************************************************
oracle的函数
lower:字符串换为小写 upper:字符串换为大写 length:字符串长度 substr:截取某段字符串
 
SELECT "LOWER"(ename) from EMP;小写显示姓名
SELECT "UPPER"(ename) from EMP;大写显示姓名
SELECT * from EMP WHERE "LENGTH"(ENAME)=5;显示姓名长度为5的员工
SELECT "SUBSTR"(ENAME, 1, 3) from EMP; 显示姓名的前3个字符
SELECT "UPPER"(SUBSTR(ENAME, 1, 1))||lower("SUBSTR"(ENAME, 2))  from EMP; 首字母大写
SELECT lower(SUBSTR(ENAME, 1, 1))||UPPER("SUBSTR"(ENAME, 2))  from EMP; 首字母小写
SELECT "REPLACE"(ename, 'A', 'XXX') FROM emp ;查询出的姓名中含有A的用XXX代替
SELECT "INSTR"(ename, 'A') from EMP; 查询字符A在字符串中的位置
SELECT "ROUND"(sal, 1) ,ename from EMP ; 四舍五入 取一位小数
SELECT "TRUNC"(sal, 1),ename from emp; 直接截取 取一位小数,
SELECT "FLOOR"(sal),ename from emp;返回小于或等于sal的整数,
SELECT "CEIL"(sal),ename from emp; 返回大于或等于sal的整数,
SELECT "MOD"(sal, 1) FROM emp; sal和1取模
SYSDATE :返回系统时间
add_mouths(d,n);在d的基础上加上n个月
last_day(d):返回指定月份的最后一天
SELECT * FROM EMP WHERE SYSDATE>"ADD_MONTHS"(HIREDATE, 350); 查找350个月以前入职的员工
SELECT ename ,TO_CHAR(hiredate,'yyyy-mm-dd hh24:mi:ss') FROM emp; 显示日期的时分秒;
SELECT ename,hiredate from emp where "TO_CHAR"(hiredate,'yyyy')='1980';显示1980年入职的员工
SELECT ename,hiredate from emp where "TO_CHAR"(hiredate,'mm')='12'; 显示12月份入职的员工
SELECT sys_context('userenv','DB_name') from dual;返回数据库名
SELECT sys_context('userenv','language') from dual;返回当前语言
SELECT sys_context('userenv','session_user') from dual;返回当前用户
SELECT sys_context('userenv','current_schema') from dual;返回方案名一般和用户名一致
SELECT sys_context('userenv','host') from dual;返回主机名
********************************************************************
数据库的导出和备份
exp和import  
在cmd进入oracle安装目录 运行exp命令 导出
exp userid=scott/admin@orcl tables=(emp,dept) file=d:\emp.bmp;用scott账号在orcl数据库里 导出emp,dept表 导到 d盘下面
exp userid=system/admin@orcl tables=(scott.emp,scott.dept) file=d:\emp.bmp;用system导出其他scott用户的表
exp userid=system/admin@orcl tables=(scott.emp,scott.dept) file=d:\emp.bmp rows=n;用system导出scott用户的表结构
exp userid=scott/admin@orcl tables=(emp,dept) file=d:\emp.bmp direct=y;快速导出 导出速度快 要求客户端字符集和数据库的字符集要一致
exp scott/admin@orcl owner=(scott) file=d:\scott.bmp; 导出方案 即scott用户的所有数据对象
exp userid=system/admin@orcl owner=(scott,system) file=d:\emp.bmp;用system导出scott的方案 用户导出别人的对象时要有exp_full_database权限
exp system/admin@orcl full=y inctype=complete file=d:\orcl.dmp; 导出orcl数据库
imp导入
imp userid=scott/admin@orcl tables=(emp,dept) file=d:\emp.bmp; 用法和导出一样
imp userid=system/admin@orcl file=d:\emp.bmp; 导入自己方案
imp userid=system/admin@orcl file=d:\system.bmp fromuser=system touser=scott; 导入别人的方案
imp system/admin full=y file=d:\orcl.dmp; 导出orcl数据库
********************************************************************
数据库字典视图
user_tables :当前用户所拥有的所有表  all_tables:当前用户可以访问的所有表  dba_tables: 只能是dba角色查询所有方案的所有表
select table_name from user_tables;select table_name from all_tables;select table_name from dba_tables;
dba_users:数据库用户的详细信息
select username ,password from dba_users;
dba_sys_privs:用户的系统权限视图
select * from dba_sys_privs;
dba_tab_privs:用户的对象权限视图
select* from dba_tab_privs where owner='CONNECT';
dba_role_privs:用户具有的角色
selec * from dba_role_privs where grantee='SCOTT';
oracle中邮多少角色
select * from dba_roles;
oracle中所有的系统权限
select * from system_privilege_map order by name;
oracle中所有的对象权限
select distinct privilege from dba_tab_privs;
select role from dba_roles;
select * from dba_sys_privs where grantee ='SYSTEM' 有多少系统权限
select * from dba_tab_privs where grantee ='SYSTEM'; 有多少对象权限
select * from global_name; 当前用户使用的数据库
*********************************************************************************************************************************************
约束关键字
not null:非空
unique:唯一
可为空
primary key:主键
foreign key:外键
check :强制满足某条件
create TABLE goods(
--商品表
goodsId char(8) primary key,
--主键
goodsName VARCHAR2(30),
untiprice number(10,2) check (untiprice>0),
--约束价格大于0
categery VARCHAR2(8),
provider VARCHAR2(30)
)
CREATE TABLE customer(
--客户表
customerId CHAR(8) primary key,
cname VARCHAR2(20) not NULL,
adress VARCHAR2(30),
email VARCHAR2(20) UNIQUE,
sex CHAR(2) default '男' check (sex in ('男','女')),--默认男 只能是男或女
cardId CHAR(18)
)
create table purchase(
customerId CHAR(8) references customer(customerId),
goodsId CHAR(8) references goods(goodsId),
nums NUMBER(10) CHECK(nums between 1 and 30)
)
--购物表
--添加约束
alter  TABLE goods MODIFY goodsName not null;
alter  TABLE customer add constraint bbb UNIQUE(cardId);或者
alter  TABLE customer modify cardId UNIQUE;
alter  table customer add constraint aaa check(adress in ('上海','南京','北京','武汉'));
--删除约束
alter  TABLE customer drop  constraint aaa;--当表存在主从关系时 可以用 cascade 强制删除
alter  TABLE customer drop  constraint bbb;或者
ALTER TABLE customer MODIFY UNIQUE (cardId) DISABLE;--删除唯一约束
数据字典中有user_constraints视图 可查询所有的约束信息
表级定义 和列级定义
表级定义:
create TABLE goods(
--商品表
goodsId char(8),
--主键
goodsName VARCHAR2(30),
untiprice number(10,2) ,
--约束价格大于0
categery VARCHAR2(8),
provider VARCHAR2(30),
customerId CHAR(8) ,
constraint aaa_key primary key(goodsId),
constraint bbb_check check(untiprice>0),
constraint ccc_foreign foreign key (customerId) references customer(customerId)
)
----------------------------索引--
create INDEX nameindex on customer(cname);--单列索引
create INDEX nameindex on customer(cname,customerId);--符合索引
通过视图dba_indexs和user_indexs可以查询表的所有的索引
--------------------------角色--
connect resource dba
create session :连接数据库
dba 可以自定义角色
create role 名字 not identified;角色不设置密码 就是修改角色时不用输入密码
create role myrole not identified;
conn system/admin;
grant create session to myrole;
conn scott/admin;
grant select,updata,delete on emp to myrole;
SQL> create user testrole identified by admin;
用户已创建。
SQL> grant myrole to testrole;
授权成功。
SQL> conn testrole/admin;
已连接。
SQL> select * from scott.emp;
dba 删除角色 或者有(drop anyrole)权限
drop role myrole;
*************************************
存储过程
①创建
CREATE OR REPLACE PROCEDURE test_pro IS
BEGIN
INSERT into emp values (9782,'李四','MANAGER',7698,TO_CHAR('1988-01-01','yyyy-mm-dd'),4567.4,10,20);
END;
出现错误时,show error; 显示错误信息。
②调用
exec test_pro; call test_pro;
规范
--注释单行 /*....*/ 多行注释
定义变量 V_开头:V_sal
定义常量 C_开头:C_rate
定义游标 _cursor后缀:emp_cursor
定义例外 e_开头:e_error
PL/sql 块分三部分:定义部分 执行部分 例外部分
declear :定义变量 数据类型
begin :执行部分
exception:处理各种错误
---例子1
CREATE OR REPLACE PROCEDURE test_pro IS
BEGIN
INSERT into emp values (9782,'李四','MANAGER',7698,TO_CHAR('1988-01-01','yyyy-mm-dd'),4567.4,10,20);
END;
---例子1-
BEGIN 
dbms_output.put_line('hello');
END
--块1---
declare 
V_ename VARCHAR2(10);
V_sal NUMBER(10);
BEGIN
select ename,SAL into V_ename ,V_sal from emp where EMPNO=&aa;
dbms_output.put_line('名字是:'||v_ename||'工资是'||V_sal);
exception 
when no_data_found THEN
dbms_output.put_line('请输入正确的:');
END;
----------存储过程1
CREATE or replace procedure test_emp(aename VARCHAR2,asal NUMBER) IS
BEGIN
UPDATE emp set sal=asal where ename=aename;
end;
在java中调用存储过程时由Connection得到一个 callableStatment 的prepareCall 方法调用
---函数
create function qw_hans(hename VARCHAR2) return 
number is yearsal NUMBER(7,2);
BEGIN
select sal*12+NVL(COMM, 0)*12 into yearsal from emp where ename=hename;
return yearsal;
END;
**************************************************************************
pl/sql的类型
----复合类型 定义记录实例 相当于java中的类
set serveroutput on;
declare 
type  emp_record_type IS record (ename EMP.ENAME%TYPE ,sal EMP.SAL%TYPE, title EMP.JOB%TYPE);
emp_record emp_record_type;
BEGIN
select ename,sal,job into emp_record from EMP WHERE EMPNO=7788;
dbms_output.put_line('姓名:'||emp_record.ename||' 工资:'||emp_record.sal||' 工作:'||emp_record.title);
END;
----复合类型 定义表实例 相当于java中的数组(区别pl/sql 中德下标可以为负数)当有多条记录返回时要使用游标变量
declare 
type emp_table_type is TABLE of EMP.ENAME%TYPE INDEX BY binary_integer;
emp_table emp_table_type;
BEGIN
select ename into emp_table(0) from emp where EMPNO=7788;
dbms_output.put_line('姓名:'||emp_table(0));
end;
----游标变量
declare 
type  emp_cursor_type is ref cursor;
emp_cursor emp_cursor_type;
v_ename EMP.ENAME%TYPE;
v_sal EMP.SAL%TYPE;
begin 
open emp_cursor for SELECT ename,sal  from emp where deptno=&noo;
loop
fetch emp_cursor into v_ename,v_sal;
exit when emp_cursor%notfound;
dbms_output.put_line('姓名:'||v_ename||' 工资:'||v_sal);
end loop;
end;
----游标变量 loop end loop if end if 创建过程
create or replace procedure  empcur(deptn number) IS
type  emp_cursor_type is ref cursor;
emp_cursor emp_cursor_type;
v_ename EMP.ENAME%TYPE;
v_sal EMP.SAL%TYPE;
begin 
open emp_cursor for SELECT ename,sal  from emp where deptno=deptn;
loop
fetch emp_cursor into v_ename,v_sal;
exit when emp_cursor%notfound;
if v_sal<200 THEN
v_sal:=v_sal+100;
end if;
dbms_output.put_line('姓名:'||v_ename||' 工资:'||v_sal);
end loop;
end;
----结构控制语句 
if.. then end if
loop end loop
while.. loop  end loop  

转载地址:http://gfjdi.baihongyu.com/

你可能感兴趣的文章
Android系统构架
查看>>
Android 跨应用程序访问窗口知识点总结
查看>>
各种排序算法的分析及java实现
查看>>
SSH框架总结(框架分析+环境搭建+实例源码下载)
查看>>
js弹窗插件
查看>>
自定义 select 下拉框 多选插件
查看>>
js判断数组内是否有重复值
查看>>
js获取url链接携带的参数值
查看>>
gdb 调试core dump
查看>>
gdb debug tips
查看>>
arm linux 生成火焰图
查看>>
linux和windows内存布局验证
查看>>
linux config
查看>>
linux insmod error -1 required key invalid
查看>>
linux kconfig配置
查看>>
linux不同模块completion通信
查看>>
linux printf获得时间戳
查看>>
C语言位扩展
查看>>
linux dump_backtrace
查看>>
linux irqdebug
查看>>