资源描述:
《oracle ebs 开发心得》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、技术心得一、SQL查询:1、”列出同部门中工资高于1000的员工数量超过2人的部门,显示部门名字、地区名称”.查询语句如下:selectdistinctdept.department_name,loc.cityfromemployeesemp,departmentsdept,locationslocwhereemp.department_id=dept.department_idanddept.location_id=loc.location_idandEXISTS(select1fromemployeesemp2whereemp2.department_id
2、=emp.department_idandemp2.salary>1000groupbyemp2.department_idhavingcount(emp2.department_id)>2)通常我们只需要对记录逐行的筛选,对于分组数据我们只能使用分组语句avg、max等,也就是说如果你想在select中得到这个属性那么“它们“也必须出现在groupby中或者你只想得到一个统计数据.回顾上面的例子,我们也可以用以下语句完成:selectdept.department_name,loc.city,count(*)fromemployeesemp,departme
3、ntsdept,locationslocwhereemp.department_id=dept.department_idanddept.location_id=loc.location_idandemp.salary>1000groupbydept.department_name,loc.cityhavingcount(*)>2对于groupby来说每一条emp.department_id必对应唯一dept.department_id、dept.department_name因此不论groupbydepartment_id还是groupbydepartmen
4、t_name,loc.city达到的效果是一样的2、用一条语句查询出scott.emp表中每个部门工资前三位的数据:selectdepartment_id,max(salary)max_salary,max(decode(rank,2,salary,salary))mid_salary,min(salary)min_salaryfrom(selectdepartment_id,salary,rankfrom(selectemp.department_id,emp.employee_id,emp.salary,row_number()over(partition
5、byemp.department_idorderbyemp.salary)asrankfromemployeesemp)EwhereE.rank<=3)groupbydepartment_idrownumber()over(patitionbycolumn1orderbycolumn2),表示以column1分组对column2排序,row_number可用于筛选重复项.3、哪些员工跟Den(FIRST_NAME)、Rephaely(Last_Name)不在同一个部门.此处可能存在没有部门的员工,应该用NoExists筛选deptno与该员工不等的记录.若要求
6、空值可使用NOEXISTS若不要求空值可用EXISTS,尽量用EXISTS取代IN、ANY、ALL等操作(可提高性能),注意空值的处理!!!4、在多表连接查询中,子查询最多只可嵌套一层否则Oracle无法识别5、forhandlein:游标二、PL/SQl存储过程1、游标的使用:显式游标的使用分为四步,声明、打开、循环、关闭.打开游标:就是执行游标所对应的SELECT语句,将其查询结果放入工作区,并且指针指向工作区的首部,标识结果集合。如果游标查询语句中带有FORUPDATE选项,OPEN语句还将锁定数据库表中游标结果集合对应的数据行。如下所示:DECLARE
7、CURSORc4(dept_idNUMBER,j_idVARCHAR2)ISSELECTfirst_namef_name,hire_dateFROMemployeesWHEREdepartment_id=dept_idANDjob_id=j_id;--声明游标定义记录变量,比声明记录类型变量要方便,不容易出错v_emp_recordc4%ROWTYPE;BEGIN--OPENc4(90,'AD_VP');/*LOOPFETCHc4INTOv_emp_record;IFc4%FOUNDTHENDBMS_OUTPUT.PUT_LINE(v_emp_record.f
8、_name
9、
10、'的雇佣日期是'
11、
12、v_