oracle-Oracle 关于视图查询问题

问题描述

Oracle 关于视图查询问题
CREATE OR REPLACE VIEW V_HZY_SALARY
AS
SELECT D.DEPTNO DNOD.DNAME DN
MAX(E.SAL)MAX_SAL
MIN(E.SAL)MIN_SAL
AVG(E.SAL)AVG_SAL
SUM(E.SAL)SUM_SAL
FROM EMP_HZY E DEPT D WHERE E.DEPTNO=D.DEPTNO GROUP BY D.DEPTNOD.DNAME

SELECT E.ENAMEE.SALE.DEPTNO
FROM EMP_HZY E
WHERE E.SAL/2>(SELECT AVG_SAL FROM V_HZY_SALARY WHERE DEPTNO=30)
出现单行子查询返回多个行!!新手求高人指导,谢谢。

解决方案

 WHERE E.SAL/2>(SELECT AVG_SAL FROM V_HZY_SALARY WHERE DEPTNO=30) 下面(SELECT AVG_SAL FROM V_HZY_SALARY WHERE DEPTNO=30)这个子句可能是多条,你视图中是根据 D.DEPTNOD.DNAME两个条件分组的,这里select只有一个deptno条件 可以加(SELECT top 1 AVG_SAL FROM V_HZY_SALARY WHERE DEPTNO=30)

解决方案二:
CREATE OR REPLACE VIEW V_HZY_SALARY
AS
SELECT D.DEPTNO DNOD.DNAME DN
MAX(E.SAL)MAX_SAL
MIN(E.SAL)MIN_SAL
AVG(E.SAL)AVG_SAL
SUM(E.SAL)SUM_SAL
FROM EMP_HZY E DEPT D WHERE E.DEPTNO=D.DEPTNO GROUP BY D.DEPTNOD.DNAME

SELECT E.ENAMEE.SALE.DEPTNO
FROM EMP_HZY E
WHERE E.SAL/2>(SELECT AVG_SAL FROM V_HZY_SALARY WHERE DEPTNO=30)
SELECT AVG_SAL FROM V_HZY_SALARY WHERE DEPTNO=30这个执行返回一个值,
WHERE E.SAL/2>(SELECT AVG_SAL FROM V_HZY_SALARY WHERE DEPTNO=30) 这里执行是大于这个值的都查询,不是单条语句的查询了

解决方案三:
WHERE E.SAL/2>(SELECT AVG_SAL FROM V_HZY_SALARY WHERE DEPTNO=30) 这里执行是大于这个平均值的都查询,不是单条语句的查询了

解决方案四:
WHERE E.SAL/2>(SELECT AVG_SAL FROM V_HZY_SALARY WHERE DEPTNO=30) 问题出在这一句,你可以试一下括号里的查询语句,esal/2 是不能>多个数值的,你可能写错了, 应该是WHERE E.SAL/2>(SELECT AVG(列名) from V_HZY_SALARY WHERE DEPTNO=30) 这样就可以了,子查询只会返回一个数值,esal/2>x 是可以的

解决方案五:
oracle授予所有视图的查询权限

时间: 2025-01-31 06:34:29

oracle-Oracle 关于视图查询问题的相关文章

视图语法-用oracle创建一个视图,根据不同条件查询不同的内容。

问题描述 用oracle创建一个视图,根据不同条件查询不同的内容. 我现在需要创建一个视图A,视图里面是三个视图BCD,根据一个页面传来的值判断不同的值查询不同的视图,这个值不少表中的字段.语法该怎么写?大神们帮帮忙啊!! 解决方案 比方说传来的值是E,1查询B,2查询C,3查询D CREATE OR REPLACE A_V SELECT * FROM B WHERE E = 1 UNION SELECT * FROM C WHERE E = 2 UNION SELECT * FROM D WH

Oracle隐式转换会影响物化视图查询重写

今天有人问我一个物化视图查询重写的问题,最后发现问题其实和物化视图的功能没有多大的关系,而是隐式转换导致的问题. 还是通过例子来说明这个问题: SQL> create table t ( 2  id number, 3  time date, 4  other varchar2(4000)) 5  partition by range (time) 6  (partition p1 values less than (to_date('2008-1-1', 'yyyy-mm-dd')), 7  

oracle创建物化视图报错:无效数字

问题描述 oracle创建物化视图报错:无效数字 oracle创建物化视图报错:无效数字.查询语句正常.求解答,谢谢! 解决方案 Oracle创建物化视图oracle 物化视图简单创建Oracle--大数据量创建 物化视图 解决方案二: 查询是否执行完了,应该是存在为非数字的字符

oracle中的视图详解_oracle

1.视图的概述 视图其实就是一条查询sql语句,用于显示一个或多个表或其他视图中的相关数据.视图将一个查询的结果作为一个表来使用,因此视图可以被看作是存储的查询或一个虚拟表.视图来源于表,所有对视图数据的修改最终都会被反映到视图的基表中,这些修改必须服从基表的完整性约束,并同样会触发定义在基表上的触发器.(Oracle支持在视图上显式的定义触发器和定义一些逻辑约束) 2.视图的存储 与表不同,视图不会要求分配存储空间,视图中也不会包含实际的数据.视图只是定义了一个查询,视图中的数据是从基表中获取

Oracle 常用性能视图一览表(10g)

--*************************************-- Oracle 常用性能视图一览表(10g)--************************************* Advisors     Information related to cache advisors v$pga_target_advice v$shared_pool_advice v$pga_target_advice_histogram v$java_pool_advice v$mttr

Oracle并行操作之并行查询实例解析_oracle

Oracle数据库的并行操作特性,其本质上就是强行榨取除数据库服务器空闲资源(主要是CPU资源),对一些高负荷大数据量数据进行分治处理.并行操作是一种非确定性的优化策略,在选择的时候需要小心对待.目前,使用并行操作特性的主要有下面几个方面: Parallel Query:并行查询,使用多个操作系统级别的Server Process来同时完成一个SQL查询: Parallel DML:并行DML操作.类似于Parallel Query.当要对大数据量表进行DML操作,如insert.update和

ORACLE错误一览表 方便查询_oracle

ORACLE错误一览表,方便大家查询! ORA-00001: 违反唯一约束条件 (.) ORA-00017: 请求会话以设置跟踪事件 ORA-00018: 超出最大会话数 ORA-00019: 超出最大会话许可数 ORA-00020: 超出最大进程数 () ORA-00021: 会话附属于其它某些进程:无法转换会话 ORA-00022: 无效的会话 ID:访问被拒绝 ORA-00023: 会话引用进程私用内存:无法分离会话 ORA-00024: 单一进程模式下不允许从多个进程注册 ORA-000

oracle常用经典SQL查询

oracle常用经典SQL查询 常用SQL查询:   1.查看表空间的名称及大小   select t.tablespace_name, round(sum(bytes/(1024*1024)),0) ts_size from dba_tablespaces t, dba_data_files d where t.tablespace_name = d.tablespace_name group by t.tablespace_name;   2.查看表空间物理文件的名称及大小   select

Oracle 9i基于视图(view)的约束声名

从Oracle 9i开始,Oracle允许对于视图(view)进行主键.唯一键.外键约束的声名.NOT NULL约束可以从基表继承,所以不允许显示声明. 由于视图约束仅仅是声明而已,所以其状态只能是DISABLE NOVALIDATE. 以下是一个简单范例说明: 更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/database/Oracle/ 由于此约束仅仅为"约束声明",所以不具有实际约束力: 作者:51cto博客 Oracle

sql oracle数据库关联表查询

问题描述 sql oracle数据库关联表查询 现在有一个教师表(教师号 教师名) 课程号(教师号 课程号 课程名) 教室表(教师号 课程号 教室号 教室名) 想显示所有教室的教师名和课程名. 就是想问这种关联的查询语句 排除表中一些矛盾的存在哈 谢谢 解决方案 select b.教师名,c.课程名 from 教室表 a LEFT JOIN 教师表 b ON a.教师号=b.教师号 LEFT JOIN 课程表 c ON 教师表 b ON a.教师号=c.教师号 这个才是对的,刚刚没看清楚写错了.