Я получаю сообщение 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);
СПАСИБО! ВЫ - спасатель жизни, я не могу поверить, что пропустил это! – Licentia