-1

我正在尝试在 Oracle 存储过程中动态创建表。

我在字符串变量中创建了创建表 sql。

下面是sql快照和错误。

程序正在编译,没有任何问题。但是在尝试执行该过程时,我遇到了运行时错误。to_char由于表达,我得到了这个问题。

CREATE OR REPLACE PROCEDURE TESTPROC12(P_TMP_Table IN VARCHAR2) AUTHID CURRENT_USER IS
    V_SQL_STMT1 varchar2(1000);
    V_TMP_Table varchar2(100);
BEGIN
    V_TMP_Table := concat('TMP', to_char(sysdate,'MMDDYYYYHH24MISSSSS'));
    V_SQL_STMT1 := 'CREATE TABLE '|| V_TMP_Table||' AS
        SELECT * from TMP_STMTSENT2 where rowid in (select min(rowid) from '|| P_TMP_Table||'
                                                                group by CUSTOMER_RELATIONSHIP_ID, to_char(''STATEMENT_PROCESSED_DATE'',''MM/DD/YYYY''))';

    EXECUTE IMMEDIATE V_SQL_STMT1;
END;

程序- 我需要使用 to_char。

EXEC TESTPROC12('TMP_STMTSENT2')

Error starting at line 20 in command:
EXEC TESTPROC12('TMP_STMTSENT2')
Error report:
ORA-01722: invalid number
ORA-06512: at "EDLVY.TESTPROC12", line 15
ORA-06512: at line 1
01722. 00000 -  "invalid number"
*Cause:    
*Action:
4

3 回答 3

1

生成并执行的语句可能如下所示:

CREATE TABLE 10222013023309188 AS SELECT * from TMP_STMTSENT2 where rowid in (select min(rowid) from qeoiwqeoiwq group by CUSTOMER_RELATIONSHIP_ID, to_char('STATEMENT_PROCESSED_DATE','MM/DD/YYYY'))

问题可能出在“STATEMENT_PROCESSED_DATE”上,它不是日期。试试看sysdate它是否有效。

于 2013-10-22T02:34:46.493 回答
1

看看文档。您将字符串传递'STATEMENT_PROCESSED_DATE'to_char(). 也许您想传递列或值STATEMENT_PROCESSED_DATE

于 2013-10-22T02:36:42.703 回答
1

做你正在做的事情的一个好方法是使用 Oracle 临时表

http://docs.oracle.com/cd/B28359_01/server.111/b28310/tables003.htm#i1006400 http://www.dba-oracle.com/t_temporary_tables_sql.htm http://www.oracle-base。 com/articles/misc/temporary-tables.php

于 2013-10-22T07:34:00.393 回答