如何获取列名而不会在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
答案 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(如名称)时,它会转到最大数据大小。所以我们给它一个更大的字符串数据看起来不错。
这不是服务器上发生的事情的一部分 - 这取决于客户端如何显示。因此,如果查询将由不同的客户端(例如网页或应用程序调用)使用,那么当这些客户实际使用它时,这将无关紧要。