-1

Oracle ストアド プロシージャでテーブルを動的に作成しようとしています。

文字列変数に create table 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

あなたが追求していることを行う良い方法は、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 に答える