公司业务需要,现在要将输出的表所有列名都查询出来,并放入另一个表的同一列里面。原查询语句是通过with as建立临时表再查询得到最后结果,试过用下面这个语句输出列名,但结果是空的:
select
COLUMN_NAME
from
user_tab_columns
where
TABLE_NAME=
'
表名
'
请问各位有没有什么办法,可以将with as建立的临时表所有列名作为一列的内容输出呢?
公司业务需要,现在要将输出的表所有列名都查询出来,并放入另一个表的同一列里面。原查询语句是通过with as建立临时表再查询得到最后结果,试过用下面这个语句输出列名,但结果是空的:
select
COLUMN_NAME
from
user_tab_columns
where
TABLE_NAME=
'
表名
'
请问各位有没有什么办法,可以将with as建立的临时表所有列名作为一列的内容输出呢?
你这个语句如果查出来为空,说明你当前登录的用户下没有建立任何表,请尝试切换到你要查询的表的用户,或者把查询的这个视图换成 DBA_TAB_COLUMNS或 ALL_TAB_COLUMNS,并加上OWNER条件
你这个sql明显不对啊,你TABLE_NAME='A' ,意思就是查名字为'A'这一个字母的表,
如果你b表里面有表名字段,假设这个字段名叫 TABLE_NAME,那么这个sql应该这么写
select a.table_name,a.COLUMN_NAME
from user_tab_columns a,b
where a.table_name=b.table_name
with as 不是临时表,它只是个子查询,没有创建实体对象,因此无法在静态视图中查询相关信息,如果要尝试获取任意查询sql的字段,可以使用以下sql
SELECT t2.column_value.getrootelement() name
FROM (SELECT *
FROM TABLE(XMLSEQUENCE(cursor (select *
from (select 1 字段1, 2 字段2
from dual
union all
select 2, 4
from dual)
where rownum = 1)))) t1,
TABLE(XMLSEQUENCE(EXTRACT(t1.column_value, '/ROW/node()'))) t2;
以上sql就是针对下面这个sql获取字段名
select 1 字段1, 2 字段2
from dual
union all
select 2, 4
from dual
原理就是取一行数据转游标转xml,获取xml的根标签。
另外,还可以通过调用dbms_sql包来获取sql中的字段名称
题主有点离谱了,字段名里怎么会带逗号括号这种东西,这种保留符号会导致各种异常,一般都用下划线。
当然,如果非得查出符号,也不是没办法,需要写一个自定义函数进行转换。不过你这题赚大了
这个自定义函数"unistr_xml"我就不贴代码了,原理就是解析字符串,正则匹配、替换、解码
这题还没采纳呀?今天我在复刻数据库内置程序的时候发现了个好玩意,可以解决xml修改符号的问题
SELECT utl_i18n.ENCODE_SQL_XML(t2.column_value.getrootelement()) name
FROM (SELECT *
FROM TABLE(XMLSEQUENCE(cursor (select *
from (select 1 "字段1,(", 2 字段2
from dual
union all
select 2, 4
from dual)
where rownum = 1)))) t1,
TABLE(XMLSEQUENCE(EXTRACT(t1.column_value, '/ROW/node()'))) t2;