如何为 PL/SQL 中 dbms 输出打印的值指定别名?

How do I give an alias name to the values printed by dbms output in PL/SQL?

我有以下代码,它打印部门编号小于 40 的部门 table 的部门编号和部门名称。

declare
cursor cn is select dno, dname from dept where dno<40;
v_dno dept.dno%type;
v_dname dept.dname%TYPE;
begin
    open cn;
        loop
            fetch cn into v_dno,v_dname;
            dbms_output.put_line(v_dno||' '||v_dname);
            exit when cn%notfound;
        end loop;
    close cn;
end;

这是我得到的输出:

10 Administration
20 Marketing
30 Purchasing
30 Purchasing

但我期望的输出是:

Department_No   Department_Name
10              Administration
20              Marketing
30              Purchasing
30              Purchasing

您必须单独显示它(请参阅第 10 行)(我使用了 Scott 的示例 DEPT table,因为我没有您的示例):

SQL> DECLARE
  2     CURSOR cn IS
  3        SELECT deptno, dname
  4          FROM dept
  5         WHERE deptno < 40;
  6
  7     v_deptno  dept.deptno%TYPE;
  8     v_dname   dept.dname%TYPE;
  9  BEGIN
 10     DBMS_OUTPUT.put_line ('Department_no   Department_name');
 11
 12     OPEN cn;
 13
 14     LOOP
 15        FETCH cn INTO v_deptno, v_dname;
 16
 17        DBMS_OUTPUT.put_line (RPAD (v_deptno, 15, ' ') || ' ' || v_dname);
 18        EXIT WHEN cn%NOTFOUND;
 19     END LOOP;
 20
 21     CLOSE cn;
 22  END;
 23  /
Department_no   Department_name
10              ACCOUNTING
20              RESEARCH
30              SALES
30              SALES

PL/SQL procedure successfully completed.

SQL>

PL/SQL 只输出我们显式传递给 DBMS_OUTPUT 的内容。所以,如果你想要标题,你需要自己提供:

declare
cursor cn is select dno, dname from dept where dno<40;
v_dno dept.dno%type;
v_dname dept.dname%TYPE;
begin
    dbms_output.put_line('Department_No   Department_Name');
    open cn;
        loop
            fetch cn into v_dno,v_dname;
            dbms_output.put_line(rpad(to_char(v_dno),14)||' '||v_dname);
            exit when cn%notfound;
        end loop;
    close cn;
end;

请注意,为了获得整齐的对齐方式,您需要使用 RPAD() 使 V_DNO 与标题长度相同

您可以编写 plsql 和 html 代码的组合。喜欢

declare
cursor cn is select dno, dname from dept where dno<40;
begin
htp.p('<table>
    <tr>
        <th>Department_no<\th>
        <th>Department_name<\th>
    <\tr>');
for i in cn
    loop
htp.p('<tr>
        <td>'|| i.dno ||'<\td>
        <td>'|| i.dname ||'<\td>
    <\tr>');
    end loop;
htp.p('<\table>');
end;