日期:2014-05-16  浏览次数:20918 次

不建表,获取select查询的字段
我这边有这样的一个需求,在不建立表的情况下,获取到select column中的column名称,如

select t.column1,t.column2,t.column3 from test

我要获取的是column1,column2,column3这几个字段的名称


请教各位数据库专家,谢谢哈

------解决方案--------------------
不建表,你的test表从那儿来?
ORACLE数据字典那来你的表结构定义?
------解决方案--------------------
SQL code

SQL> desc emp;
Name     Type         Nullable Default Comments 
-------- ------------ -------- ------- -------- 
EMPNO    NUMBER(4)                              
ENAME    VARCHAR2(10) Y                         
JOB      VARCHAR2(9)  Y                         
MGR      NUMBER(4)    Y                         
HIREDATE DATE         Y                         
SAL      NUMBER(7,2)  Y                         
COMM     NUMBER(7,2)  Y                         
DEPTNO   NUMBER(2)    Y                         
 
--构造一个表,和emp表的部分字段相同,但是顺序不同
SQL> create table t_emp as
  2  select ename,empno,deptno,sal
  3  from emp
  4  where 1=0
  5  /
 
Table created
 --添加数据
SQL> insert into t_emp(ename,empno,deptno,sal)
  2  select ename,empno,deptno,sal
  3  from emp
  4  where sal >= 2500 
  5  /
 
5 rows inserted
 
SQL> select * from t_emp;
 
ENAME      EMPNO DEPTNO       SAL
---------- ----- ------ ---------
JONES       7566     20   2975.00
BLAKE       7698     30   2850.00
SCOTT       7788     20   3100.00
KING        7839     10   5000.00
FORD        7902     20   3000.00
 
SQL> select * from emp;
 
EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
 7369 SMITH      CLERK      7902 1980-12-17     800.00               20
 7499 ALLEN      SALESMAN   7698 1981-02-20    1600.00    300.00     30
 7521 WARD       SALESMAN   7698 1981-02-22    1250.00    500.00     30
 7566 JONES      MANAGER    7839 1981-04-02    2975.00               20
 7654 MARTIN     SALESMAN   7698 1981-09-28    1250.00   1400.00     30
 7698 BLAKE      MANAGER    7839 1981-05-01    2850.00               30
 7782 CLARK      MANAGER    7839 1981-06-09    2450.00               10
 7788 SCOTT      ANALYST    7566 1987-04-19    3100.00               20
 7839 KING       PRESIDENT       1981-11-17    5000.00               10
 7844 TURNER     SALESMAN   7698 1981-09-08    1500.00      0.00     30
 7876 ADAMS      CLERK      7788 1987-05-23    1100.00               20
 7900 JAMES      CLERK      7698 1981-12-03     950.00               30
 7902 FORD       ANALYST    7566 1981-12-03    3000.00               20
 7934 MILLER     CLERK      7782 1982-01-23    1300.00               10
 
14 rows selected

------解决方案--------------------
你的tablexxx 与test表字段名称一致?
------解决方案--------------------
不建表怎么有test。
------解决方案--------------------
可是select过来的字段可能是这样子
select t.column2,t.column1,t.column3 from test

如果能确定这个sql的格式没有大的变化 你可以截取啊 把select和from中间的部分取出来 再把表名.列名中.前边的去掉 列名就出来了
------解决方案--------------------
说了半天你是想说,要查询中获取字段的名字。
------解决方案--------------------
select '' column1, '' column2, '' column3 from dual
------解决方案--------------------
desc cat;
/*或者:*/
desc tab;

TNAME是表名。