在PL SQL块中的执行立即数中传递动态日期
我想将日期传递给PL/SQL块中的“CREATETABLE”语句,因为我想为最后一个未处理的日子创建快照表。 我试图运行以下代码:在PL SQL块中的执行立即数中传递动态日期,sql,oracle,plsql,Sql,Oracle,Plsql,我想将日期传递给PL/SQL块中的“CREATETABLE”语句,因为我想为最后一个未处理的日子创建快照表。 我试图运行以下代码: DECLARE current_date_key NUMBER; current_date DATE; BEGIN SELECT date_key INTO current_date_key FROM tmp_periods per WHERE per.status = 'UNPROCESSED'; current_date := trun
DECLARE
current_date_key NUMBER;
current_date DATE;
BEGIN
SELECT date_key
INTO current_date_key
FROM tmp_periods per WHERE per.status = 'UNPROCESSED';
current_date := trunc(TO_DATE(current_date_keys(i), 'yyyymmdd'));
EXECUTE IMMEDIATE 'CREATE TABLE tmp_history_snapshot AS SELECT * FROM communication_history WHERE
new_date = :1' using current_date;
END;
但它返回ORA-01027错误代码
您能帮助我如何将日期传递给这种语句吗?绑定变量在DDL中是不允许的, 连接而不是使用绑定变量
DECLARE
current_date_key NUMBER;
current_date DATE;
q VARCHAR2(32767);
BEGIN
SELECT date_key
INTO current_date_key
FROM tmp_periods per WHERE per.status = 'UNPROCESSED';
current_date := trunc(TO_DATE(current_date_keys(i), 'yyyymmdd'));
q := 'CREATE TABLE tmp_history_snapshot AS SELECT * FROM communication_history WHERE
new_date = ' || current_date;
EXECUTE IMMEDIATE q;
END;
您最好设置日期格式,以避免意外行为。是的,下面的答案是最好的