如何获取列名而不在SQLPLUS中被截断

时间:2014-08-15 14:28:07

标签: sql sqlplus

如何获取列名而不会在Unix中的SQLPLUS中为select语句截断。这可能看起来像重复的问题,但我一直在寻找数小时,但无法找到方便的解决方案。

到目前为止,我发现的是

COLUMN COLUMN_NAME FORMAT SIZE;

SELECT COLUMN1|| ',' || COLUMN2 || ',' || COLUMN3 FROM TABLE;

两者都涉及硬编码,没有硬编码是否有更简单的解决方案。

抱歉让它变得难以

Query: select * from Employee;

它的列名为Name,Salary,Age

我得到的是:

 Name   Sala  Ag
 Steve  1000  30
 John   2000  25

我想要的是:

 Name  Salary Age
 Steve 1000   30
 John  2000   25

2 个答案:

答案 0 :(得分:3)

在SQL * Plus输出中设置列的大小(宽度)。

SQL> column sex format a5

查看当前有效的设置。

SQL> column

获得有关使用的进一步帮助。

SQL> help column

<强>更新

设置所有列的格式(以笨拙的方式)。假设我的users表定义如下。

create table users(
  id number
, username varchar2(20)
, credentials varchar2(90)
, lastname varchar2(20) not null
, firstname varchar2(20)
, emailaddress varchar2(42)
, emailisvalid number(1)
, sex char(1)
, created date default sysdate
);

我们可以发出此命令将输出放入文件login.sql,每次启动SQL * Plus时都会自动执行该文件。

SQL> spool login.sql

SQL> select 'column ' || column_name || ' format a' || length(column_name) || ';'
from user_tab_cols where table_name = 'USERS';

column ID format a2;
column USERNAME format a8;
column PASSWORD format a8;
column LASTNAME format a8;
column FIRSTNAME format a9;
column EMAILADDRESS format a12;
column EMAILISVALID format a12;
column SEX format a3;
column CREATED format a7;

答案 1 :(得分:-1)

这个问题:

Name   Sala  Ag
Steve  1000  30
John   2000  25

可以这样解决:

SELECT Name,
       CAST(Salary) AS VARCHAR(6) AS Salary,
       CAST(Age) AS VARCHAR(3) AS Age
FROM Employee;

请注意,再一次......这不是查询返回的内容,而是客户端如何显示结果。使用不同的客户端它将以不同的方式工作在这种情况下,客户端根据列数据类型格式化列。当它看到varchar(如名称)时,它会转到最大数据大小。所以我们给它一个更大的字符串数据看起来不错。

这不是服务器上发生的事情的一部分 - 这取决于客户端如何显示。因此,如果查询将由不同的客户端(例如网页或应用程序调用)使用,那么当这些客户实际使用它时,这将无关紧要。