尝试在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,但现在应该没问题。
有人可以告诉我如何将变量正确插入脚本吗?谢谢!
答案 0 :(得分:1)
你正在做的事情很好,只要你告诉SQL Developer运行整个脚本,而不仅仅是select语句;你需要运行脚本(F5),而不是运行语句(Ctrl + Enter)。如果它独立运行语句,那么它将始终提示绑定变量值。
不直接相关,但是......大概你使用的是对你客户的NLS设置有效的日期格式,但是你不应该依赖它;总是明确设置格式更安全:
where planned_ship_date >= to_date(:MYDateVar2, 'DD-MON-RR')
如果你要循环,那么你需要编写PL / SQL,所以你也可以在块内而不是在客户端级别声明变量,除非你想将相同的值传递给多个块或存储过程调用。