当前位置: 首页 > 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.hskmm.com/?act=detail&tid=31864

相关文章:

  • [20251014]建立完善通用的prx.sql脚本.txt
  • 倍增法
  • 复杂版式与印章干扰下的高精度社会团体法人登记证书识别技术
  • 征程 6 | BPU trace 简介与实操
  • 2025年预应力千斤顶厂家最新权威推荐榜:批发采购、张拉设备、同步顶升系统专业供应商综合测评与选购指南
  • 2025.10.15训练记录
  • 利用Next.js中间件漏洞实现SSRF攻击与RCE
  • 三级医疗服务体系 (Three Tiers of Care)
  • 2025年瑕疵检测设备厂家最新推荐排行榜,表面瑕疵检测,薄膜瑕疵检测,铝箔瑕疵在线检测,外观瑕疵检测机公司推荐!
  • 2025年冷却塔厂家最新推荐排行榜:高效制冷与稳定性能之选!
  • 牛客2025秋季算法编程训练联赛1
  • 2025 年风淋室厂家选哪家?广州灵洁凭技术专利与全链服务打造净化设备优质之选
  • 251015读书报告
  • MySQL
  • 元推理框架的诞生,是绝对真实的证明,彻底击溃虚无论
  • JAVA8 map flatmap用法
  • Spring bean初始化过程
  • 吴恩达深度学习课程一:神经网络和深度学习 第二周:神经网络基础 课后习题和代码实践
  • 【Windows】如何管理电脑磁盘文件,保持简洁 - 教程
  • 范围综述
  • 低代码软件开发流程
  • 生成器
  • CSP-S模拟30
  • 2025多校冲刺CSP模拟赛5
  • float
  • 读书报告和代码
  • P66实训2
  • 《程序员的修炼之道:从小工到专家》阅读笔记
  • 关于Pytorch深度学习神经网络的读书报告
  • 牛客刷题-Day13