在Oracle SQL Developer中使用动态变量

时间:2014-09-04 16:16:37

标签: sql oracle oracle-sqldeveloper

尝试在Oracle SQL Developer中设置WHILE LOOP,但我在尝试设置/定义变量时遇到了很多麻烦。我以前在PHP工作,我会在我的PHP脚本上声明这个。

以下是我的内容。脚本未完成我基本上会在完成后循环几周。

VARIABLE MYDateVar2 varchar2(40);
EXEC :MYDateVar2 := '01-JAN-14';

select customer_name, 
sum(CASE when to_char(to_date(PLANNED_SHIP_DATE), 'WW') = 40 then (REVISED_QTY_DUE - QTY_SHIPPED) * SALE_UNIT_PRICE end) as Wk40
from customer_order_join 
where planned_ship_date >= :MYDateVar2 
group by customer_name;

所以基本上放置变量' MYDateVar2'回到脚本。我之前尝试过使用@@和:但是Oralce SQL Developer不断提示我输入值。我也知道我应该将varchar设置为DATE,但现在应该没问题。

有人可以告诉我如何将变量正确插入脚本吗?谢谢!

1 个答案:

答案 0 :(得分:1)

你正在做的事情很好,只要你告诉SQL Developer运行整个脚本,而不仅仅是select语句;你需要运行脚本(F5),而不是运行语句(Ctrl + Enter)。如果它独立运行语句,那么它将始终提示绑定变量值。

不直接相关,但是......大概你使用的是对你客户的NLS设置有效的日期格式,但是你不应该依赖它;总是明确设置格式更安全:

where planned_ship_date >= to_date(:MYDateVar2, 'DD-MON-RR')

如果你要循环,那么你需要编写PL / SQL,所以你也可以在块内而不是在客户端级别声明变量,除非你想将相同的值传递给多个块或存储过程调用。