У меня есть столбец в таблице, который я хочу использовать для уникального индекса.
Мой скрипт должен сделать данные уникальными, объединив идентификатор записи, если данные текущей записи дублируются.
Я узнал, что мне нужно поместить это в БЛОК ВЫПОЛНЕНИЯ.
EXECUTE BLOCK
AS
DECLARE VARIABLE ID BI;
DECLARE VARIABLE REASON XTXT;
DECLARE VARIABLE LAST_REASON XTXT = '';
BEGIN
FOR SELECT
ID_STATEMENT,
REASON
FROM
STATEMENT
WHERE
ID_STATEMENT > 0
ORDER BY
REASON ASC
INTO:ID,
:REASON
DO BEGIN
IF ( REASON = LAST_REASON ) THEN
UPDATE
STATEMENT
SET
REASON =:REASON || ' X' ||:ID
WHERE
ID_STATEMENT =:ID;
END
LAST_REASON = REASON;
END
Но я получаю сообщение об ошибке:
-104 Dynamic SQL Error Код ошибки SQL = -104 Неизвестный токен - строка 18, столбец 13
В строке 18 начинается внутренняя часть, столбец 13 — это ':' перед:ID,
Я пробую это под PHP, драйвер PDO.
Решение проблемы
Насколько я понимаю, вы хотите сделать поле REASON уникальным. В этом случае все просто:
EXECUTE BLOCK
AS
DECLARE VARIABLE ID BLOB;
DECLARE VARIABLE REASON XTXT;
BEGIN
FOR SELECT
REASON || LIST(ID_STATEMENT, 'X'),
REASON
FROM
STATEMENT
WHERE
ID_STATEMENT > 0
GROUP BY
REASON
HAVING
COUNT(*) > 1
INTO:ID,
:REASON
DO BEGIN
DELETE FROM
STATEMENT
WHERE
REASON =:REASON;
INSERT INTO
STATEMENT
VALUES
(:ID,:REASON);
END
END
После этого в таблице у вас появятся записи с уникальными ПРИЧИНАМИ и конкатенированными идентификаторами.
Комментариев нет:
Отправить комментарий