plsql视图添加表字段_Oracle-单表多字段查询(不使用*)

环境:Oracle 11g,plsql 14

目的:不使用*,查询拥有上百个字段的表的所有字段。

懒人大法:在文章末尾。

sql实现逻辑:

1、首先建一张100个字段以上的表,通过excel的方式将表建好后直接复制粘贴到plsql的建表界面。

a4587e6be4f4fcdc56c37b33ab94b441.png

利用excel快速建表

95474469323cd9105c439b57fa497633.png

复制粘贴到PLSQL中,建表test1完成。

2、首先,我们需要获取TEST1表的字段及注释,通过Oracle中自带的表,user_tab_columns a和user_col_comments,这两张表中存储着这个账号下所有的表的字段名、字段顺序及注释。

select a.column_id xh, a.table_name, lower(a.column_name) dm, b.COMMENTS mc

from user_tab_columns a, user_col_comments b

where a.TABLE_NAME = 'TEST1'

AND a.TABLE_NAME = b.TABLE_NAME

and a.COLUMN_NAME = b.COLUMN_NAME

order by a.column_id

cfbe5313187a204feabe9228abfb7562.png

获取出字段顺序,表名,字段名及注释。

4、通过case when语句进行处理,如在第一行添加select,最后一行添加from及表名,其他行添加尾部逗号,同时,将字段及字段注释合并。

select case

when xh = '1' then

'select ' || dm || ', ' || '/*' || mc || '*/'

when xh = (select max(column_id)

from user_tab_columns aa

where aa.table_name = c.table_name) then

dm || ' ' || '/*' || mc || '*/' || 'from ' ||

c.table_name

else

dm || ', ' || '/*' || mc || '*/'

end val,

xh

from (select a.column_id xh,

a.table_name,

lower(a.column_name) dm,

b.COMMENTS mc

from user_tab_columns a, user_col_comments b

where a.TABLE_NAME = 'TEST1'

AND a.TABLE_NAME = b.TABLE_NAME

and a.COLUMN_NAME = b.COLUMN_NAME

order by a.column_id) c

5b20167f77fe3c6be103921a7dec78c3.png

对字段名及字段注释进行处理

5、最终处理。将各行利用listagg() within group (order by)函数进行合并处理。

select listagg(d.val, '') within group(order by xh) sql1

from (select case

when xh = '1' then

'select ' || dm || ', ' || '/*' || mc || '*/'

when xh = (select max(column_id)

from user_tab_columns aa

where aa.table_name = c.table_name) then

dm || ' ' || '/*' || mc || '*/' || 'from ' ||

c.table_name

else

dm || ', ' || '/*' || mc || '*/'

end val,

xh

from (select a.column_id xh,

a.table_name,

lower(a.column_name) dm,

b.COMMENTS mc

from user_tab_columns a, user_col_comments b

where a.TABLE_NAME = 'TEST1'

AND a.TABLE_NAME = b.TABLE_NAME

and a.COLUMN_NAME = b.COLUMN_NAME

order by a.column_id) c) d

b07f831ef5503f41546d1e372dd40238.png

6、将sql从查询结果复制粘贴到新的sql窗口,使用plsql美化器美化后即可得到单表多字段查询的sql了。

b768f892b5f4fc7b1049d1db685daf83.png

懒人大法:不用管如何实现的,直接把下列sql中的TEST1替换为你需要的表名即可查询。注意:如果表上没有注释,会造成注释处为/**/。

select listagg(d.val, '') within group(order by xh) sql1

from (select case

when xh = '1' then

'select ' || dm || ', ' || '/*' || mc || '*/'

when xh = (select max(column_id)

from user_tab_columns aa

where aa.table_name = c.table_name) then

dm || ' ' || '/*' || mc || '*/' || 'from ' ||

c.table_name

else

dm || ', ' || '/*' || mc || '*/'

end val,

xh

from (select a.column_id xh,

a.table_name,

lower(a.column_name) dm,

b.COMMENTS mc

from user_tab_columns a, user_col_comments b

where a.TABLE_NAME = 'TEST1'

AND a.TABLE_NAME = b.TABLE_NAME

and a.COLUMN_NAME = b.COLUMN_NAME

order by a.column_id) c) d

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/534485.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql 编译安装与rpm安装的区别_编译安装与RPM安装的区别

建议在安装线上的生产服务器软件包时都用源码安装,这是因为源码安装可以自行调整编译参数,最大化地定制安装结果。这里以MySQL 5线上环境的编译安装来说明之,其编译参数如下所示:./configure-prefix/usr/local/mysql -without-deb…

python字符串变量s的值是python网络爬虫_【Python爬虫作业】-字符串

一、定义字符串变量1.请定义三个字符串a,b,c值分别为 I,like, python2.请将上面三个变量合并输出I like pythonaIblikecpythonprint(a)print(b)print(c)print(a,b,c)二、定义一个变量 s sdghHhf 1.请先将变量s的空白符去掉 赋值给新变量s1 打印输出2.请分别将s1变为全部大写(命…

lableimg闪退_CV学习笔记(二十五):数据集标注与制作

最近在做一些数据标注的工作,虽然标注数据比较枯燥,但这也是每个做算法的工程师升级打怪的必由之路。使用一些合适的工具往往可以事半功倍,效率UP。一:数据标注流程二:数据处理的一些小代码1:重命名当得到这…

mysql show profile详解_SQL 性能分析利器 show profile

本文首发个人公众号《andyqian》, 期待你的关注~前言在之前的文章中,我们提到过一些慢SQL优化的步骤。其中就包括:使用 explain 关键字来查看执行计划,是否命中索引。通过计算某列的区分度,来判断该列是否适合新建索引…

php判断给定的整数是否是2的幂_C++_C语言判断一个数是否是2的幂次方或4的幂次方,快速判断一个数是否是2的幂次 - phpStudy...

C语言判断一个数是否是2的幂次方或4的幂次方快速判断一个数是否是2的幂次方,若是,并判断出来是多少次方!将2的幂次方写成二进制形式后,很容易就会发现有一个特点:二进制中只有一个1,并且1后面跟了n个0&…

python 包编译安装mysql_CentOS7编译安装MySQL8.0.23和Python3.1.9

卸载mariadbrpm -qa | grep mariadbmariadb-libs-5.5.64-1.el7.x86_64yum remove mariadb-libs.x86_64 -y安装高版本GCC,解决编译中会遇到的GCC 5.3 or newer is required (-dumpversion says 4.8.5)cd /optyum install centos-release-scl -yyum install devtoolse…

python3.0下载用什么浏览器_无法让Python下载网页源代码:“不支持浏览器版本”...

查看您列出的url,我执行了以下操作:使用wget下载了页面将urllib与ipython一起使用并下载了页面使用chrome,只保存了url所有3个都给了我相同的结果文件(相同的大小,相同的内容)。在这可能是因为我没有登录,但我确实看到…

java线程堆栈_深入JVM剖析Java的线程堆栈

在这篇文章里我将教会你如何分析JVM的线程堆栈以及如何从堆栈信息中找出问题的根因。在我看来线程堆栈分析技术是Java EE产品支持工程师所必须掌握的一门技术。在线程堆栈中存储的信息,通常远超出你的想象,我们可以在工作中善加利用这些信息。我的目标是…

java 文件下载方法_【工具类】Java后台上传下载文件的几种方式

/*** 将本地照片上传至腾讯云服务上*/public void uploadImage(String localImagePath) throws Exception {// 1.将订单照片上传至腾讯地图众包侧提供的云服务上try {File imageFile new File(localImagePath);if (imageFile.exists()) {String url "http://" map…

java io流读取txt文件_Java使用IO流读取TXT文件

通过BufferedReader读取TXT文件window系统默认的编码是GBK,而IDE的编码多数为UTF-8,如果没有规定new InputStreamReader(new FileInputStream(file),“GBK”)为GBK会出现读取内容乱码。//文件路径String filePath"C:/Users/Admin/Desktop/products.…

c 调用java程序_C ++可以调用Java代码吗?

小编典典是的,您当然可以。这是一个例子:这是java文件:public class InvocationHelloWorld {public static void main(String[] args) {System.out.println("Hello, World!");System.out.println("Arguments sent to this pro…

java 大数类_Java大数类介绍

java能处理大数的类有两个高精度大整数BigInteger和高精度浮点数BigDecimal,这两个类位于java.math包内,要使用它们必须在类前面引用该包:importjava.math.BigInteger;和importjava.math.BigDecimal;或者importjava.math.*;以下从几个方面对B…

java 画树_java – 如何绘制代表连接节点图的树?

我想在Java GUI中显示树,但我不知道如何.树代表连接节点的图形,如下所示:我应该说我有自己的树类:public class BinaryTree{private BinaryNode root;public BinaryTree( ){root null;}public BinaryTree( Object rootItem ){root new BinaryNode( roo…

mysql 优化代码_MySQL Order by 语句优化代码详解

Order by语句是用来排序的,经常我们会使用到Order by来进行排序,下面我给大家来讲讲Order by用法与优化排序,有需要的同学可参考MySQL Order By keyword是用来给记录中的数据进行分类的。MySQL Order By Keyword根据关键词分类ORDER BY keywo…

java.lang.class_关于Java.lang.Class的一些疑问

User.class可以在编译时就确定下来Class的泛型,而new User().getClass()实际上是运行时才能确定下来实际是什么泛型。举个例子:public class User{}public class Student extends User{public static void main(String[] args) {User user1 new User();…

java文件 linux_Linux执行Java文件

最近学习shell脚本,写个简单java类让linux去执行java类没别的东西,就引了一个fastjson的jar,写了个main方法 序列化一个User对象 打印package com.lws.demo;import java.util.Date;import com.alibaba.fastjson.JSONObject;import com.lws.mo…

java 刽子手游戏_java基础(九):容器

集合的引入List (ArrayList LinkedList)Set (HashSet LinkedHashSet TreeSet )Map (HashMap LinkedHashMap TreeMap)CollectionsIterator使用泛型1.为什么使用集合而不是数组?集合和数组相似点都可以存储多个对象,对外作为一个整体存在数组的缺点长度必须…

java面试手写单链表_(转)面试大总结之一:Java搞定面试中的链表题目

packageLinkedListSummary;importjava.util.HashMap;importjava.util.Stack;/*** http://blog.csdn.net/luckyxiaoqiang/article/details/7393134 轻松搞定面试中的链表题目* http://www.cnblogs.com/jax/archive/2009/12/11/1621504.html 算法大全(1)单链表** 目录&#xff1a…

ccf认证俄罗斯方块java_CCF认证历年试题 - osc_h3robkrt的个人空间 - OSCHINA - 中文开源技术交流社区...

CCF认证历年试题不加索引整理会死星人orz第一题:CCF201712-1 最小差值(100分)CCF201703-1 分蛋糕(100分)CCF201612-1 中间数(100分)CCF201609-1 最大波动(100分)CCF201604-1 折点计数(100分)CCF201509-1 数列分段(100分)CCF201503-1 图像旋转(100分)CCF201412-1 门禁…

mysql 变量作表名查询_使用MySQL函数变量作为表名查询

我需要有一个表中增加一定的ID(如AUTO_INCREMENT)函数使用MySQL函数变量作为表名查询我有水木清华这样DELIMITER $$DROP FUNCTION IF EXISTS GetNextID$$CREATE FUNCTION GetNextID(tblName TEXT, increment INT)RETURNS INTDETERMINISTICBEGINDECLARE NextID INT;SELECT MAX(c…