1

我有一张表,月份如下所示:

product rev_jan unit_jan prod_jan rev_feb  rev_march u...

我需要获取当月的数据。

目前我正在使用绑定变量。

select 
rev_&1,
prod_&1,
unit_&1
from 
table_name

有没有更好的方法解决方案,因为在这种方法中我必须提示月份 3 次。

4

1 回答 1

2

OP 描述的是在 sqlplus“命令行”上为 sqlplus 脚本提供参数。如果文件包含以下内容:

select 
rev_&1,
prod_&1,
unit_&1
from 
table_name;

然后 sqlplus 将从提示中获取第一个“命令行参数”,例如

SQL> @script.sql arg1

并用文字值 arg1 替换 '&1' 而不提示三次(或者无论脚本中出现多少次子字符串 '&1')。

如果您没有在“命令行”上提供参数,那么 sqlplus 将在每次出现在脚本中时提示输入“&1”的值(此处为 3 次)。

为避免 sqlplus 解释 '&' 字符,您可以使用 sqlplus 的“set define off”或在字符串中连接单个 '&' 字符文字:'AT' || '&' || 'T'

或者,您可以在脚本中设置提示以提高可读性:

accept a_month prompt 'Please enter the desired month: '
select 
    rev_&a_month,
    prod_&a_month,
    unit_&a_month
    from 
    table_name;

然后,从 sqlplus 提示符调用脚本,如下所示:

SQL> @script.sql
Please enter the desired month: jan

(脚本在这里执行。)

有关 sqlplus 参考,请参阅Oracle 手册

于 2013-01-28T19:20:14.857 回答