为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:dm8
【操作系统】:Windows
【CPU】:--
【问题描述】*:
声明日期变量,删除表后创建表,这种写法报错,是为什么呢?
declare yes_d date :=add_days(curdate(), -1);
befyse_d date :=add_days(curdate(),-2);
yes_d_last_m date :=add_months(yes_d,-1);
start_m date := add_days(yes_d, - DAY (yes_d) + 1);
yes_d_30d date :=add_days(curdate(),-31);
start_last_m date :=add_months(start_m,-1);
begin
DROP TABLE IF EXISTS table_a;
CREATE TABLE IF NOT EXISTS table_a AS
selec * from table_b
where b.dt=yes_d;
end;
DDL语句请用动态SQL语法
execute immediate 'create table xxx';
declare
yes_d date :=add_days(curdate(), -1);
befyse_d date :=add_days(curdate(),-2);
yes_d_last_m date :=add_months(yes_d,-1);
start_m date := add_days(yes_d, - DAY (yes_d) + 1);
yes_d_30d date :=add_days(curdate(),-31);
start_last_m date :=add_months(start_m,-1);
begin
execute immediate 'DROP TABLE IF EXISTS table_a;';
execute immediate 'CREATE TABLE /*IF NOT EXISTS*/ table_a AS select * from table_b b where b.dt = :B1' using yes_d;
end;
DDL在PLSQL不能直接使用,需要添加EXECUTE IMMEDIATE ,EXECUTE IMMEDIATE 'DROP TABLE IF EXISTS table_a;' ; EXECUTE IMMEDIATE 'CREATE TABLE IF NOT EXISTS table_a AS
selec * from table_b
where b.dt='||yes_d||';';