不建表,获取select查询的字段

czmchen 2011-06-10 10:05:27
我这边有这样的一个需求,在不建立表的情况下,获取到select column中的column名称,如

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

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


请教各位数据库专家,谢谢哈
...全文
327 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
咖啡 2011-06-17
  • 打赏
  • 举报
回复
19楼的代码,可以直接拿来用的。
20804036 2011-06-17
  • 打赏
  • 举报
回复
从v$sql里解析应该可以做到
czmchen 2011-06-11
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 lzy513 的回复:]

说了半天你是想说,要查询中获取字段的名字。
[/Quote]

终于有人看懂了,看来不是人人的理解能力都是那么好呀!还要解析大半天才明白
czmchen 2011-06-11
  • 打赏
  • 举报
回复
select s.COLUMN_NAME from user_tab_columns s where s.TABLE_NAME='TEST1'

这个sql的意思是说查询这个表的字段名称,那么我想在查询的sql中获取字段名称

好像select t.column2,t.column1,t.column3 from test这个查询语句,我想获取column2,column1,column3的字段名称,不通过对象查询(因为我这个查询语句可以是多表查询)。
tangren 2011-06-11
  • 打赏
  • 举报
回复
SQL> set serveroutput on;
SQL>
SQL> DECLARE
2 v_sql VARCHAR2(2000);
3 v_col VARCHAR2(2000);
4 BEGIN
5 v_sql := 'select col1,col2,col3 from test';
6 v_sql := trim(v_sql);
7 v_col := regexp_replace(regexp_replace(regexp_substr(
8 'select col1,col2,col3 from test','^select.+from',1,1,'i')
9 ,'select','',1,1,'i'),'from','',1,1,'i');
10 dbms_output.put_line(v_col);
11 END;
12 /

col1,col2,col3

PL/SQL procedure successfully completed
czmchen 2011-06-11
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 tangren 的回复:]

如果知道表名,可以重系统字典表中查找列名,然后动态拼接SQL,如:

SELECT t.COLUMN_NAME FROM user_tab_columns t WHERE t.TABLE_NAME = 'TEST';

[/Quote]

效果不是通过表名来获取这些字段名,是通过查询SQL获取字段名称


PS:不要砭低别人,多从自己身上找原因。

不好意思,话说得有点锋
tangren 2011-06-11
  • 打赏
  • 举报
回复
如果知道表名,可以重系统字典表中查找列名,然后动态拼接SQL,如:

SELECT t.COLUMN_NAME FROM user_tab_columns t WHERE t.TABLE_NAME = 'TEST';

PS:不要砭低别人,多从自己身上找原因。
Rotel-刘志东 2011-06-10
  • 打赏
  • 举报
回复
不建表怎么有test。
jimmylin040 2011-06-10
  • 打赏
  • 举报
回复
哈哈,原来有 desc table这样的写法~~~
tangren 2011-06-10
  • 打赏
  • 举报
回复
你的tablexxx 与test表字段名称一致?
304的的哥 2011-06-10
  • 打赏
  • 举报
回复

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
czmchen 2011-06-10
  • 打赏
  • 举报
回复
数据库模块的人气还是很少哦
BlueskyWide 2011-06-10
  • 打赏
  • 举报
回复
desc cat;
/*或者:*/
desc tab;

TNAME是表名。

czmchen 2011-06-10
  • 打赏
  • 举报
回复
test表是从其他数据库过来的

insert into tablexxx (column1,column2,column3) from select t.column1,t.column2,t.column3 from test

基于上面的插入语句的需求,想获取column1,column2,column3的位置,因为tablexxx的表字段和select过来的表字段顺序不同。
tangren 2011-06-10
  • 打赏
  • 举报
回复
不建表,你的test表从那儿来?
ORACLE数据字典那来你的表结构定义?
秋雨飘落 2011-06-10
  • 打赏
  • 举报
回复 1
select '' column1, '' column2, '' column3 from dual
njlywy 2011-06-10
  • 打赏
  • 举报
回复
木有明白神马意思…
iqlife 2011-06-10
  • 打赏
  • 举报
回复
实现看不懂楼主想做什么。。。

lzy513 2011-06-10
  • 打赏
  • 举报
回复
说了半天你是想说,要查询中获取字段的名字。
UPC子夜 2011-06-10
  • 打赏
  • 举报
回复
可是select过来的字段可能是这样子
select t.column2,t.column1,t.column3 from test

如果能确定这个sql的格式没有大的变化 你可以截取啊 把select和from中间的部分取出来 再把表名.列名中.前边的去掉 列名就出来了
加载更多回复(1)

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧