GOOGLE ADS

понедельник, 9 мая 2022 г.

запустите запрос, используя EXECUTE BLOCK, чтобы подготовить столбец для уникального индекса

У меня есть столбец в таблице, который я хочу использовать для уникального индекса.

Мой скрипт должен сделать данные уникальными, объединив идентификатор записи, если данные текущей записи дублируются.

Я узнал, что мне нужно поместить это в БЛОК ВЫПОЛНЕНИЯ.

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

После этого в таблице у вас появятся записи с уникальными ПРИЧИНАМИ и конкатенированными идентификаторами.

Комментариев нет:

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...