我有一个脚本,获取当前时间,并且必须将其传递给其他脚本。

variable v_s_time varchar2(30);
exec :v_s_time := to_char(sysdate,'YYYY-MM-DD HH:MI:SS AM');
--Lots of unrelated code here
variable v_e_time varchar2(30);
exec :v_e_time  := to_char(sysdate,'YYYY-MM-DD HH:MI:SS AM');
@"test report script.sql" :v_s_time :v_e_time; --yes, I also tried ":v_s_time", didn't seem to do anything.

这不工作,似乎字面:v_s_time传递给脚本,而不是我想要的。"2010-04-14 05:50:01 PM"

要手动执行这一点,我可以输入:

@"test report script.sql" "2010-04-14 05:50:01 PM" "2010-04-14 05:57:34 PM"

我发现,做什么工作是这样的:

define v_s_time = "2010-04-14 05:50:01 PM"
--Lots of unrelated code here
define v_e_time = "2010-04-14 05:57:34 PM"
@"test report script.sql" "&&v_s_time" "&&v_e_time";

但它是不现实的硬编码日期时间。任何人都知道如何来处理呢?

(Oracle 10g中)

有帮助吗?

解决方案

可以使用的 NEW_VALUE子句在COL命令以动态检索一个值的替代变量:

SQL> /*Declare that the "dat" column will be stored in the v_date variable*/
SQL> COL dat NEW_VALUE v_date

SQL> SELECT to_char(sysdate,'YYYY-MM-DD HH:MI:SS AM') dat FROM dual;

DAT
----------------------
2010-04-15 09:54:29 AM

SQL> select '&&v_date' from dual;

'2010-04-1509:54:29AM'
----------------------
2010-04-15 09:54:29 AM

您可以调用脚本使用此替换变量:

@"test report script.sql" &&v_date

其他提示

您可以只是参考绑定变量中的“测试报告script.sql”的剧本?换句话说,在“试验报告script.sql”,你有一个直接引用v_s_time和v_e_time,跳过SQL的加定义的变量。虽然目前没有出现任何真正优雅的方式来从绑定变量转换为SQL 的加DEFINE'd变量。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top