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 | 美利坚合众国 | 美洲 |
如果您想在一行上打印值,请不要多次使用
DBMS_OUTPUT.PUT_LINE
。
要么:
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;
/