- 1、本文档共12页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Oracle_Ebs_开发心得
技术心得
一、SQL查询:
1、”列出同部门中工资高于1000的员工数量超过2人的部门,显示部门名字、地区名称”.查询语句如下:
select distinct dept.department_name,loc.cityfrom employees emp,departments dept,locations locwhere emp.department_id=dept.department_idand dept.location_id=loc.location_idand EXISTS( select 1 from employees emp2 where emp2.department_id=emp.department_id and emp2.salary1000 group by emp2.department_id having count(emp2.department_id)2)
通常我们只需要对记录逐行的筛选,对于分组数据我们只能使用分组语句avg、max等,也就是说如果你想在select中得到这个属性那么“它们“也必须出现在group by中或者你只想得到一个统计数据.回顾上面的例子,我们也可以用以下语句完成:
select dept.department_name,loc.city,count(*)from employees emp,departments dept,locations locwhere emp.department_id=dept.department_idand dept.location_id=loc.location_idand emp.salary1000group by dept.department_name,loc.cityhaving count(*) 2
对于group by来说每一条emp.department_id必对应唯一dept.department_id、dept.department_name因此不论group by department_id还是group by department_name,loc.city达到的效果是一样的
2、用一条语句查询出scott.emp表中每个部门工资前三位的数据:
select department_id,max(salary) max_salary,max(decode (rank,2,salary,salary))mid_salary,min(salary) min_salary
from
(
select department_id,salary,rank from
(select emp.department_id,emp.employee_id,emp.salary,row_number()over(partition by emp.department_id order by emp.salary) as rank
from employees emp) E
where E.rank=3
)
group by department_id
rownumber()over(patition by column1 order by column2),表示以column1分组对column2排序,row_number可用于筛选重复项.
3、哪些员工跟Den(FIRST_NAME)、Rephaely(Last_Name)不在同一个部门.
此处可能存在没有部门的员工,应该用No Exists筛选deptno与该员工不等的记录.若要求空值可使用NO EXISTS若不要求空值可用EXISTS,尽量用EXISTS取代IN、ANY、ALL等操作(可提高性能),注意空值的处理!!!
4、在多表连接查询中,子查询最多只可嵌套一层否则Oracle无法识别
5、for handle in:游标
二、PL/SQl存储过程
游标的使用:
显式游标的使用分为四步,声明、打开、循环、关闭. 打开游标:就是执行游标所对应的SELECT 语句,将其查询结果放入工作区,并且指针指向工作区的首部,标识结果集合。如果游标查询语句中带有FOR UPDATE选项,OPEN 语句还将锁定数据库表中游标结果集合对应的数据行。
DECLARE CURSOR c4(dept_id NUMBER, j_id VARCHAR2) IS SELECT first_name f_name, hire_date FROM employees WHERE department_id = dept_id AND job_id = j_id; --声明游
文档评论(0)