2016-01-14 3 views
1

Я получаю сообщение pls-00307 ОШИБКА ГДЕ Он говорит, что «строка» соответствует слишком многим псевдонимам таблицы объектов. Что это значит? Я получаю выделение для раздела 4 DEFINE COLUMN Когда я пытаюсь определить столбец в операторах IF, почему это происходит? Может ли кто-нибудь вести меня через это? Благодаря!Определение столбца с помощью dbms_sql

IF ((pStartDate IS NOT NULL) AND (pEndDate IS NOT NULL) AND 
    (pStartDate < pEndDate)) THEN 


IF ((pIdType IS NOT NULL) AND (pId IS NOT NULL)) THEN 
    loSqLText1 := ' CBP.CBP_ID_TYPE, CBP.CBP_ID AS '; 
    loSqLText2 := ' CBP_ID_TYPE, CBP_ID '; 
    loSqLText3 := ' CBP_ID_TYPE = :pidtype AND CBP_ID = :pid '; 
END IF; 

IF ((pName IS NOT NULL) AND (pSurname IS NOT NULL)) THEN 
    loSqLText1 := ' CBP.CBP_NAME, CBP.Cbp_Surname '; 
    loSqLText2 := ' CBP_NAME , CBP_SURNAME '; 
    loSqLText3 := ' CBP_NAME = :pname AND CBP_SURNAME = :psurname '; 
END IF; 
END IF; 

    --1 Query 

    loQuery := 'SELECT ' || loSqLText1 || 
     ' , IN_OUT_DATES.IN_COUNT, IN_OUT_DATES.OUT_COUNT 
     FROM 
      (SELECT HBP_PERSON , COUNT(HBP_IN_DATE) IN_COUNT , COUNT(HBP_OUT_DATE) OUT_COUNT 
      FROM HIST_BANNED_PERSONS WHERE HBP_IN_DATE BETWEEN 
       to_date('':pstartdate'',''mm/dd/yyyy'') AND to_date('':penddate'' , ''mm/dd/yyyy'') 
       GROUP BY HBP_PERSON) IN_OUT_DATES 
       RIGHT OUTER JOIN 
       (SELECT CBP_ROWID, ' || loSqLText2 || 
     ' FROM CHECK_BANNED_PERSONS WHERE ' || loSqLText3 || 
     ') CBP 
       ON IN_OUT_DATES.HBP_PERSON = CBP.CBP_ROWID '; 
    --2 OPEN CURSOR 



loCursor := dbms_sql.open_cursor(); 

    --3 PARSE 
    dbms_sql.parse(loCursor, loQuery, dbms_sql.native); 

    --4 DEFINE COLUMN 
    IF ((pIdType IS NOT NULL) AND (pId IS NOT NULL)) THEN 
    dbms_sql.define_column(loCursor, 1, loIdType); 
    dbms_sql.define_column(loCursor, 2, loId); 
    END IF; 

    IF ((pName IS NOT NULL) AND (pSurname IS NOT NULL)) THEN 
    dbms_sql.define_column(loCursor, 1, loName); 
    dbms_sql.define_column(loCursor, 2, loSurname); 
    END IF; 

    dbms_sql.define_column(loCursor, 3, loInDate); 
    dbms_sql.define_column(loCursor, 4, loOutDate); 

Сообщение об ошибке я точек следующие строки:

dbms_sql.define_column(loCursor, 1, loIdType); 
dbms_sql.define_column(loCursor, 2, loId); 

dbms_sql.define_column(loCursor, 1, loName); 
dbms_sql.define_column(loCursor, 2, loSurname); 

ответ

1

Как я понимаю, ваши переменные loIdType, loId, loName и loSurname имеют VARCHAR2 тип. В этом случае добавьте параметр для определения переменной длины:

dbms_sql.define_column(loCursor, 1, loIdType, 4000); 
dbms_sql.define_column(loCursor, 2, loId, 4000); 

dbms_sql.define_column(loCursor, 1, loName, 4000); 
dbms_sql.define_column(loCursor, 2, loSurname, 4000); 
+0

СПАСИБО! ВЫ - спасатель жизни, я не могу поверить, что пропустил это! – Licentia

Смежные вопросы