首页 > 数据库 >oracle练习2024.08.15

oracle练习2024.08.15

时间:2024-08-15 13:52:55浏览次数:13  
标签:15 employees 2024.08 employee job department oracle id select

--1.创建一个名为‘EMP_DETAILS_VIEW’的只读视图,包含各个员工的员工编号、员工名、职位编号、职位名称、部门编号、国家信息和区域信息:

create view emp_details_view as
select 
    e.employee_id as employee_id,
    e.first_name || ' ' || e.last_name as employee_name,
    e.job_id as job_id,
    j.job_title as job_title,
    e.department_id as department_id,
    l.country_id as country_id,
    r.region_name as region_name
from 
    employees e
join 
    jobs j on e.job_id = j.job_id
join 
    departments d on e.department_id = d.department_id
join 
    locations l on d.location_id = l.location_id
join 
    countries c on c.country_id=l.country_id
join    
    regions r on c.region_id = r.region_id;
    SELECT * FROM EMP_DETAILS_VIEW;

--2.创建一个名为‘DEPT_STAT_VIEW’的视图,包含部门号、部门人数、部门平均工资、部门最高工资、部门最低工资以及部门工资总和:
select * from employees
select * from locations
select * from emp_details_view

create view emp_details_view as
select 
    e.department_id as department_id,
    count(e.employee_id) as peoplenum,
    avg(e.salary) as avgsalary,
    max(e.salary) as maxs,
    min(e.salary) as mins,
    sum(e.salary) as sums
from 
    employees e
group by 
    e.department_id;
--3.创建名为‘PROC_SHOW_EMP’的存储过程,以部门编号为参数,查询并输出部门平均工资,以及该部门中比该部门平均工资高的员工信息:

create or replace procedure PROC_SHOW_EMP(dpt_id number)
is
avs number;
type tabtype is table of employees%rowtype;
v_employees tabtype;
begin
  select avg(salary) into avs from employees where department_id=dpt_id;
  dbms_output.put_line('该部门平均工资:'||avs);
  select * bulk collect into v_employees from employees where salary>avs;
  for i in 1..v_employees.last loop
    dbms_output.put_line(v_employees(i).employee_id||','||v_employees(i).first_name||','||v_employees(i).last_name
    ||','||v_employees(i).email||','||v_employees(i).phone_number||','||v_employees(i).hire_date||','||v_employees(i).job_id
    ||','||v_employees(i).salary||','||v_employees(i).commission_pct||','||v_employees(i).manager_id||','||v_employees(i).department_id);
  end loop;
end;

call proc_secure_dml();

--4.创建名为‘PROC_RETURN_DEPTINFO’的存储过程,以部门编号为参数返回该部门的人数和平均工资:
create or replace procedure PROC_RETURN_DEPTINFO(dpt_id number)
is
avs number;
peos number;
begin
  select avg(salary) into avs from employees where department_id=dpt_id;
  dbms_output.put_line('该部门平均工资:'||avs);
  select count(salary) into peos from employees where department_id=dpt_id;
  dbms_output.put_line('人数:'||peos);
end;

--5.创建名为‘PROC_SECURE_DML’的存储过程,检查当前用户操作时间是否为工作时间,非工作时间直接报错:(即周一到周五,时间为08:00~18:00)
08:00~18:00)
create or replace procedure PROC_SECURE_DML
is
begin
  if to_char(sysdate,'hh24:mi') not between '08:00' and '18:00'
   or to_char(sysdate,'d') in (7,1) then 
     raise_application_error(-20001,'当前操作时间为非工作时间');
   end if;
end;
call PROC_SECURE_DML();
--6.创建名为‘PROC_EMP_INSERT’的存储过程,根据用户输入的参数向EMPLOYEES表插入数据:
create or replace procedure PROC_EMP_INSERT(eid  number,fname varchar2,lname varchar2,emai varchar2,hidate date,jbid varchar2)
is
begin
  insert into employees(employee_id,first_name,last_name,email,hire_date,job_id) values(eid,fname,lname,emai,hidate,jbid);
end;

call PROC_EMP_INSERT(666,'adfas','sdfa','asfd',sysdate,'AD_PRES');
--7.创建名为‘PROC_JOB_CHANGE’的存储过程,输入员工编号和职位,以实现员工职位的调动。如果输入的职位没有变动,
--则报“the new job title is as same as before!”错误:
select * from employees
create or replace procedure proc_job_change (
    p_employee_id in employees.employee_id%type,
    p_new_job     in employees.job_id%type
) is
    v_current_job employees.job_id%type;
begin
    select job_id
    into v_current_job
    from employees
    where employee_id = p_employee_id;
    if v_current_job = p_new_job then
        raise_application_error(-20001, 'The new job title is the same as before!');
    else
        update employees
        set job_id = p_new_job
        where employee_id = p_employee_id;
    end if;
exception
    when no_data_found then
        raise_application_error(-20002, 'Employee ID does not exist.');
    when others then
        rollback;
        raise;
end;
call proc_job_change(101,60);
--8.创建名为‘PROC_DEPARTMENT_CHANGE’的存储过程,输入员工编号和部门名称,以实现员工部门的调动。
--如果输入的部门没有变动,则报“the new department name is as same as before!”错误:
create or replace procedure proc_job_change (
    p_employee_id in employees.employee_id%type,
    p_new_dept     in employees.department_id%type
) is
    v_current_dept employees.department_id%type;
begin
    select department_id
    into v_current_dept
    from employees
    where employee_id = p_employee_id;
    if v_current_dept = p_new_dept then
        raise_application_error(-20001, 'The new dept title is the same as before!');
    else
        update employees
        set department_id = p_new_dept
        where employee_id = p_employee_id;
    end if;
exception
    when no_data_found then
        raise_application_error(-20002, 'Employee ID does not exist.');
    when others then
        rollback;
        raise;
end;
--9.创建名为‘FUNC_EMP_JOB_TITLE’的函数,以员工编号为参数,返回员工的职位名称:
create or replace function func_emp_job_title (
    p_employee_id in employees.employee_id%type
) return employees.job_id%type
is
    v_job_id employees.job_id%type;
begin
    select job_id
    into v_job_id
    from employees
    where employee_id = p_employee_id;
    return v_job_id;
exception
    when no_data_found then
        return null;
    when others then
        raise;
end;


 

标签:15,employees,2024.08,employee,job,department,oracle,id,select
From: https://blog.csdn.net/qq_47363378/article/details/141220456

相关文章

  • day44-dynamic programming-part11-8.15
    tasksfortoday:1.1143.最长公共子序列2.1035.不相交的线3.53.最大子序和4.392.判断子序列(编辑距离问题)------------------------------------------------------------------------------1.1143.最长公共子序列300:single,ascending,non-continuity674:s......
  • 520-基于ZU15EG 适配AWR2243的雷达验证底板 XCZU15EG架构高速信号处理板
    基于ZU15EG适配AWR2243的雷达验证底板一、板卡概述   本板卡系北京太速科技自主研发,基于MPSOC系列SOC XCZU15EG-FFVB1156架构,搭载两组64-bit DDR4,每组容量32Gb,最高可稳定运行在2400MT/s。另有1路10G SFP+光纤接口、1路40G QSFP光纤接口、1路USB3.0接口、1路千兆网络接口......
  • 禅道 未授权登录复现(QVD-2024-15263)
    侵权声明本文章中的所有内容(包括但不限于文字、图像和其他媒体)仅供教育和参考目的。如果在本文章中使用了任何受版权保护的材料,我们满怀敬意地承认该内容的版权归原作者所有。如果您是版权持有人,并且认为您的作品被侵犯,请通过以下方式与我们联系:[[email protected]]。我们将在确......
  • CF1530D Secret Santa 题解
    ProblemSolution每个人初始不会给自己送礼物。如果每人要送礼的人都不一样,答案即为\(n\)。如果有两个或以上的人要送给同一个人礼物,假设有\(x\)个人要给同一个人送礼物,那么必有\(x-1\)个人要更改送礼的人,并将礼物送个\(x-1\)个没有礼物收的人。然而这样送礼物可能会导......
  • 成为MySQL DBA后,再看ORACLE数据库(十四、统计信息与执行计划)
    一、前言一条SQL到达数据库内核之后,会解析为一条逻辑执行计划,CBO优化器对逻辑计划进行改写和转换,生成多个物理执行计划。为SQL构造出搜索空间,根据数据的统计信息、基数估计、算子代价模型为搜索空间中的执行计划估算出执行所需要的代价(CPU、内存、网络、I/O等资源消耗),最终选出代......
  • 代码随想录Day15
    110.平衡二叉树(优先掌握递归)给定一个二叉树,判断它是否是平衡二叉树平衡二叉树是指该树所有节点的左右子树的深度相差不超过1。示例1:输入:root=[3,9,20,null,null,15,7]输出:true示例2:输入:root=[1,2,2,3,3,null,null,4,4]输出:false示例3:输入:root=[]输出:t......
  • PSINS中test_SINS_GPS_153结果图说明
     kf.xk:估计的状态量(反馈后)kf.xfb:反馈的状态量之和如果是开环反馈,估计的零偏在kf.xk 中;如果是闭环反馈,估计的零偏在 kf.xfb 中。 PSINS主要有4 张图:1.insplot(avp); 解算的 avp 结果和平面轨迹图2. avperr=avpcmpplot(trj.avp,avp); 解算的 avp 结果、a......
  • CF1528C Trees of Tranquillity
    小清新找性质题,想到关键就很简单考虑在第一棵树上枚举一条从\(1\)到某个点的链,显然这些点之间满足第一个限制,现在只要在这些点中选出尽可能多的点满足第二个限制即可在第二棵树上两个点没有祖先关系,等价于它们对应的DFS序区间相离而两个点的DFS序区间显然要么相离要么包......
  • CF1523E Crypto Lights
    小清新Counting,被徐神绝杀力直观地想我们需要求出恰好\(m\)轮结束的概率\(p(m)\),但这个显然不好直接求,我们退而求其次用经典trick,我们设\(f(m)\)表示至少点亮了\(m\)盏灯的概率,最后求和得到的就是带权的概率和也就是期望考虑\(f(m)\)如何计算,转为计算合法局面的方案......
  • leetcode面试经典150题- 380. O(1) 时间插入、删除和获取随机元素
     https://leetcode.cn/problems/insert-delete-getrandom-o1/description/?envType=study-plan-v2&envId=top-interview-150gotypeRandomizedSetstruct{isHavemap[int]inttotalintarr[]int}funcConstructor()RandomizedSet{retur......