Есть таблица в которой встречаются записи полностью идентичные, кроме ключевого поля. необходимо удалить дубликаты, оставив только по одной копии, чтобы не было повторений. Таблица такая:
| Код | CREATE TABLE T_MG_CODE ( ID_MG_CODE INTEGER NOT NULL, CODE CHAR(15) NOT NULL, MG_ACTIVE CHAR(1) NOT NULL, PRICE NUMERIC(15,2) NOT NULL, ID_CHANEL CHAR(1), NEW_DISP_ID_CHANEL CHAR(1), PRICE_IN NUMERIC(15,2), COMMENT CHAR(50), ID_DIAL_PLAN INTEGER, DIGITS_TOTAL INTEGER, PRICE_LG NUMERIC(15,2) NOT NULL, PRICE_SLG NUMERIC(15,2) NOT NULL );
ALTER TABLE T_MG_CODE ADD CONSTRAINT PK_T_MG_CODE PRIMARY KEY (ID_MG_CODE);
|
Сделал такую хранимку:
| Код | begin --выбираем записи с одинаковым полем CODE for select count(ID_MG_CODE),min(ID_MG_CODE),CODE from t_mg_code where MG_ACTIVE='1' group by CODE into :var_count,:var_id,:var_code do begin --если записей с таким кодом было несколько, удаляем дубликаты if(var_count>1) then begin --выбираем все поля записи с текущим кодом select PRICE,ID_CHANEL,NEW_DISP_ID_CHANEL,comment, ID_DIAL_PLAN,DIGITS_TOTAL,PRICE_LG,PRICE_SLG from t_mg_code where ID_MG_CODE=:var_id into :var_p1,:var_ch,:var_newd,:var_com,:var_idp, :var_digits,:var_p2,:var_p3; --удаляем записи, где такие же значения полей, но другой первичный ключ delete from t_mg_code where (MG_ACTIVE='1' and ID_MG_CODE<>:var_code and CODE=:var_code and PRICE=:var_p1 and ID_CHANEL=:var_ch and NEW_DISP_ID_CHANEL=:var_newd and comment=:var_com and ID_DIAL_PLAN=:var_idp and DIGITS_TOTAL=:var_digits and PRICE_LG=:var_p2 and PRICE_SLG=:var_p3); end end suspend; end
|
Она компилируется без ошибок. Но прежде, чем её запускать, хотел бы спросить у знатоков, нет ли тут каких-нибудь грубых ошибок. А-то таблица T_MG_CODE большая и если что не так, трудно будет разобраться.
Напрягает ещё то, что IB Expert выделяет жирным поле COMMENT как будто это команда или служебное слово, хотя это имя поля и раньше при работе с ним никаких проблем не возникало. |