立即执行创建表



谁能帮我解决这个错误?我想立即执行一个创建表语句,该语句连接一个每天/每月都会更改的表名称。

这是我的代码...

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 ''

您只需要 1 个报价,而不是 2 个报价

将其更改为

EXECUTE IMMEDIATE '

线

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;';

那应该是

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)';

分号不能在子查询中使用。

根据您的代码,我们不需要 SELECT 语句来从 oracle 函数中获取值。我们应该尽可能避免动态查询。希望下面的片段有所帮助。

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 := GET_FROMDATE(TO_DATE('01/'|| SUBSTR(TO_CHAR(SYSDATE, 'mmddyy'), 1, 2) ||'/2017 00:00:00','dd/mm/yyyy hh24:mi:ss'),'R');
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;
/

相关内容

  • 没有找到相关文章

最新更新