【发布时间】:2018-01-30 17:38:43
【问题描述】:
谁能帮我解决这个错误?我想立即执行一个创建表语句,该语句连接一个每天/每月都会更改的表名。
这是我的代码...
DECLARE
v_table_name VARCHAR2(100);
v_get_fromdate VARCHAR2(200);
BEGIN
v_table_name := 'mpiat_after_bs_' || SUBSTR(TO_CHAR(SYSDATE, 'ddmonyy'), 3, 5) || '_t';
v_get_fromdate := 'select GET_FROMDATE(to_date(''01/'|| SUBSTR(TO_CHAR(SYSDATE, 'mmddyy'), 1, 2
) ||'/2017 00:00:00'',''dd/mm/yyyy hh24:mi:ss''),''R'') from dual;';
EXECUTE IMMEDIATE ''
CREATE TABLE ' || v_table_name || ' AS
SELECT column1 ,
column2 ,
column3 ,
column4 ,
column5
FROM table_name
WHERE column1 >=' || v_get_fromdate ||'
AND column3 LIKE ''tbl_%''';
END;
这是我得到的错误...
Error report -
ORA-00936: missing expression
ORA-06512: at line 7
00936. 00000 - "missing expression"
*Cause:
*Action:
Line 7 is EXECUTE IMMEDIATE 'CREATE TABLE ' || v_table_name || ' AS SELECT column1
我已经搜索了很多关于这个的代码......但我没有看到任何人在创建表时将表名连接为变量。
我只是想知道这是否可能。我愿意接受任何建议。谢谢!
【问题讨论】:
-
你能用你的确切代码更新问题吗
-
检查您的报价。例如。
EXECUTE IMMEDIATE ''应该是EXECUTE IMMEDIATE '。你也不能在子查询中使用;(v_get_fromdate) -
这是准确的代码,我只是更改数据保护的值。谢谢
-
@Luis - 我会考虑不这样做 - 创建许多这样的表通常是一个糟糕的主意,而实际正确的解决方案是归档或分区
标签: sql database plsql concatenation execute-immediate