问一个oracle的基本语法问题

nayi_224 2019-12-20 10:36:38
我现在有一个任意的、合法的查询语句。它可以是从一个字符串中获取,或者直接是复制粘贴到代码中的。可以用下面的语句进行测试。
select 1 abc, '2a' aBbc, to_char(3) "aBc", 'A' from dual union all
select 3, '4', '5', '' from dual


我想要按查询顺序依次输出列名。
ABC
ABBC
aBc
A

限定只使用oracle,不使用其他语言。
附加条件:没有建表权限。
(考虑到结果集可能会很大,不要使用建表后查询字典表的方法)
...全文
133 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
minsic78 2019-12-20
  • 打赏
  • 举报
回复
https://www.cnblogs.com/huanghongbo/p/7650499.html 这种?
nayi_224 2019-12-20
  • 打赏
  • 举报
回复
引用 1 楼 js14982 的回复:
查询表user_col_comments里面的表字段名称行不行?
上面已经写了,禁止动态创建语句。而且我获得的语句是完全未知的,可能是多表查询的,查出的列也有可能不在表中。比如 select 111 a from table_1 a是不在table_1中的列。 或者 select (select max(col1) from table_1) aa, t1.bb b from table_2 t1, table_3 t2 where t1.a = t2.a 这类语句都没法查询user_col_comments。
js14982 2019-12-20
  • 打赏
  • 举报
回复
查询表user_col_comments里面的表字段名称行不行?
nayi_224 2019-12-20
  • 打赏
  • 举报
回复
把答案在这边再发一遍
DECLARE
  l_curid   INTEGER;
  l_cnt     NUMBER;
  l_desctab dbms_sql.desc_tab;
  l_sqltext VARCHAR2(2000);
BEGIN
  l_sqltext := 'select *
from dba_objects  where rownum<= 10'; --可以是任意有效的查询sql文本 
  l_curid   := dbms_sql.open_cursor();
  dbms_sql.parse(l_curid, l_sqltext, dbms_sql.native);
  dbms_sql.describe_columns(l_curid, l_cnt, l_desctab);
  FOR i IN 1 .. l_desctab.count LOOP
    dbms_output.put_line(rpad(l_desctab(i).col_name, 30)||rpad(l_desctab(i).col_type, 3));
  END LOOP;
  dbms_sql.close_cursor(l_curid);
END;
nayi_224 2019-12-20
  • 打赏
  • 举报
回复
引用 3 楼 minsic78 的回复:
https://www.cnblogs.com/huanghongbo/p/7650499.html 这种?
正解!

17,140

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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