Oracle DBMS_SQL.column值错误。。动态游标

Oracle DBMS_SQL.column值错误。。动态游标,oracle,stored-procedures,cursor,Oracle,Stored Procedures,Cursor,我很难找出下面代码中的错误 DECLARE CR_QUERY INTEGER; CR_HANDLE INTEGER; V_COL1 VARCHAR2(40); V_COL2 VARCHAR2(18); N_ACTION NUMBER(3); T_CREATE_TS TIMESTAMP(6

我很难找出下面代码中的错误

DECLARE
    CR_QUERY                INTEGER;
    CR_HANDLE               INTEGER;        
    V_COL1          VARCHAR2(40);
    V_COL2          VARCHAR2(18);
    N_ACTION                NUMBER(3);
    T_CREATE_TS             TIMESTAMP(6);
    V_COL3          VARCHAR2(60);

BEGIN
    CR_QUERY := DBMS_SQL.OPEN_CURSOR;
    DBMS_SQL.PARSE (CR_QUERY, I_V_QUERY, DBMS_SQL.NATIVE);
    DBMS_SQL.DEFINE_COLUMN (CR_QUERY, 1, V_COL1, 40);
    DBMS_SQL.DEFINE_COLUMN (CR_QUERY, 2, V_COL2, 18);
    DBMS_SQL.DEFINE_COLUMN (CR_QUERY, 3, N_ACTION, 3);
    DBMS_SQL.DEFINE_COLUMN (CR_QUERY, 4, T_CREATE_TS, 6);
    DBMS_SQL.DEFINE_COLUMN (CR_QUERY, 5, V_COL3, 60);

    CR_HANDLE := DBMS_SQL.EXECUTE (CR_QUERY);
    LOOP
        BEGIN
            EXIT WHEN DBMS_SQL.FETCH_ROWS (CR_HANDLE) = 0;

            DBMS_SQL.COLUMN_VALUE (CR_QUERY, 1, V_COL1, N_COLERR, I_ACTUAL_LEN);
            DBMS_SQL.COLUMN_VALUE (CR_QUERY, 2, V_COL2, N_COLERR, I_ACTUAL_LEN);
            DBMS_SQL.COLUMN_VALUE (CR_QUERY, 3, N_ACTION, N_COLERR, I_ACTUAL_LEN);
            DBMS_SQL.COLUMN_VALUE (CR_QUERY, 4, T_CREATE_TS, N_COLERR, I_ACTUAL_LEN);
            DBMS_SQL.COLUMN_VALUE (CR_QUERY, 5, V_COL3, N_COLERR, I_ACTUAL_LEN);
错误为错误(41,5):PLS-00307:与此调用匹配的'COLUMN_VALUE'声明太多

有人能告诉我发生了什么事吗

问题在于:

DBMS_SQL.COLUMN_VALUE (CR_QUERY, 4, T_CREATE_TS, N_COLERR, I_ACTUAL_LEN);

如果将变量T_CREATE_TS定义为日期,它应该可以正常工作,但列\u VALUE没有声明值的类型为TIMESTAMP(至少在10.2中没有),因此它会抛出错误。

T_CREATE_TS
的值高达毫秒秒,声明日期变量并获取其中的值不会丢弃此数据吗?@Em Ae-这是正确的,因此您可能必须在查询中将其转换为使用to_CHAR的字符串,然后在列\u value调用中使用VARCHAR变量。