如何为 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;
我有以下代码,它打印部门编号小于 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;