【发布时间】:2016-05-31 05:27:45
【问题描述】:
我需要一个可以动态更改的时间戳变量,但是当我尝试将此时间戳变量传递给语句时,这不起作用:
没有时间戳变量,它可以工作:
CREATE OR REPLACE
PROCEDURE "PR_TEST"( sl_cursor OUT SYS_REFCURSOR)
IS
stm VARCHAR2(3000);
var_ativo number:= 1 ;
BEGIN
stm := 'SELECT
*
FROM
SIMET.TB_1 SC
JOIN SIMET.TB_2 D ON D.HASH = SC.HASH
WHERE
SC.IS_ACTIVE = ' || var_ativo ;
OPEN sl_cursor FOR stm ;
END;
但使用 timestamp var ,它不起作用:
CREATE OR REPLACE
PROCEDURE "PR_TEST"( sl_cursor OUT SYS_REFCURSOR)
IS
stm VARCHAR2(3000);
var_ativo number:= 1 ;
var_ts timestamp := SYSTIMESTAMP
BEGIN
stm := 'SELECT
*
FROM
SIMET.TB_1 SC
JOIN SIMET.TB_2 D ON D.HASH = SC.HASH
WHERE
SC.IS_ACTIVE = ' || var_ativo
AND
sc.timestamp = ' || var_ts
OPEN sl_cursor FOR stm ;
END;
有人知道我是怎么做到的吗?
【问题讨论】:
-
这些查询似乎都不需要动态 SQL。您真的、真的、真的确定需要动态 SQL 方法,而不仅仅是使用静态 SQL?
-
你试过 GetDate() 吗?为什么要使用动态 SQL 而不是直接使用 SQL?
-
我为此使用动态 sql,因为我的完整查询花费了很多时间来返回选择,并且在选择之后我需要在每个结果中进行更新,(大约 300 万)和数据库停止。然后我决定在较小的查询中分开,我将做一个循环,我将每天更改日期。有人会建议另一种方法吗?
-
对不起我的(糟糕的)英语,我正在努力提高这一点。
-
这甚至不像 t-sql 这是一个 CLR proc?为什么要使用一个来完成可以在 t-sql 中完成的事情?在 proc 中一次更新 300 万条记录是一个非常糟糕的主意。您可能仍需要循环,但您希望分批运行记录,而不是一次运行一条记录的典型游标。请详细说明您要完成的工作,以便我们向您展示实现目标的最佳方式。目前没有足够的信息来确定您需要什么,因为您在选择后引用了更新并且没有向我们显示代码。
标签: sql oracle stored-procedures plsql