如何将sql查询出的列名用注释代替?

如何将sql查询出的列名用注释代替?

大家正常的工作的时候,会有这样的要求,客户想要看下原始数据,但是呢。前台导出又麻烦,这时候只能从数据库拷贝出来一份。但是呢,数据库里面的字段客户又看不明白,只能用数据库里面的注释。但是这时候,如果要求很多张表,难道我们要一个个复制吗?这也太tm蠢了。

1 查看我们表

select * from user_col_comments where table_name='TNAME';

2 写上函数

create or replace function f_colcom(tname in varchar2) return varchar2 is
  Result  varchar2(400);
    tsql varchar2(400);
begin
  declare
     cursor c_job is
     select column_name, comments
         from user_col_comments
         where upper(table_name) = upper(tname);
         c_row c_job%rowtype;
   begin
     for c_row in c_job loop
       tsql := tsql || c_row.column_name||' "'||c_row.comments||'",';
      end loop;
       tsql := substr(tsql,1,length(tsql)-1);
        tsql := 'select '||tsql||'  from '||tname||';';
    end;
    result := tsql;
   return(Result);

  end f_colcom;
    /*sql查询出的列名转换其注释  2019/12/09   by 迷途的小码农 */

3 查询表字段

emmm。出错了。报错:ORA-06502: PL/SQL: 数字或值错误 : 字符串缓冲区太小

仔细看了下。函数中定义的变量值太小,加大它的范围即可。

咱也不知道需要多大,就直接给个最大的吧。4000

运行后可用:

将查询结果执行一遍。

查询之后就可以了,字段名称为注释

4 Excel函数VLOOKUP(函数)

函数的4个字段含义为:(需要查找的字段,在哪里查找,输出第几列,查找模式)

我拷贝下来的sql数据为下:

如果这么给客户看的话,客户是看不懂字段的意思的,所以我们需要用函数,将注释填写上去。

我们查询出这张表的注释和字段,复制到Excel里面sheet4下,如下:

接着我们就需要用VLOOKUP 函数了。
我写的如下:

VLOOKUP(R1,Sheet4!1:1048576,2,FALSE) -->(需要查找的字段,在哪里查找,输出第几列,查找模式)

需要查找的字段:R1
在哪里查找:就在我复制下来的sheet4里面
输出第几列:将第二列的数据引用过来 填写2
查找模式:有true和false 。true是模糊,false是精确。
这样下来,就可以直接替换了

原文地址:https://www.cnblogs.com/jianshuai520/p/12009954.html

时间: 2024-10-26 00:25:57

如何将sql查询出的列名用注释代替?的相关文章

SQL查询出当前服务器时间是否在表T1时间段内,如果有则选择出

表T1 开始 时间         结束时间          09:00:00          12:00:00      14:00:00          17:00:00 查询出当前服务器时间是否在表T1时间段内,如果有则选择出 选出的sql结果集如下,求SQL,  注:SQL2000环境 开始 时间         结束时间           14:00:00          17:00:00 方法一: DECLARE @t TABLE (     beginTime CHAR(

SQL查询出每门课都大于80 分的学生姓名

Course表如下: 查询出每门课都大于80 分的学生姓名有两种方法. 1.select  distinct name from Course where name not in (select distinct name from Course where score<=80) 2.select  name    from Course group by name having min(score)>80

【转】一个SQL查询出每门课程的成绩都大于80的学生姓名

name   kecheng    fenshu 张三     语文     81张三     数学     75李四     语文     76李四     数学     90王五     语文     81王五     数学     100王五     英语     90 方法一: 思路:如果能获得一张表,由学生姓名,语文成绩,数学成绩,英语成绩的表,剩下的就是在WHERE条件中筛选及可以获得想要的结果. 具体办法:通过自连接的办法,以“姓名”为连接条件,自连接三次,便可以获得包含又姓名和三

【DB2】国标行业分类存储,通过SQL查询出层级关系

新建表 DROP TABLE Industry; CREATE TABLE Industry( IndustryCode VARCHAR(40),IndustryName VARCHAR(100),ParentID VARCHAR(40) ) 点击下载插入语句 数据截图: 现在数据是这个样子的,我们需要找出对应的层级关系,例如: 实现SQL如下: SELECT A.IndustryCode AS CLASS01,A.INDUSTRYNAME CLASS_01NM, B.IndustryCode

如何将sql查询出的结果,用符号隔开

晚饭过后,打开QQ圈子,发现QQ群里有人提问了一个问题↓ 数据表中有这样的数据 1 100 1 101 1 106 2 100 2 109 3 112 如何转换为 1 100,101,106 2 100,109 3 112 知道写存储过程或者函数可以解决,但是想想能不能用一条sql语句解决...未果... 还是去搜索了下怎么搞,→转载链接← create table tb(id int, value varchar(10)) insert into tb values(1, 'aa') inse

权限管理(RBAC模型) 一条SQL查询出菜单

//用户表 SELECT m.* FROM sys_user su //用户角色表,以用户id为条件 JOIN sys_user_role ur on su.id=ur.user_id //角色表,以角色id为条件 JOIN sys_role r on ur.role_id=r.id //角色菜单表,以角色id为条件 JOIN sys_role_menu rm on rm.role_id=r.id //菜单表,以菜单id为条件 再通过用户名进行查询 JOIN sys_menu m on m.id

Mysql查询出所有列名

select group_concat(COLUMN_NAME Separator ',') as COLUMN_NAME from information_schema.COLUMNS where table_name = 't_tk_question_info' and table_schema = 'dsideal_db' ; select group_concat(COLUMN_NAME Separator ',') as COLUMN_NAME from information_sch

如何用sql查询出连续三个月金额大于50的记录

with tmp as(select 'A' AS USERNAME,to_date('2017.10','yyyy.mm') month,45 num from dual union allselect 'A' AS USERNAME,to_date('2017.11','yyyy.mm') month,53 from dual union allselect 'A' AS USERNAME,to_date('2017.12','yyyy.mm') month,59 from dual uni

SQL 查询语句总结

ps:老本行,复习一下 SQL 查询语句总结 列名 Select Sname AS 姓名 from Student; ·这里AS可以省略. 去重:distinct Select distinctSno from sc; WHERE条件查询 比较               =/>/</>=/<= 确定范围        between - and -/notbetween - and - 确定集合        IN/NOT IN 字符匹配        LIKE/NOT LIKE