暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 将查询结果存储在表中

askTom 2018-06-14
289

问题描述

执行基于select语句的过程后,该结果值应存储在我们创建的新表中。我的表名是pr_basic

create or replace procedure pro_basic_emp(P_employee_number in number) is
  l_employee_number   pr_basic.employee_number%type;
  l_full_name         pr_basic.full_name%type;
  l_job               pr_basic.job%type;
  l_name              pr_basic.name%type;
  l_salary            pr_basic.salary%type;
  cursor pr_basic_emp is
    SELECT papf.employee_number  as EmployeeNumber,
           papf.full_name        as EmployeeName,
           pj.NAME               as job,
           haou.NAME             as ORGANIZATION,
           ppp.proposed_salary_n as salary
      FROM per_all_people_f          papf,
           per_all_assignments_f     paaf,
           per_jobs                  pj,
           hr_all_organization_units haou,
           per_position_definitions  ppd,
           per_all_positions         pap,
           per_pay_proposals         ppp
     WHERE 1 = 1
       AND SYSDATE BETWEEN papf.effective_start_date AND
           papf.effective_end_date
       AND papf.current_employee_flag = 'Y'
       AND papf.employee_number IS NOT NULL
       AND paaf.person_id = papf.person_id
       AND SYSDATE BETWEEN paaf.effective_start_date AND
           paaf.effective_end_date
       AND paaf.job_id = pj.job_id
       AND paaf.organization_id = haou.organization_id
       AND paaf.position_id = pap.position_id
       AND papf.employee_number = p_employee_number
       AND pap.position_definition_id = ppd.position_definition_id
       AND ppp.pay_proposal_id =
           (SELECT MAX(pay_proposal_id)
              FROM per_pay_proposals
             WHERE assignment_id = paaf.assignment_id)
     order by employee_number asc;
begin
  for hr_basic_emp in pr_basic_emp loop
     if (pr_basic is null) then

      insert into pr_basic
        (employee_number, full_name, job, name, salary)
      values
        (pr_basic.l_employee_number,pr_basic.l_full_name, pr_basic.l_job, pr_basic.l_name, pr_basic.l_salary);
    end if;
  end loop;
end pro_basic_emp;

专家解答

你不需要光标,你只需要一个插入语句

create or replace procedure pro_basic_emp(P_employee_number in number) is
begin
      insert into pr_basic
        (employee_number, full_name, job, name, salary)
    SELECT papf.employee_number  as EmployeeNumber,
           papf.full_name        as EmployeeName,
           pj.NAME               as job,
           haou.NAME             as ORGANIZATION,
           ppp.proposed_salary_n as salary
      FROM per_all_people_f          papf,
           per_all_assignments_f     paaf,
           per_jobs                  pj,
           hr_all_organization_units haou,
           per_position_definitions  ppd,
           per_all_positions         pap,
           per_pay_proposals         ppp
     WHERE 1 = 1
       AND SYSDATE BETWEEN papf.effective_start_date AND
           papf.effective_end_date
       AND papf.current_employee_flag = 'Y'
       AND papf.employee_number IS NOT NULL
       AND paaf.person_id = papf.person_id
       AND SYSDATE BETWEEN paaf.effective_start_date AND
           paaf.effective_end_date
       AND paaf.job_id = pj.job_id
       AND paaf.organization_id = haou.organization_id
       AND paaf.position_id = pap.position_id
       AND papf.employee_number = p_employee_number
       AND pap.position_definition_id = ppd.position_definition_id
       AND ppp.pay_proposal_id =
           (SELECT MAX(pay_proposal_id)
              FROM per_pay_proposals
             WHERE assignment_id = paaf.assignment_id)
     order by employee_number asc;
end pro_basic_emp;


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论