Oracle SQL存储过程以实际列名和表数据格式输出#多重连接

问题描述 投票:0回答:1
create or replace procedure sp_mx_sal_emp 
AS 
fname varchar2(20); 
lname varchar2(25); 
sal Number(8,2); 
country VARCHAR2(40);
region VARCHAR2(25);
    
BEGIN 
    select e.first_name, e.last_name, e.salary, c.country_name, r.region_name into fname, lname, sal, country, region from employees e 
    inner join departments d on d.department_id=e.department_id 
    inner join locations l on l.location_id=d.location_id 
    inner join countries c on c.country_id=l.country_id 
    inner join regions r on r.region_id=c.region_id 
    inner join jobs j on j.job_id=e.job_id 
        where e.salary=(select max(e.salary) from employees e);
    
        dbms_output.put_line('fnames : '||fname);
        dbms_output.put_line('lnames : '||lname);
        dbms_output.put_line('max_sal : '||sal);
        dbms_output.put_line('country : '||country);
        dbms_output.put_line('region : '||region);
    
    
END;

执行 sp_mx_sal_emp;

我正在运行存储过程,结果显示为:-

fnames : Steven
lnames : King
max_sal : 24000
country : United States of America
region : Americas

我期待这样的结果: 表格格式的实际列名和数据:-

FIRST_NAME LAST_NAME 薪资 COUNTRY_NAME REGION_NAME
史蒂文 24000 美利坚合众国 美洲

请查看我期望的输出图像:enter image description here

sql oracle stored-procedures
1个回答
0
投票

如果您想在一行上打印值,请不要多次使用

DBMS_OUTPUT.PUT_LINE

要么:

  1. 将所有值连接在一起形成一个字符串;或
  2. 使用
    DBMS_OUTPUT.PUT
    ,然后使用
    DBMS_OUTPUT.PUT_LINE
    获得最终值。

类似这样的:

create procedure sp_mx_sal_emp 
AS 
BEGIN 
  DBMS_OUTPUT.PUT_LINE(
    RPAD('fnames', 20, ' ')
    || ' ' || RPAD('lnames', 25, ' ')
    || ' ' || RPAD('sal', 11, ' ')
    || ' ' || RPAD('country', 40, ' ')
    || ' ' || RPAD('region', 25, ' ')
  );
  FOR r IN (
    select e.first_name,
           e.last_name,
           e.salary,
           c.country_name,
           r.region_name
    from employees e 
         inner join departments d on d.department_id=e.department_id 
         inner join locations l on l.location_id=d.location_id 
         inner join countries c on c.country_id=l.country_id 
         inner join regions r on r.region_id=c.region_id 
         inner join jobs j on j.job_id=e.job_id
    ORDER BY salary DESC
    FETCH FIRST ROW WITH TIES
  )
  LOOP
    DBMS_OUTPUT.PUT_LINE(
      RPAD(r.first_name, 20, ' ')
      || ' ' || RPAD(r.last_name, 25, ' ')
      || ' ' || TO_CHAR(r.sal, '999990.00')
      || ' ' || RPAD(r.country, 40, ' ')
      || ' ' || RPAD(r.region, 25, ' ')
    );
  END LOOP;
END;
/
© www.soinside.com 2019 - 2024. All rights reserved.