Ошибка значения DBMS_SQL.column .. динамические курсоры - PullRequest
3 голосов
/ 01 февраля 2012

У меня возникла тревожная ошибка в следующем коде

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' соответствуют этому вызову .

может кто-нибудь подсказать, что происходит?

1 Ответ

3 голосов
/ 02 февраля 2012

Проблема связана с:

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

Если вы определили переменную T_CREATE_TS как DATE, она должна работать нормально, но COLUMN_VALUE не имеет объявления, где VALUE имеет тип TIMESTAMP (по крайней мере, не в10.2), поэтому выдает ошибку.

...