2014-09-04 133 views
0

试图在Oracle SQL Developer中设置WHILE LOOP,但在尝试设置/定义变量时遇到了很多问题。我习惯于在PHP中工作,我会在我的PHP脚本中声明这一点。在Oracle SQL Developer中使用动态变量

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

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

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

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

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

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

+0

这绝对好像让我度过了这个障碍。我确实失去了漂亮的表格结构视图,不能右键单击导出到Excel。我现在需要在脚本中添加一个导出命令吗?谢谢! – Mike 2014-09-04 16:27:00

+0

正确的是,您不再在网格视图查询结果窗口中获得结果。您的脚本可能会从不同的表中进行多次选择,这会使网格视图变得不切实际。您可以将结果后台打印到一个文件(或多个文件),但这取决于您接下来要做什么。不知道如何适应循环虽然。 – 2014-09-04 16:30:20