魔乐在线Oracle笔记超经典.doc_第1页
魔乐在线Oracle笔记超经典.doc_第2页
魔乐在线Oracle笔记超经典.doc_第3页
魔乐在线Oracle笔记超经典.doc_第4页
魔乐在线Oracle笔记超经典.doc_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1 62 2 62 3 62 4 62 5 62 6 62 7 62 图表 1 8 62 9 62 10 62 11 62 12 62 13 62 14 62 多表查询的基本语法多表查询的基本语法 查一张以上的表 就叫做多表查询 例子 查询出雇员名称 部门名称和部门所在地的 一般多表查询要用别名 15 62 统计记录数 统计记录数 查询 emp 有多少条纪录 左右连接 重点 左右连接 重点 select e empno e ename d deptno d dname d loc from emp e dept d where e deptno d deptno 部门一共四个 这里只查询出三个 因为在雇员表中没有指定 40 部门的雇员 所以在消除 笛卡尔乘机的时候没有条件符合 40 如果喜欢 40 部门显示出来 就要用左右连接了 16 62 select e empno e ename d deptno d dname d loc from emp e dept d where e deptno d deptno 在左边 表示以右边的表为准 表示右链接 40 部门出来了 所以此时就用到了有连接 证明以下规律 在左表示右连接 在右表示左连接 SQL 1999 对对 SQL 的支持 了解 的支持 了解 范例 交叉连接 范例 交叉连接 cross join 产生笛卡尔积 产生笛卡尔积 17 62 select from empt CROSS JOIN dept 查询结果 产生笛卡尔积 CREATE TABLE EMP10 AS SELECT FROM EMP WHERE DEPTNO 10 select from emp NATURAL JOIN dept 自动进行匹配 范例 范例 USING 子句 直接关联的操作列子句 直接关联的操作列 select from emp e JOIN dept d USING deptno where deptno 30 把两张表的详细信息进行打印输出 范例 范例 ON 子句子句 自己编写连接条件自己编写连接条件 select from emp e JOIN dept d ON e deptno d deptno where e deptno 30 范例 左连接 左外连接 右连接 右外连接 范例 左连接 左外连接 右连接 右外连接 LEFT JOIN RIGHT JOIN 组函数和分组统计 重点 组函数和分组统计 重点 组函数组函数 在 SQL 常用组函数有如下几个 COUNT 求全部记录数 MAX 求最大记录数 MIN 求最小记录数 AVG 平均 SUM 求和 分组统计分组统计 GROUP BY select deptno COUNT empno from emp GROUP BY deptno 算出部门表的平均工资 算出部门表的平均工资 18 62 select AVG sal from emp 算出每个部门的平均工资 算出每个部门的平均工资 Select deptno AVG sal from emp 之所以会出现这个错误是因为数据库不知道怎样在结果集中处理 deptno 列 考虑一下 这个查询既试图使用 AVG 聚合函数对多 行记录进行操作 却又试图 从每行中获得 deptno 列的值 这两个操作是不可能同时完成的 此时必须提供 一个 GROUP BY 子句告诉数据库将 deptno 列相同的行分组在一起 然后数据库 就可以将这些组中的行传递给 AVG 函数 警告 如果查询中包含聚合函数 而所选择的列并不在聚合函数中 那么这些列就必 须在 GROUP BY 子句中 按部门分组 并显示部门名称 以及部门员工数按部门分组 并显示部门名称 以及部门员工数 select d dname count e empno from dept d emp e where d deptno e deptno GROUP BY d dname 要求查出平均工资大于要求查出平均工资大于 2000 的部门编号和平均工资的部门编号和平均工资 select deptno AVG sal from emp WHERE AVG sal 2000 GROUP BY deptno 之所以会出现这个错误是因为 WHEREWHEREWHERE 子句只能用来对单行而不是行组进行过滤子句只能用来对单行而不是行组进行过滤子句只能用来对单行而不是行组进行过滤子句只能用来对单行而不是行组进行过滤 要过 要过 滤行组 可以使用滤行组 可以使用 HAVING 子句 子句 19 62 范例 显示非销售人员工作名称以及从事同一工作雇员的月工资的总和 并且要满足从事范例 显示非销售人员工作名称以及从事同一工作雇员的月工资的总和 并且要满足从事 同一工作的雇员的月工资合计大于同一工作的雇员的月工资合计大于 5000 输出结果按月工资的合计升序排列 输出结果按月工资的合计升序排列 1 显示全部的非销售人员 显示全部的非销售人员 job SALESMAN select from emp where job salesman 2 按工作分组同时求出工资的总和按工作分组同时求出工资的总和 Select job SUM sal from emp WHERE job SALESMAN GROUP BY job 3 对分组条件进行限制对分组条件进行限制 Select job SUM sal from emp WHERE job SALESMAN GROUP BY job HAVING SUM sal 5000 4 使用排序 按升序排列使用排序 按升序排列 Select job SUM sal su from emp WHERE job SALESMAN GROUP BY job HAVING SUM sal 5000 order by su 分组的简单原则 分组的简单原则 只要一列上存在重复的内容才考虑用分组 注意 注意 分组函数可以嵌套使用 但是在组函数嵌套的时候不能再出现分组条件的查询语句 范例 范例 求出平均工资最高的部门 错误代码 Select deptno MAX AVG sal from emp GROUP BY deptno Select MAX AVG sal from emp GROUP BY deptno 正确 20 62 子查询子查询 范例 要求查询出比范例 要求查询出比 7654 工资高的全部雇员信息工资高的全部雇员信息 首先 要知道 7654 雇员的工资是多少 然后 以此查询结果为查询依据 只要其他工资大于 sal 则表示符合条件 首先首先 查询出比查询出比 7654 工资高的全部雇员信息工资高的全部雇员信息 select from emp where sal select sal from emp where empno 7654 其次 与其次 与 7788 工作一样工作一样 Select job from emp where empno 7788 所以 select from emp where sal select sal from emp where empno 7654 and job Select job from emp where empno 7788 21 62 数据库更新操作数据库更新操作 数据库的主要操作分为两种 1 数据库的查询操作 SELECT 2 数据库的更新操作 uUPDATE DELETE INSERT 此时为了保存原始的 emp 表的信息 在进行更新 删除 插入表前先将表复制一份 Create table myemp AS select from emp 此时数据已经复制出来 添加数据添加数据 Insert into emp empno ename job hiredate sal deptno Values 7899 张三 清洁工 20 2 月 2000 9000 40 使用简略写法使用简略写法 并不推荐并不推荐 因为现在是要添加所有字段的内容 所以可以不写上任何字段 因为现在是要添加所有字段的内容 所以可以不写上任何字段 名称 只要值的数量和顺序和数据库表中的顺序一致 名称 只要值的数量和顺序和数据库表中的顺序一致 Insert into myemp values 7899 张三 清洁工 9000 40 之前插入数据的时候 日期的格式是使用了表中固定好的格式 如果现在有这样一个日期之前插入数据的时候 日期的格式是使用了表中固定好的格式 如果现在有这样一个日期 2009 10 10 日期格式 那么现在如何把这种格式的日期插入进去呢 日期格式 那么现在如何把这种格式的日期插入进去呢 使用使用 TO DATE 函数 将一个字符串类型的数据变为函数 将一个字符串类型的数据变为 DATE 类型的数据 类型的数据 Insert into myemp empno ename job hiredate sal deptno Values 7899 张三 清洁工 TO DATE 2009 07 19 yyyy mm dd 9000 40 修改数据修改数据 UPDATE 表名称 set 要修改的字段 新值 要修改的字段 新值 UPDATE 表名称 set 要修改的字段 新值 要修改的字段 新值 WHERE 修改条件 22 62 修改数据修改数据 删除全部删除全部 DELETE FROM 表名称 局部删除局部删除 DELETE FROM 表名称 WHERE 删除条件 事物处理事物处理 范例 创建一张只包含范例 创建一张只包含 10 部分雇员的一张临时表部分雇员的一张临时表 CREATE TABLE EMP10 AS SELECT FROM EMP WHERE DEPTNO 10 打开一个 oracle 终端 进行删除操作 DELETE FROM EMP10 WHERE SAL 2450 显示已经删除 然后再打开另外一个 oracle 终端 查询到 sal 2450 这条数据还在 证明这条数据并没有被 删除 这就是 oracle 事务的概念 事务处理 就是保证数据操作的完整性 所有的操作要么同时成功要么同时失败 在 ORACLE 中对每一个连接到数据库中的窗口 都会与数据库建立一个 Session 一个 Session 对数据库所做得修改不会马上反应到数据库的真实数据之上 是允许回滚的 当一 个 Session 提交所有操作之后 数据库才真正做出修改 进行同样的删除操作 DELETE FROM EMP10 WHERE SAL 2450 结果它停住了 等待第一个终端操作结束再动 这就是 ORACLE 死锁死锁 提交事务 提交事务 COMMIT 回滚 回滚 Roolback 23 62 ORACLE 常用命令常用命令 查看所有表查看所有表 select table name from user tables 显示表结构显示表结构 describe nchar tst nchar tst 为表名 查询练习查询练习 1 列出至少有一个员工的所有部门信息列出至少有一个员工的所有部门信息 第一步 列出所有部门的员工数量 Select deptno count empno from emp group by deptno 第二步 列出员工大于 1 的部门 Select deptno count empno from emp group by deptno HAVING COUNT empno 1 第三步 通过多表关联查 把子查询做为一个查询出来 select d ed cou FROM dept d SELECT deptno COUNT empno cou FROM emp GROUP BY deptno HAVING COUNT empno 1 ed WHERE d depno ed deptno Comment U1 Comment MS2 查找 e 表的直属领 导编号等于 m 表的员工 也就是说 m 表是领导表 m 表的雇佣日期晚于 e 表 24 62 2 列出薪金比列出薪金比 SMITH 多的所有员工多的所有员工 第一步 求出 SMITH 的工资 SELECT sal FROM EMP WHERE ENAME SMITH 第二步 select ename from emp where sal SELECT sal FROM EMP WHERE ENAME SMITH 3 列出所有员工姓名及其直接上级的姓名列出所有员工姓名及其直接上级的姓名 此程序属于自身关联查询 SELECT e ename d ename FROM emp e emp d where e mgr d empno 4 列出受雇日期早于其直接上级的所有员工的编号列出受雇日期早于其直接上级的所有员工的编号 姓名姓名 部门名称部门名称 自身关联 查找 mgr empno 的同时还要比较 Hiredate 第一步 SELECT e empno e ename FROM emp e emp m WHERE e mgr m empno AND e hiredate m hiredate 第二步 SELECT e1 empno e1 ename d dname FROM SELECT e empno e ename FROM emp e emp m WHERE e mgr m empno AND e hiredate m hiredate e1 dept d WHERE e1 deptno d deptno ORA 00904 invalid identifier 这个错误是因为这个错误是因为 字段名写错了字段名写错了 检查下字段名 发现检查下字段名 发现 e1 表的查询结果没有表的查询结果没有 deptno 字段字段 所以报错了 所以报错了 SELECT e1 empno e1 ename d dname FROM SELECT e empno e ename e deptno FROM emp e emp m WHERE e mgr m empno AND e hiredate m hiredate e1 dept d WHERE e1 deptno d deptno 25 62 李兴华给出的标准答案是李兴华给出的标准答案是 SELECT e empno e ename d dname FROM emp e emp m dept d WHERE e mgr m empno AND e hiredate1500 GROUP BY job 结果出来 但是是错的 李兴华 分析一 按工作分组 分组条件最低工资大于 1500 SELECT job MIN sal FROM emp GROUP BY job HAVING MIN sal 1500 分析二 SELECT e job COUNT e empno FROM emp e WHERE e job IN SELECT job FROM emp GROUP BY job HAVING MIN sal 1500 GROUP BY e job Comment U3 e mgr m empno e 表的领导编号等于 m 表的员工编号 emp 表自身关联 m 表的员工 e 表的 领导 所以 m ename 就是就是 领导领导 Comment U4 工资属于这个区间内 表示这个等级 27 62 8列出在部门列出在部门 SALES 销售部销售部 工作的员工的姓名工作的员工的姓名 假定不知道销售部的部门编号假定不知道销售部的部门编号 1 Select deptno from dept where dname SALES 将第一步骤作为条件写子查询 2 select ename from emp where deptno Select deptno from dept where dname SALES 9 列出薪金高于公司平均薪金的所有员工列出薪金高于公司平均薪金的所有员工 所在部门所在部门 上级领导上级领导 公司的工资等级 公司的工资等级 1 算出平均工资 Select AVG sal from emp 2 select from emp where sal Select AVG sal from emp 答案 第一步求出公司的平均工资 1 第二步 列出薪金高于平均工资的所有雇员的信息 2 第三步 要求所在部门肯定要与部门表关联关联查所在部门的信息 3 SELECT e d dname d loc FROM emp e dept d WHERE sal SELECT AVG sal FROM emp AND e deptno d deptno 第四步要想查询上级领导肯定要与自身关联 4 SELECT e empno e ename m ename d dname d deptno d loc FROM emp e dept d emp m WHERE e sal SELECT AVG sal FROM emp AND e deptno d deptno AND e mgr m empno 第五步 求出雇员的工资等级 SELECT e empno e ename s grade m ename d dname d deptno d loc FROM emp e dept d emp m salgrade s WHERE e sal SELECT AVG sal FROM emp AND e deptno d deptno AND e mgr m empno AND e sal BETWEEN s losal AND s hisal Comment U5 合理的情况是没有 deptno 30 的 28 62 10 列出与列出与 SCOTT 从事相同工作的所有员工及部门的名称 从事相同工作的所有员工及部门的名称 dims 第一步 SELECT job FROM emp e where e ename SCOTT 第二步 SELECT e ename d dname FROM emp e dept d where e job SELECT job FROM emp e where e ename SCOTT AND e ename SCOTT AND e deptno d deptno 11 列出薪金等于部门列出薪金等于部门 30 中员工的薪金的所有员工的姓名和薪金中员工的薪金的所有员工的姓名和薪金 dims SELECT e ename e sal FROM emp e where sal IN SELECT sal FROM emp where deptno 30 AND deptno30 12 列出薪金高于在部门列出薪金高于在部门 30 工作的所有员工的薪金的员工姓名和薪金工作的所有员工的薪金的员工姓名和薪金 部门名称 部门名称 Select sal from emp where sal MAX SELECT sal FROM emp where deptno 30 答案 在之前的程序改 使用 ALL 比最大的还要大 SELECT e ename e sal d dname d loc FROM emp e dept d where sal ALL SELECT sal FROM emp where deptno 30 AND e deptno30 AND e deptno d deptno 13 列出在每个部门工作的员工数量 平均工资和平均服务期限列出在每个部门工作的员工数量 平均工资和平均服务期限 第一步查询出每个部门的员工数量 SELECT d dname COUNT empno FROM emp e dept d WHERE e deptno d deptno GROUP BY d dname 答案 在第一步的基础上 第二步要读出平均工资平均工资和服务期限服务期限 尝试 SELECT d dname COUNT empno AVG e sal AVG e hiredate FROM emp e dept d WHERE e deptno d deptno GROUP BY d dname SELECT d dname COUNT empno AVG e sal AVG MONTHS BETWEEN sysdate e hiredate 12 年年 FROM emp e dept d WHERE e deptno d deptno GROUP BY d dname Comment U6 ORA 00979 不是 GROUP BY 表达式 错误 29 62 oracle 中的 months between date1 date2 months between date1 date2 函数可以实现年龄的计算 此函数 的返回值为 date1 与 date2 之间的月数 比如 months between 2008 8 8 2005 4 8 执行的结果是 40 执行 select months between 2008 8 8 2005 4 8 from dual 不包括双引号 date1 和 date2 都是 DATE 类 型的 用 SYSDATE 可以获得系统时间 用现在的时间减去变量中的时间再与年 龄总月 数比较即可实现这一功能 14 列出所有员工的姓名列出所有员工的姓名 部门名称和工资部门名称和工资 dims Select e ename d dname e sal from emp e dept d where e deptno d deptno 15 列出所有部门的详细信息和部门人数列出所有部门的详细信息和部门人数 第一步 这种题型肯定是多表关联子查询 首先列出部门的人数 SELECT deptno dno COUNT empno cou FROM emp GROUP BY deptno 第二步 把以上的结果当成一张临时表出现 SELECT d ed cou FROM dept d SELECT deptno dno COUNT empno cou FROM emp CROUP BY deptno ed WHERE d deptno ed dno 16 列出各种工作的最低工资及从事此工作的雇员姓名列出各种工作的最低工资及从事此工作的雇员姓名 1 查找工资最低的工作 SELECT job MIN sal FROM emp GROUP BY job 2 SELECT e ename e job cou minsal FROM SELECT job MIN sal minsal empno FROM emp GROUP BY job cou emp e WHERE e empno cou empno 答案 SELECT FROM emp WHERE sal IN SELECT MIN sal FROM emp GROUP BY job 17 列出各个部门的列出各个部门的 MANAGER 经理经理 的最低薪金的最低薪金 dims Select d dname MIN e sal From emp e dept d Where e deptno d deptno AND e job MANAGER group by d dname 18 列出所有员工的年工资列出所有员工的年工资 按年薪从低到高排序按年薪从低到高排序 在处理年薪的时候 要处理奖金 奖金要使用 NVL 函数处理 SELECT ename sal NVL comm 0 12 income FROM emp ORDER BY income 19 查出某个员工的上级主管查出某个员工的上级主管 并要求出这些主管中的薪水超过并要求出这些主管中的薪水超过 3000 SELECT DISTINCT m FROM emp e emp m WHERE e mgr m empno AND m sal 3000 30 62 20 求出部门名称中求出部门名称中 带带 s 字符的部门员工的工资合计字符的部门员工的工资合计 部门人数部门人数 查询部门表的部门名称查询部门表的部门名称 使用模糊查询使用模糊查询 以确定部门的编号以确定部门的编号 SELECT deptno FROM dept WHERE dname LIKE S 以上面的结果作为查询的条件 SELECT deptno SUM sal COUNT empno FROM emp WHERE deptno IN SELECT deptno FROM dept WHERE dname like S GROUP BY deptno 21 给任职日期超过给任职日期超过 10 年的人加薪年的人加薪 10 UPDATE emp SET sal sal sal 0 1 WHERE MONTHS BETWEEN sysdate hiredate 12 10 31 62 创建表和管理表 创建表和管理表 重点重点 ORACLE 复制表的语法 CREATE TABLE 表名称 AS 子查询 如果现在子查询写的是 SELECT FROM emp 表示将表结构和内容一起复制 如果现在子查询写的是 SELECT FROM emp WHERE 1 2 加入一个永远不可能成立的 条件 表示只是复制表结构不复制表内容 CREATE TABLE person f Pid VARCHAR 18 Name VARCHAR 200 Age NUMBER 3 Birthday DATE SEX VARCHAR 2 DEFAULT 男 表的删除表的删除 DELETE TABLE 表名称 范例 删除范例 删除 person 表表 DELETE TABLE person 32 62 表的修改表的修改 范例 为范例 为 person 表增加表增加 address 列列 ALTER TABLE person ADD address VARCHAR 200 DEFAULT 暂无地址 为表重命名为表重命名 在 Oracle 中提供了 RENAME 命名 可以为表重新命名 但是此语法只能在 Oracle 中使用 语法格式 RENAME 旧的表名称 TO 新的表名称 范例 将 person 重新命名为了 tperson RENAME person TO miaofang 33 62 思考题思考题 分析 这是一道面试题 只能用笛卡尔乘机 Select e country d country from country d country e where e countryd country 34 62 约束约束 约束的分类约束的分类 主键约束主键约束 PRIMARY KEY 主键约束一般都在 id 上使用 而且本身已经默认了内容不能为空 主键约束可以在建 表的时候指定 范例范例 建立建立 person 表 在表 在 pid 上增加主键约束上增加主键约束 CREATE TABLE person Pid VARCHAR 18 PRIMARY KEY Name VARCHAR 200 Age NUMBER 3 Birthday DATE SEX VARCHAR 2 DEFAULT 男 insert into person values null 柯为权 123 TO DATE 2009 07 19 yyyy mm dd TO DATE 2009 07 19 yyyy mm dd TO DATE 2009 07 19 yyyy mm dd 男 主键为空或者重复都会报错主键为空或者重复都会报错 35 62 范例范例 将将 person 中的中的 pid 指定名称指定名称 CREATE TABLE person a Pid VARCHAR 18 Name VARCHAR 200 Age NUMBER 3 Birthday DATE SEX VARCHAR 2 DEFAULT 男 CONSTRAINT person pid pk PRIMARY KEY pid ConstraintConstraintConstraint k n strent k n strent k n strent 约束 约束 约束 限制限制限制 person pid pk 表示约束的名称 非空约束非空约束 NOT NULL CREATE TABLE person a Pid VARCHAR 18 NOT NULL Name VARCHAR 200 NOT NULL Age NUMBER 3 Birthday DATE SEX VARCHAR 2 DEFAULT 男 CONSTRAINT person pid pk PRIMARY KEY pid 表示插入了两个非空约束的声明 证明此时 PID 跟 name 是不允许为空的 唯一约束唯一约束 UNIQUE 表示一个字段中的内容是唯一的 其他列不允许重复 CREATE TABLE person a Pid VARCHAR 18 NOT NULL Name VARCHAR 200 UNIQUE NOT NULL Age NUMBER 3 Birthday DATE SEX VARCHAR 2 DEFAULT 男 CONSTRAINT person pid pk PRIMARY KEY pid 表示姓名唯一 36 62 检查约束检查约束 CHECK 使用检查约束来判断一个列中插入的内容是否合法 例如 年龄 性别的取值范围 CREATE TABLE person a Pid VARCHAR 18 NOT NULL Name VARCHAR 200 NOT NULL Age NUMBER 3 CHECK age BETWEEN 0 AND 150 Birthday DATE SEX VARCHAR 2 DEFAULT 男 CHECK sex I N 男 女 中性 CONSTRAINT person pid pk PRIMARY KEY pid 修改约束修改约束 了解了解 一张表建立完成之后 则可以为其添加约束 DROP TABLE person CASCADE CONSTRAINT CREATE TABLE person Pid VARCHAR 18 PRIMARY KEY Name VARCHAR 200 Age NUMBER 3 Birthday DATE SEX VARCHAR 2 DEFAULT 男 此时 需要为表中添加若干个约束 添加约束的语法如下 ALTER TABLE 表名称 ADD CONSTRAINT 约束名称 约束类型 约束字段 关于约束类型的命名一定要统一 1 PRIMARY KEY 主键字段 PK 2 UNIQUE 字段 UK 3 CHECK 字段 CK 4 FOREIGN KEY 父字段 子字段 FK ALTER TABLE person ADD CONSTRAINT person pid PK PRIMARY KEY pid ALTER TABLE person ADD CONSTRAINT person name UK UNIQUE pid ALTER TABLE person ADD CONSTRAINT person age CK CHECK age BETWEEN 0 AND 150 ALTER TABLE person ADD CONSTRAINT person sex CK CHECK sex IN 男 女 中 37 62 ROWNUM 重点重点 ROWNUM 表示行号 实际上此是一个列 但是这个列是一个伪列 此列可以在每张表中 出现 范例范例 在查询雇员表上 加入 ROWNUM SELECT ROWNUM empno ename job sal hiredate FROM emp 从运行上看 ROWNUM 本身采用自动编号的形式出现 有什么用处呢 例如例如 现在假设只想显示前 5 条记录 条件中 ROWNUM 5 SELECT ROWNUM empno ename job sal hiredate FROM emp WHERE ROWNUM 1000000 在这里 我们不能用 where 来筛选超过 1000000 的地区 因为表中不存在这样一条记 录 相反 HAVING 子句可以让我们筛选成组后的各组数据 53 62 oracle 常见问题常见问题 1 在打开在打开 PL SQL DEVELOP 的时候的时候 回弹出回弹出 ORA 12170 TNS 连接超时连接超时 关闭掉杀毒跟防火墙都无法解决 关闭掉杀毒跟防火墙都无法解决 点 Net Manager 设置好主机名 也可以设置设置好主机名 也可以设置 IP 地址 但是每次都要重新设置 地址 但是每次都要重新设置 Ok 成功解决 成功解决 54 62 2 查找 查找 SQL PL 生成生成 下一个序列号下一个序列号 在在 Oracle 库中查询出下个自动生成的库中查询出下个自动生成的 id 号号 3 ORA 00904 INVALID IDENTIFIER 解决办法解决办法 字段名错误字段名错误 ORA 00904 invalid identifier 这个错误是因为 字段名写错了 检查下字段名 3 oracle 10g 安装成功之后 安装成功之后 scott 用户被锁定问题用户被锁定问题 原因 默认 Oracle10g 的 scott 不能登陆 解决 1 conn sys sys as sysdba 以 DBA 的身份登录 2 alter user scott account unlock 然后解锁 3 conn scott tiger 弹出一个修改密码的对话框 修改一下密码就可以了 具体操作步骤如下 C sqlplus 请输入用户名 sys 输入口令 sys as sysdba 注意 在口令这里输入的密码后面必须要跟上 as sysdba 才 可以 SQL alter user scott account unlock 用户已更改 SQL commit 提交完成 SQL conn scott tiger 更改 scott 口令 新口令 tiger 重新键入新口令 tiger 口令已更改 已连接 完成 4 ORACLE 连接其他地址的库连接其他地址的库 在 ORACLE 安装目录下的 C oracle product 10 2 0 db 1 NETWORK ADMIN 的 tnsnames ora 文件 tnsnames ora Network Configuration File C oracle product 10 2 0 db 1 network admin tnsnames ora Comment U20 这就是对应地址 10 249 254 74 的配置 55 62 tnsnames ora Generated by Oracle configuration tools ORCL DESCRIPTION ADDRESS PROTOCOL TCP HOST localhost PORT 1521 CONNECT DATA SERVER DEDICATED SERVICE NAME orcl EXTPROC CONNECTION DATA DESCRIPTION ADDRESS LIST ADDRESS PROTOCOL IPC KEY EXTPROC1 CONNECT DATA SID PLSExtProc PRESENTATION RO orcl74 DESCRIPTION ADDRESS LIST ADDRESS PROTOCOL TCP HOST 10 249 254 74 PORT 1521 CONNECT DATA SERVICE NAME orcl 如果要连接 jdbc url jdbc oracle thin 10 249 254 74 1521 orcl pool url jdbc oracle thin zhmwc zhgmcc 把创建视图的权限赋给把创建视图的权限赋给 scott 在用在用 scott 登入登入 SELECT FROM USER SYS PRIVS 这样就可以知道当前用户的权限 常用的赋权命令常用的赋权命令 1 创建用户创建用户 CREATE USER TEST INDENTIFIED BY TEST 这样就创建了一个用户名密码都为 TEST 的用户 2 登录权限登录权限 GRANT CREATE SESSION TO TEST 这样 TEST 用户就能成功登陆进去 3 建表权限建表权限 GRANT CREATE TABLE TO TEST 4 使用表空间权限使用表空间权限 GRANT UNLIMITED TABLESPACE TO TEST 5 查询当前用户的系统权限 查询当前用户的系统权限 SELECT FROM USER SYS PRIVS 这样就可以知道当前用户的权限这样就可以知道当前用户的权限 7 撤销权限撤销权限 REVOKE CREATE TABLE FROM TEST 8 创建用户创建用户 9 CREATE U

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论