[20251015]建立和完善col_vlist.sql脚本.txt

来源:这里教程网 时间:2026-03-03 22:47:48 作者:

[20251015]建立和完善col_vlist.sql脚本.txt --//建立一个支持视图的版本,由于oracle没有视图提取字段信息的视图,只能通过desc提取,通过bash shell处理生成需要的脚本。 --//如果有哪个视图支持提取视图字段信息的,希望告知,我再重写该脚本。 $ cat col_vlist.sql -- Copyright 2023 lfree. All rights reserved. -- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms and conditions. -------------------------------------------------------------------------------- -- -- Name:        col_vlist.sql -- Purpose:     display table or view  of column_name list. -- -- Author:      lfree -- Usage: --     @col_vlist owner.[table_name|view_name] regexp_column_list|column_lists --     column_list format : 1,2,4,5 or 2-4,7 -- -------------------------------------------------------------------------------- set term off col 2 new_value 2 col tpt_comment1 new_value _tpt_comment1 col tpt_comment2 new_value _tpt_comment2 select null "2" from dual where 1=2; select  decode('&2',null,'*',replace(replace('&2',',','p;'),'-',',')) "2" ,CASE WHEN (INSTR (LOWER ('&2'), ',') > 0 or INSTR (LOWER ('&2'), '-') > 0 ) THEN '##' WHEN '&2' IS NULL THEN '  ' ELSE '  ' END tpt_comment1 ,CASE WHEN (INSTR (LOWER ('&2'), ',') > 0 or INSTR (LOWER ('&2'), '-') > 0 ) THEN '  ' WHEN '&2' IS NULL THEN '##' ELSE '##' END tpt_comment2 from dual; set term on def _desc_tmpfile=&_tpt_tempdir/desc_&_tpt_tempfile..tmp def _sp_tmpfile=&_tpt_tempdir/sp_&_tpt_tempfile..tmp set linesize 80 set term off spool &_desc_tmpfile set describe depth 1 linenum off indent on desc &1 set describe depth 1 linenum on indent on spool off set term on set linesize 269 --host sed -n '1,/----------/p' &_desc_tmpfile --host sed -n '/----------/,$p' &_desc_tmpfile | awk '{print $1}'| egrep -i '&2' host &_tpt_comment1 (echo SELECT ; sed -n '/----------/,$p;' &_desc_tmpfile | egrep -v -- "----------|^$" | awk '{print tolower($1)}'| egrep -i '&2' | sed -n '1p;2,$s/^/,/p'; echo  FROM '&1 ') |tee &_sp_tmpfile host &_tpt_comment2 (echo SELECT ; sed -n '/----------/,$p;' &_desc_tmpfile | egrep -v -- "----------|^$" | awk '{print tolower($1)}'| sed -n '&2.p' | sed -n '1p;2,$s/^/,/p'; echo  FROM '&1 ') |tee &_sp_tmpfile get &_sp_tmpfile nolist host &_DELETE &_desc_tmpfile &_sp_tmpfile --//简单测试: --//测试前说明一下通过判断参数2是否存在逗号是否是数字顺序,如果仅仅输入1个数字没有逗号会存在问题,可以简单加入,1001规避 --//这个问题,注意这里不能输入0. SCOTT@book01p> @ col_vlist emp 1 SELECT FROM emp SCOTT@book01p> @ col_vlist emp 1,1001 SELECT empno FROM emp SCOTT@book01p> @ col_vlist emp 1-2,5 SELECT empno ,ename ,hiredate FROM emp SCOTT@book01p> @ descv v$database " dbid|supp"            Name                            Null?    Type            ------------------------------- -------- ----------------------------     1      DBID                                     NUMBER    30      SUPPLEMENTAL_LOG_DATA_MIN                VARCHAR2(8)    31      SUPPLEMENTAL_LOG_DATA_PK                 VARCHAR2(3)    32      SUPPLEMENTAL_LOG_DATA_UI                 VARCHAR2(3)    40      SUPPLEMENTAL_LOG_DATA_FK                 VARCHAR2(3)    41      SUPPLEMENTAL_LOG_DATA_ALL                VARCHAR2(3)    52      SUPPLEMENTAL_LOG_DATA_PL                 VARCHAR2(3)    59      SUPPLEMENTAL_LOG_DATA_SR                 VARCHAR2(3) SCOTT@book01p> @ col_vlist v$database 1,30-32,40,41,52,59 SELECT dbid ,supplemental_log_data_min ,supplemental_log_data_pk ,supplemental_log_data_ui ,supplemental_log_data_fk ,supplemental_log_data_all ,supplemental_log_data_pl ,supplemental_log_data_sr FROM v$database SCOTT@book01p> /       DBID SUPPLEME SUP SUP SUP SUP SUP SUP ---------- -------- --- --- --- --- --- --- 1617337831 YES      NO  NO  NO  NO  NO  NO     SCOTT@book01p> @ col_vlist v$database ^dbid|supp SELECT dbid ,supplemental_log_data_min ,supplemental_log_data_pk ,supplemental_log_data_ui ,supplemental_log_data_fk ,supplemental_log_data_all ,supplemental_log_data_pl ,supplemental_log_data_sr FROM v$database SCOTT@book01p> /       DBID SUPPLEME SUP SUP SUP SUP SUP SUP ---------- -------- --- --- --- --- --- --- 1617337831 YES      NO  NO  NO  NO  NO  NO

相关推荐