我在Oracle SQL developer中有一条SQL语句,它有一些变量:
DEFINE custom_date = "'22-JUL-2016'" --run1
DEFINE custom_date = "'25-JUL-2016'" --run2
SELECT * FROM TABLE WHERE date=&custom_date
实际的查询要复杂得多,并且具有更多的变量,并且根据查询的结果创建新的表。如何创建脚本以执行两次查询,第一次使用第一行中设置的自定义日期,第二次使用第二行中设置的自定义日期。
发布于 2016-09-26 12:17:42
在Oracle中,&variable
是一个“替代变量”,不是SQL的一部分;它是SQL*Plus脚本语言的一部分(被SQL Developer、Toad等所理解)。
更好的选择,也就是您所问的,是绑定变量。符号是:variable
(用冒号:代替&),例如:custom_date
。
不同之处在于,在将查询发送到Oracle引擎之前,替代变量在前端应用程序(在您的例子中是SQL Developer )中被替换为它的值。绑定变量在运行时被替换。这有几个好处;讨论它们超出了您的问题的范围。
当您在SQL Developer中使用绑定变量执行查询时,程序将打开一个窗口,您可以在其中为绑定变量输入所需的值。你将不得不尝试一下,直到你可以让它工作(例如,我从来不记得日期必须用单引号还是不用引号)。祝好运!
发布于 2016-09-26 11:31:44
Define在TRANSACT SQL中使用。要执行此Oracle操作,您可以创建匿名PL/SQL块,如下所示:
DECLARE
p_param1 DATE;
p_param2 NUMBER;
CURSOR c_cur1(cp_param1 DATE,cp_param2 NUMBER)
IS
SELECT * FROM table WHERE date = cp_param1
;
BEGIN
-- Execute it first time
p_param1 := TO_DATE('2016-09-01','YYYY-MM-DD');
FOR r IN c_cur1(p_param1)
LOOP
NULL;
END LOOP;
-- Execute it second time
p_param1 := TO_DATE('2015-10-11','YYYY-MM-DD');
FOR r IN c_cur1(p_param1)
LOOP
NULL;
END LOOP;
END;
在其中,您可以创建带有参数的游标,并使用不同的参数执行两次。我不知道您为什么要执行这个查询两次,所以上面的脚本对结果没有任何作用,但它肯定应该使用不同的参数执行您的查询两次。
https://stackoverflow.com/questions/39701062
复制相似问题