用报告标题中显示的 case-insensitive 模式匹配和匹配替换变量

Substitute variable with case-insensitive pattern matching and match shown in report title

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

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

只要用户确切知道 table1.column1 的值是如何存储的,一切都会正常进行。如果它有值 Oracle 并且用户插入提示符 Oracle,脚本成功结束。

现在我希望用户输入的任何片段都匹配。例如。如果用户提供 Ora,则输出将是 Oracle...

如何结合

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 的评论获得 case-insensitive 匹配,

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

但它只显示报告标题中的 user-supplied 片段(来自 ttitle),而不是它匹配的 table 的实际值。如何将实际的列值放入报告标题中?

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

您可以使用列值 as shown in the documentation:

更改 ttitle

You can reference a column value in a top title by storing the desired value in a variable and referencing the variable in a TTITLE command

使用 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 定义了 ttitle 指令中引用的 subtitle。不是说不叫代入变量,这里没有&。如文档中所述,您需要中断用于标题的列。如果您 想在标题中查看值,而不是在报告本身中,您可以将 noprint 添加到该 column 指令中。