当前位置: 首页 > news >正文

[20251014]建立和完善col_list.sql脚本.txt

[20251014]建立和完善col_list.sql脚本.txt

--//增加选择字段顺序号功能。
$ cat col_list.sql
-- Copyright 2023 lfree. All rights reserved.
-- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms and conditions.
--------------------------------------------------------------------------------
--
-- Name:        col_list.sql
-- Purpose:     display table of column_name list.
--
-- Author:      lfree
-- Usage:
--     @col_list owner.table_name regexp_column_list|column_lists
--     column_list format : 1,2,4,5
--
--------------------------------------------------------------------------------

set term off head off feedback off
col 2 new_value 2
col tpt_comment1 new_value _tpt_comment1
col tpt_comment2 new_value _tpt_comment2

select null "2" ,null "3" from dual where 1=2;
select
 decode('&2',null,'*','&2') "2"
,CASE WHEN INSTR (LOWER ('&2'), ',') > 0 THEN '--' WHEN '&2' IS NULL THEN '--' ELSE '  ' END tpt_comment1
,CASE WHEN INSTR (LOWER ('&2'), ',') > 0 THEN '  ' WHEN '&2' IS NULL THEN '--' ELSE '--' END tpt_comment2
from dual;

set term on

def _sp_tmpfile=&_tpt_tempdir/sp_&_tpt_tempfile..tmp

spool &_sp_tmpfile
SELECT    'SELECT'
       || CHR (10)
       || ' '
       || LISTAGG (LOWER (column_name), CHR (10) || ',') WITHIN GROUP (ORDER BY column_id)
       || CHR (10)
       || 'FROM &&1'
          c80
  FROM (  SELECT data_type
                ,column_id
                ,column_name
                ,data_type
            FROM dba_tab_cols
           WHERE     UPPER (table_name) LIKE
                        UPPER (
                           CASE WHEN INSTR ('&&1', '.') > 0 THEN SUBSTR ('&&1', INSTR ('&&1', '.') + 1) ELSE '&&1' END) ESCAPE '\'
                 AND owner LIKE
                        CASE
                           WHEN INSTR ('&&1', '.') > 0 THEN UPPER (SUBSTR ('&&1', 1, INSTR ('&&1', '.') - 1))
                           ELSE USER
                        END ESCAPE '\'
                 AND HIDDEN_COLUMN = 'NO'
                 &_tpt_comment1 AND REGEXP_LIKE (LOWER (COLUMN_NAME), LOWER ('&&2'))
                                 &_tpt_comment2 AND COLUMN_id in ( &&2)
        ORDER BY column_id);
spool off

set head on feedback 6

get &_sp_tmpfile nolist

host &_delete &_sp_tmpfile

--//缺点只能根据表来建立生成sql语句。如果是视图不行,另外写一个支持视图的版本。
--//还有1个问题就是我通过判断参数2是否存在逗号是否是数字顺序,如果仅仅输入1个数字没有逗号会存在问题,可以简单加入,0规避
--//这个问题或者输入一个很大的数字比如1001代替0.

--//简单测试:
SCOTT@book01p> @ desc emp
           Name                            Null?    Type
           ------------------------------- -------- ----------------------------
    1      EMPNO                           NOT NULL NUMBER(4)
    2      ENAME                                    VARCHAR2(10)
    3      JOB                                      VARCHAR2(9)
    4      MGR                                      NUMBER(4)
    5      HIREDATE                                 DATE
    6      SAL                                      NUMBER(7,2)
    7      COMM                                     NUMBER(7,2)
    8      DEPTNO                                   NUMBER(2)

SCOTT@book01p> @ col_vlist emp ''
SELECT
empno
,ename
,job
,mgr
,hiredate
,sal
,comm
,deptno
FROM emp
--//没有输入参数2,取出全部字段。

SCOTT@book01p> @ col_list emp 1

SELECT

FROM emp
--//仅仅一个数字被当作正则表达式。加入1个数字1001后正常。

SCOTT@book01p> @ col_vlist emp 1,1001

SELECT
empno
FROM emp

    
SCOTT@book01p> @ col_list emp 1,2,5-6
SELECT
 empno
,ename
FROM emp
--//缺点不支持5-6这样的写法,不过不会报错当作-1。要支持这个功能难度有点大,暂时放弃!!

SCOTT@book01p> @ col_list emp 1,2,5,6
SELECT
 empno
,ename
,hiredate
,sal
FROM emp

SCOTT@book01p> 9999 where ename like 'S%'
SCOTT@book01p> /

     EMPNO ENAME      HIREDATE                   SAL
---------- ---------- ------------------- ----------
      7369 SMITH      1980-12-17 00:00:00        800
      7788 SCOTT      1987-07-13 00:00:00       3000

SCOTT@book01p> @ col_list emp ^e|date|sal

SELECT
 empno
,ename
,hiredate
,sal
FROM emp


SCOTT@book01p> 9999 where sal>=3400;
SCOTT@book01p> /

     EMPNO ENAME      HIREDATE                   SAL
---------- ---------- ------------------- ----------
      7839 KING       1981-11-17 00:00:00       5000


http://www.gsyq.cn/news/21851.html

相关文章:

  • 倍增法
  • 鸿蒙NEXT Wi-Fi扫描编写指南:从基础到实战
  • 251015读书报告
  • 元推理框架的诞生,是绝对真实的证明,彻底击溃虚无论
  • 吴恩达深度学习课程一:神经网络和深度学习 第二周:神经网络基础 课后习题和代码实践
  • 蛋白表达标签:提升重组蛋白研究与生产的关键工具
  • Zhengrui #3346. DINO
  • Pytorch深度学习训练
  • P11894 「LAOI-9」Update
  • win10软实时设置 - 教程
  • 实用指南:Hunyuan3D-Omni:可控3D资产生成的统一框架
  • ZR 2025 NOIP 二十连测 Day 3
  • P66实训题
  • 非主流网站程序IndexNow添加方法
  • 卷积神经网络视频读书报告
  • 以*this返回局部对象的两种情况
  • 2025.10.15
  • Kali 自定义ISO镜像
  • pytorch实训题
  • 【Azure App Service】App Service是否支持PHP的版本选择呢?
  • Markdown转换为Word:Pandoc模板使用指南 - 实践
  • 复习CSharp
  • C语言学习——运算符的学习
  • 实用指南:NXP - 用MCUXpresso IDE v25.6.136的工具链编译Smoothieware固件工程
  • cifar10
  • 感知节点@4@ ESP32+arduino+ 第二个程序 LED灯显示
  • WebGL学习及项目实战(第02期:绘制一个点)
  • display ip routing-table protocol ospf 概念及题目 - 详解
  • C语言学习——小数数据类型
  • 高敏感人应对焦虑