Không có giải pháp nào được đề xuất để hiển thị tên cột gốc, vì vậy tôi không chắc tại sao mọi người bỏ phiếu cho họ ... Tôi có "hack" hoạt động cho yêu cầu ban đầu, nhưng tôi thực sự không Không thích nó ... Đó là bạn thực sự gắn thêm hoặc tiền tố một chuỗi vào truy vấn cho mỗi cột để chúng luôn đủ dài cho tiêu đề cột. Nếu bạn đang ở trong một chế độ HTML, như là poster, có rất ít tác hại bởi một chút khoảng trắng thêm ... Nó sẽ tất nhiên làm chậm truy vấn của bạn ...
ví dụ:
SET ECHO OFF
SET PAGESIZE 32766
SET LINESIZE 32766
SET NUMW 20
SET VERIFY OFF
SET TERM OFF
SET UNDERLINE OFF
SET MARKUP HTML ON
SET PREFORMAT ON
SET WORD_WRAP ON
SET WRAP ON
SET ENTMAP ON
spool '/tmp/Example.html'
select
(s.ID||' ') AS ID,
(s.ORDER_ID||' ') AS ORDER_ID,
(s.ORDER_NUMBER||' ') AS ORDER_NUMBER,
(s.CONTRACT_ID||' ') AS CONTRACT_ID,
(s.CONTRACT_NUMBER||' ') AS CONTRACT_NUMBER,
(s.CONTRACT_START_DATE||' ') AS CONTRACT_START_DATE,
(s.CONTRACT_END_DATE||' ') AS CONTRACT_END_DATE,
(s.CURRENCY_ISO_CODE||' ') AS CURRENCY_ISO_CODE,
from Example s
order by s.order_number, s.contract_number;
spool off;
Tất nhiên bạn có thể viết thủ tục lưu trữ để làm điều gì đó tốt hơn, nhưng thực sự có vẻ như quá mức cho trường hợp đơn giản này.
Điều này vẫn không đáp ứng được yêu cầu áp phích gốc. Trong đó, nó yêu cầu liệt kê thủ công trên các cột và không sử dụng select *. Nhưng ít nhất nó là giải pháp hoạt động khi bạn sẵn sàng để chi tiết ra các lĩnh vực.
Tuy nhiên, vì thực sự không có vấn đề gì khi có quá nhiều trường trong HTML, có một cách khá đơn giản để sửa giải pháp của Chris để làm việc với ví dụ này. Đó là chỉ cần chọn một sử dụng oracle giá trị tối đa sẽ cho phép. Đáng buồn thay điều này vẫn sẽ không thực sự làm việc cho mọi lĩnh vực của mỗi bảng, trừ khi bạn rõ ràng thêm định dạng cho mọi loại dữ liệu. Giải pháp này cũng sẽ không hoạt động cho các phép nối, vì các bảng khác nhau có thể sử dụng cùng một tên cột nhưng một kiểu dữ liệu khác nhau.
SET ECHO OFF
SET TERMOUT OFF
SET FEEDBACK OFF
SET PAGESIZE 32766
SET LINESIZE 32766
SET MARKUP HTML OFF
SET HEADING OFF
spool /tmp/columns_EXAMPLE.sql
select 'column ' || column_name || ' format A32766'
from all_tab_cols
where data_type = 'VARCHAR2' and table_name = 'EXAMPLE'
/
spool off
SET HEADING ON
SET NUMW 40
SET VERIFY OFF
SET TERM OFF
SET UNDERLINE OFF
SET MARKUP HTML ON
SET PREFORMAT ON
SET WORD_WRAP ON
SET WRAP ON
SET ENTMAP ON
@/tmp/columns_EXAMPLE.sql
spool '/tmp/Example.html'
select *
from Example s
order by s.order_number, s.contract_number;
spool off;
Cảm ơn mã python, rất tiếc khách hàng của chúng tôi nghiêm cấm cài đặt bất kỳ phần mềm nào khác trong môi trường sản xuất của họ. Thậm chí không grep hoặc đuôi. Ugh. Vì vậy, đó là sqlplus hoặc bust. –
Tìm thấy điều này là hữu ích vì lý do hoàn toàn không liên quan. Rất vui khi bạn đăng nó! :-D –