代码之家  ›  专栏  ›  技术社区  ›  smtsmo

用不区分大小写的模式匹配和报表标题中显示的匹配替换变量

  •  -1
  • smtsmo  · 技术社区  · 10 年前

    我正在创建一个SQL*Plus脚本,要求用户提供替代变量的值。在我的查询块中,我有:

    select ...
    from ...
    where table1.column1 = '&substitute_variable';
    

    只要用户确切地知道值是如何存储的,一切都正常 table1.column1 。如果它有价值 神谕 用户插入提示 神谕 ,脚本成功结束。

    现在我希望用户输入的任何片段都匹配。E、 g.如果用户提供 奥拉 ,则输出将为 神谕

    如何将

    where table1.column1 = '&substitute_variable' 
    

    where table1.column1 like '%'
    

    包括不区分大小写?

    我的脚本是:

    accept subtitute_value prompt 'insert smt: '; 
    some formating.. 
    column ... format ... new_value something noprint 
    ttitle center "Report for: " subtitute_variable skip 5 
    break on something 
      select-statements
    

    我可以使用Aleksej的注释获得不区分大小写的匹配

    upper(table1.column1) like upper('%&substitute_variable%')
    

    但它只在报告标题中显示用户提供的片段(来自 ttitle ),而不是它匹配的表中的实际值。如何在报表标题中获取实际列值?

    2 回复  |  直到 10 年前
        1
  •  1
  •   Alex Poole    10 年前

    您可以更改 ttitle 使用列值, as shown in the documentation :

    通过将所需值存储在变量中并在TTITLE命令中引用该变量,可以引用顶部标题中的列值

    使用Aleksej的数据但扩展到多行,可以执行以下操作:

    set verify off
    
    accept subtitute_value prompt 'insert smt: ';
    
    ttitle center "Report for: " subttitle skip 5
    column column1 new_value subttitle
    break on column1 skip page
    
    select column1, column2, column3
    from table1
    where upper(table1.column1) like upper('%&subtitute_value%')
    order by column1; -- and others
    

    其中:

    insert smt: ora
    
                               Report for: 123 ORAC LE 333
    
    
    
    
    COLUMN1                 COLUMN2 COLUMN3
    -------------------- ---------- --------------------
    123 ORAC LE 333              95 Some text
                                 99 Some text
    
                                 Report for: xxOracleyy
    
    
    
    
    COLUMN1                 COLUMN2 COLUMN3
    -------------------- ---------- --------------------
    xxOracleyy                   13 Some text
                                  7 Some text
                                 42 Some text
                                  5 Some text
                                 71 Some text
    
    7 rows selected.
    

    这个 column ... new_value subttitle 定义了 subtitle 参考 小提琴 指令。Not未被称为替换变量 & 在这里如文档中所述,您需要打断标题所用的列。如果你 只有 希望看到标题中的值,而不是报告本身,您可以添加 noprint 到那个 column 指令。

        2
  •  0
  •   Aleksej    10 年前
    SQL> set verify off
    SQL> accept subtitute_value prompt 'insert smt: ';
    insert smt: ora
    SQL> ttitle center "Report for: " &subtitute_value skip 5
    SQL> select column1
      2  from table1
      3  where upper(table1.column1) like upper('%& subtitute_value%');
    
                                     Report for: ora
    
    
    
    
    COLUMN1
    ----------------
    xxOracleyy
    123 ORAC LE 333