- 1
SELECT `1`,`4` FROM `kada-region` WHERE `2` = "SAV" ORDER BY `7`
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−115
SELECT `1`,`4` FROM `kada-region` WHERE `2` = "SAV" ORDER BY `7`
Комментариев нет. Кроме нескольких, типы столбцов int. Догадайся что есть что.
−122
select CMPNPFCOD into c_CMPCOD from SPECPART.CHSCMPALL where INSNMB = l_INSNMB fetch first 1 rows only;
select CMPPRFCOD into c_CMPPRF from SPECPART.CHSCMPALL where INSNMB = l_INSNMB fetch first 1 rows only;
select CMPDCL_YER into c_CMPDCL_YER from SPECPART.CHSCMPALL where INSNMB = l_INSNMB fetch first 1 rows only;
select DPTCOD into c_DPTCOD_CHS from SPECPART.CHSCMPALL where INSNMB = l_INSNMB fetch first 1 rows only;
select DCINMB into c_DCINMB_CHS from SPECPART.CHSCMPALL where INSNMB = l_INSNMB fetch first 1 rows only;
select DCIDCK into c_DCIDCK_CHS from SPECPART.CHSCMPALL where INSNMB = l_INSNMB fetch first 1 rows only;
select DCICPY into c_DCICPY_CHS from SPECPART.CHSCMPALL where INSNMB = l_INSNMB fetch first 1 rows only;
select DPTCOD into c_DPTCOD_AGR from SPECPART.AGRNPFALL where INSNMB = l_INSNMB fetch first 1 rows only;
select DCINMB into c_DCINMB_AGR from SPECPART.AGRNPFALL where INSNMB = l_INSNMB fetch first 1 rows only;
select DCIDCK into c_DCIDCK_AGR from SPECPART.AGRNPFALL where INSNMB = l_INSNMB fetch first 1 rows only;
select DCICPY into c_DCICPY_AGR from SPECPART.AGRNPFALL where INSNMB = l_INSNMB fetch first 1 rows only;
select PROCDATE into c_PROCDATE from SPECPART.CHSCMPALL where INSNMB = l_INSNMB fetch first 1 rows only;
Глумление над DB2
−163
CREATE PROCEDURE DEPTORS_EURO AS -- Но сначала отключу ТРИГГЕРА
ALTER TABLE DEPTORS_REFERENCE DISABLE TRIGGER Tr_for_DEPTORS_REFERENCE
ALTER TABLE DEPTORS_DOC_EURO DISABLE TRIGGER Tr_for_DEPTORS_DOC_EURO
ALTER TABLE DEPTORS_Remander DISABLE TRIGGER Tr_for_DEPTORS_REMANDER
ALTER TABLE DEPTORS_Payment DISABLE TRIGGER Tr_for_DEPTORS_Payment -- Создаю документ DEPTORS_DOC_EURO_old
Она будет нужна для поиска оплативших долги АК и появившихся новых */
IF EXISTS(SELECT name -- Удаляю, если существует в БД
FROM sysobjects WHERE name = N'DEPTORS_DOC_EURO_old' AND type = 'U') DROP TABLE DEPTORS_DOC_EURO_old
SELECT * INTO DEPTORS_DOC_EURO_old -- Это DEPTORS за предыдущий месяц
FROM DEPTORS_DOC_EURO -- После копирования данных - уничтожим DEPTORS_DOC_EURO
DELETE DEPTORS_DOC_EURO -- Т.О. по FK-PK обнуляютя таблицы
DELETE FROM STATEMENT_UKRSTA WHERE mvt_date =
(SELECT DISTINCT LATEST__DATE -- выбираю дату
FROM STATEMENT_UKRSTA , CALENDAR_BILL_DATE WHERE
DATEPART(mm,FLIGHT_PERIOD) = DATEPART(mm, (SELECT DATEADD(mm,-1, MAX(stac_date)) FROM STATEMENT_UKRSTA WHERE type = 'FB')) and
DATEPART(yy,FLIGHT_PERIOD) = DATEPART(yy, (SELECT DATEADD(mm,-1, MAX(stac_date)) FROM STATEMENT_UKRSTA WHERE type = 'FB')) and
type = 'FB') -- Удаляю из таблицы STATEMENT_UKRSTA все АК, которые не имеют долгов
DELETE FROM STATEMENT_UKRSTA WHERE corr IN (SELECT corr FROM STATEMENT_UKRSTA a GROUP BY a.corr HAVING Sum(a.saldo) <= 0 )
-- Создаю псевдовременную таблицу по выборке DEPTORS_REFERENCE_Vrem
IF EXISTS(SELECT name -- Удаляю, если существует в БД
FROM sysobjects WHERE name = N'DEPTORS_REFERENCE_Vrem' AND type = 'U') DROP TABLE DEPTORS_REFERENCE_Vrem
SELECT corr, type, SUBSTRING(reference,1,6) AS Account, Sum(saldo) AS Saldo INTO DEPTORS_REFERENCE_Vrem FROM STATEMENT_UKRSTA GROUP BY corr, type, reference HAVING SUM(saldo) > 0
-- Т.К. FK-PK то сначала внесем User_Ref всех должников в DEPTORS_DOC_EURO
IF EXISTS(SELECT name -- Удаляю, если существует в БД
FROM sysobjects WHERE name = N'USER_REF' AND type = 'U')
DROP TABLE USER_REF
SELECT DISTINCT corr INTO USER_REF FROM DEPTORS_REFERENCE_Vrem
INSERT INTO DEPTORS_DOC_EURO SELECT User_Ref=a.corr,DEBT_AMOUNT=Null,Name= Null,Country=Null,Code_ICAO=Null,Final_Date=Null,Period_of_Dept=Null,Saldo_D_Facte=0,Saldo_D_Ure=0 FROM USER_REF a
DROP TABLE USER_REF -- Заполняю таблицу DEPTORS_REFERENCE (User_Ref уже есть - поэтому позволит внести)
INSERT INTO DEPTORS_REFERENCE SELECT User_Ref=a.corr,reference=a.Account,type=a.type,Old_Saldo=a.Saldo,Saldo_D_Facte =0,Saldo_D_Ure=0 -- первично
FROM DEPTORS_REFERENCE_Vrem a -- Удалим псевдовременную таблицу DEPTORS_REFERENCE_Vrem
DROP TABLE DEPTORS_REFERENCE_Vrem -- Корректирую счета (Выставлено - Оплачено)
IF EXISTS(SELECT name -- Удаляю, если существует в БД
FROM sysobjects WHERE name = N'Vrem_Stat_Negativ_Saldo' AND type = 'U') DROP TABLE Vrem_Stat_Negativ_Saldo
SELECT corr, type, SUBSTRING(reference,1,6) AS Account, Sum(saldo) AS Saldo INTO Vrem_Stat_Negativ_Saldo FROM STATEMENT_UKRSTA GROUP BY corr, type, reference HAVING SUM(saldo) < 0 -- Сравниваю две таблицы (DEPTORS_REFERENCE и Vrem_Stat_Negativ_Saldo)
UPDATE a SET Old_Saldo = a.Old_Saldo + b.Saldo FROM DEPTORS_REFERENCE a INNER JOIN Vrem_Stat_Negativ_Saldo b ON a.User_Ref = b.corr and a.reference = b.Account
DROP TABLE Vrem_Stat_Negativ_Saldo -- Создаю новый документ DEPTORS_DOC_EURO
IF EXISTS(SELECT name -- Удаляю, если существует в БД
FROM sysobjects WHERE name = N'Vrem_DEPTORS_DOC_EURO' AND type = 'U') DROP TABLE Vrem_DEPTORS_DOC_EURO
SELECT User_Ref, SUM(Old_Saldo) AS Old_Saldo,SUM(Saldo_D_Facte) AS Saldo_D_Facte,SUM(Saldo_D_Ure) AS Saldo_D_Ure
INTO Vrem_DEPTORS_DOC_EURO FROM DEPTORS_REFERENCE GROUP BY User_Ref
UPDATE b
SET
DEBT_AMOUNT = a.Old_Saldo, Saldo_D_Facte = a.Old_Saldo, Saldo_D_Ure = a.Old_Saldo FROM Vrem_DEPTORS_DOC_EURO a INNER JOIN DEPTORS_DOC_EURO b ON a.User_Ref = b.User_Ref
DROP TABLE Vrem_DEPTORS_DOC_EURO
UPDATE a SET Name= b.corr_name FROM DEPTORS_DOC_EURO a INNER JOIN STATEMENT_UKRSTA b
ON a.User_Ref = b.corr
UPDATE a SET Code_ICAO = ICAO_CODE FROM DEPTORS_DOC_EURO a INNER JOIN AIRCOMPANYS b
ON (a.User_Ref = b.CRCO_NUMBER) OR (a.User_Ref = b.CRCO3)
UPDATE a SET Country = c.FULL_NAME FROM DEPTORS_DOC_EURO a INNER JOIN AIRCOMPANYS b
ON (a.User_Ref = b.CRCO_NUMBER) OR (a.User_Ref = b.CRCO3)
INNER JOIN COUNTRYS c ON b.COUNTRY_ID = c.ID
IF EXISTS(SELECT name -- Удаляю, если существует в БД
FROM sysobjects WHERE name = N'DEPTORS_DOC_EURO_NewDolg' AND type = 'U')
DROP TABLE DEPTORS_DOC_EURO_NewDolg
SELECT * -- Делаю выборку в таблицу
INTO DEPTORS_DOC_EURO_NewDolg FROM DEPTORS_DOC_EURO
WHERE User_Ref Not IN (SELECT User_Ref FROM DEPTORS_DOC_EURO_old)
IF EXISTS(SELECT name -- Удаляю, если существует в БД
FROM sysobjects WHERE name = N'DEPTORS_DOC_EURO_OplatDolg' AND type = 'U')
DROP TABLE DEPTORS_DOC_EURO_OplatDolg
SELECT * -- Делаю выборку в таблицу
INTO DEPTORS_DOC_EURO_OplatDolg FROM DEPTORS_DOC_EURO_old
WHERE User_Ref Not IN (SELECT User_Ref FROM DEPTORS_DOC_EURO)
ALTER TABLE DEPTORS_REFERENCE ENABLE TRIGGER Tr_for_DEPTORS_REFERENCE
ALTER TABLE DEPTORS_DOC_EURO ENABLE TRIGGER Tr_for_DEPTORS_DOC_EURO
ALTER TABLE DEPTORS_Remander ENABLE TRIGGER Tr_for_DEPTORS_REMANDER
ALTER TABLE DEPTORS_Payment ENABLE TRIGGER Tr_for_DEPTORS_Payment
курсор головного мозга 2.2
−168
-- Процедура формирования таблицы анализа по FIR
CREATE PROCEDURE KojevnikovFir
@DateFo varchar(10),
@DateTo varchar(10)
AS DECLARE @Polet int, @ProcPolet numeric(4,2)
-- определяю кол-во выполненных рейсов в диапазоне дат----
SET @Polet = (SELECT DISTINCT Count(ID) FROM PPLS WHERE
( ( FLI_ENTRY=1 or FLI_EXIT=1 ) or (DEP=1 and DEP_AERODROME like'UK%' ) or
(ARR=1 and DEST_AERODROME Like'UK%') ) and (ENTRY_TIME >=@DateFo and ENTRY_TIME <=@DateTo))
----------- Начало формирования таблицы FIR-------------------
-- Создаем SCROLL курсор 1 для чтения
DECLARE Cursor_All_Pol CURSOR SCROLL KEYSET TYPE_WARNING FOR SELECT Marsrut,All_Polet
FROM Marsr_All_Pol FOR READ ONLY
-- Открытие курсора 1 и наполнение его данными
OPEN Cursor_All_Pol DECLARE @Marsrut char(11), @All_Polet int,@Count1 int,@Count1_end int
SET @Count1=1 SET @Count1_end = @@CURSOR_ROWS
-- ===========обьявляю и заполняю курсор по 2 таблице==============
DECLARE Cursor_Air CURSOR SCROLL KEYSET TYPE_WARNING
FOR SELECT Marsrut,TYPE_AIRCRAFT,kol_TypeAir FROM Marsr_kol_Air FOR READ ONLY
-- Открытие курсора 2 и наполнение его данными
OPEN Cursor_Air
DECLARE @MarsrutAir char(11),@Type nvarchar(4), @Air_Polet int,@Count2 int,@Count2_end int
SET @Count2 = 0 SET @Count2_end = @@CURSOR_ROWS
-- ===========обьявляю и заполняю курсор по 3 таблице==============
DECLARE Cursor_AK CURSOR SCROLL KEYSET TYPE_WARNING
FOR SELECT Marsrut,ICAO,AK,kol_AK FROM dbo.Marsr_kol_AK FOR READ ONLY
-- Открытие курсора 2 и наполнение его данными
OPEN Cursor_AK
DECLARE @MarsrutAK char(11),@ICAO char(3),@AK varchar(60),@kol_AK int,@Count3 int,@Count3_end int
SET @Count3 = 0 SET @Count3_end = @@CURSOR_ROWS
-- цикл по первому курсору
WHILE @Count1 < @Count1_end BEGIN
-- на 1 запись курсора 1
FETCH NEXT FROM Cursor_All_Pol INTO @Marsrut, @All_Polet
-- вставляю строку маршрута и кол-ва полетов в таблицу
SET @ProcPolet = ((@All_Polet * 100)/@Polet)
INSERT KojevnikovAnalizFIR (Marsrut,All_Polet,PrcAll,TYPE_AIRCRAFT,kol_TypeAir,ICAO,AK,kol_AK)
VALUES (@Marsrut,@All_Polet,@ProcPolet,null,null,null,null,null)
SET @Count1 = @Count1 + 1
-- цикл по второму курсору
FETCH FIRST FROM Cursor_Air INTO @MarsrutAir,@Type,@Air_Polet
SET @Count2 = 1
-- Формирую 1 строку маршрут + ВС
IF @Marsrut = @MarsrutAir BEGIN
INSERT KojevnikovAnalizFIR (Marsrut,All_Polet,PrcAll,TYPE_AIRCRAFT,kol_TypeAir,ICAO,AK,kol_AK)
VALUES (null,null,null,@Type,@Air_Polet,null,null,null)
END --IF
WHILE @Count2 < @Count2_end BEGIN
-- увеличиваю счетчик курсора 2
FETCH NEXT FROM Cursor_Air INTO @MarsrutAir,@Type,@Air_Polet
-- Формирую строку маршрут + ВС
IF @Marsrut = @MarsrutAir BEGIN
INSERT KojevnikovAnalizFIR (Marsrut,All_Polet,PrcAll,TYPE_AIRCRAFT,kol_TypeAir,ICAO,AK,kol_AK)
VALUES (null,null,null,@Type,@Air_Polet,null,null,null)
END --IF
-- закрываю цикл WHILE 2 (второй курсор)
SET @Count2 = @Count2 + 1
END
-- цикл по третьему курсору
FETCH FIRST FROM Cursor_AK INTO @MarsrutAK,@ICAO,@AK,@kol_AK
SET @Count3 = 1
-- Формирую 1 строку маршрут + АК
IF @Marsrut = @MarsrutAK BEGIN
INSERT KojevnikovAnalizFIR (Marsrut,All_Polet,PrcAll,TYPE_AIRCRAFT,kol_TypeAir,ICAO,AK,kol_AK)
VALUES (null,null,null,null,null,@ICAO,@AK,@kol_AK)
END --IF
WHILE @Count3 < @Count3_end BEGIN
-- увеличиваю счетчик курсора 3
FETCH NEXT FROM Cursor_AK INTO @MarsrutAK,@ICAO,@AK,@kol_AK
-- Формирую строку маршрут + ВС
IF @Marsrut = @MarsrutAK BEGIN
INSERT KojevnikovAnalizFIR (Marsrut,All_Polet,PrcAll,TYPE_AIRCRAFT,kol_TypeAir,ICAO,AK,kol_AK)
VALUES (null,null,null,null,null,@ICAO,@AK,@kol_AK)
END --IF
-- закрываю цикл WHILE 2 (второй курсор)
SET @Count3 = @Count3 + 1
END
-- закрываю цикл WHILE 1 (первый курсор)
END
-- Закрываю курсор 2
CLOSE Cursor_Air
-- Удаляю курсор 1 как обьект
DEALLOCATE Cursor_Air
-- Закрываю курсор 3
CLOSE Cursor_AK
-- Удаляю курсор 1 как обьект
DEALLOCATE Cursor_AK
-- Закрываю курсор
CLOSE Cursor_All_Pol
-- Удаляю курсор 1 как обьект
DEALLOCATE Cursor_All_Pol
------------Конец--------------------
GO
select * from KojevnikovAnalizFIR
truncate table dbo.KojevnikovAnalizFIR
DELETE from KojevnikovAnalizFIR
exec dbo.KojevnikovFir '2004-01-01','2004-01-05'
курсор головного мозга 2.1
−157
SELECT ...
FROM ...
WHERE (CASE WHEN big_part = 1 AND blk_flag = 2 THEN -1 ELSE 0 END) <> -1
;
−167
PROCEDURE login_attr(a_id IN CHAR, a_pw IN VARCHAR2, v_ret IN OUT VARCHAR2)
IS
v_count INTEGER;
BEGIN
v_count := 0;
SELECT NVL (COUNT (attrib_desc), 0)
INTO v_count
FROM tab_attr a,
tab_users b
WHERE a.msc_cd = b.user_dept
AND a.attr_cd = 'CD'
AND lattr_cd = 'ABCD'
AND UPPER (user_no) = UPPER (a_id)
AND UPPER (user_pw) = UPPER (a_pw);
IF v_count > 0 THEN
SELECT attrib_desc || '@' || user_lang || '@' || user_autoimg ||
'@' || user_imgtime || '@' || user_loc || '@' ||
user_dept
INTO v_ret
FROM tab_attr a,
tab_users b
WHERE a.msc_cd = b.user_dept
AND a.attr_cd = 'CD'
AND lattr_cd = 'ABCD'
AND UPPER (user_no) = UPPER (a_id)
AND UPPER (user_pw) = UPPER (a_pw);
ELSE
v_ret := ' ';
END IF;
END;
Нам нужно больше селектов.
P.S. почему в предпросмотре язык Java, хотя выбран SQL?
−166
SELECT ...
FROM users_account
....
WHERE
(T.userid=@userid or (@userid=null and @account!=null))
and (T.account=@account or (@userid!=null and @account=null))
Есть табличка с юзерами и счетами на которых у юзеров есть игровая валюта.
Есть индекс по обоим этим полям (userid, account).
Каждый такой запрос сканирует весь индекс,а не делает по ней поиск, чем и грузит субд.
Но попытки оптимизировать запрос не увечались успехом,
т.к. я так и не понял что хотел сказать автор в своём условии where.
−138
ALTER TABLE `test` ENGINE MyISAM;
SELECT COUNT(*) FROM `test`;
ALTER IGNORE TABLE `test` ADD UNIQUE INDEX `dupidx` (`col1`, `col2`, ...);
SELECT COUNT(*) FROM `test`;
ALTER TABLE `test` DROP INDEX `dupidx`;
ALTER TABLE `test` ENGINE InnoDB;
На Говнокод не тянет. Но идея мне кажется говнистой. Задача удалить все записи с дубликатами значений в полях.
−167
-- =============================================
-- Create procedure basic template
-- Предназначена - проставить номер идентичного счета по данной АК
-- =============================================
CREATE PROCEDURE Num_List_of_Flights
AS
-- Результаты группировки - Временная таблица
SELECT DISTINCT List_of_Flights, Count(List_of_Flights) AS Kol_fo_Flights
INTO Vrem_Table_Flights
FROM PPLS2BILLS_OBUF a
WHERE Flag_Bill=0 and List_of_Flights Is not Null
GROUP BY List_of_Flights
-- Копирую перечень сфомированных счетов в Steck_Table_Flights
INSERT INTO Steck_Table_Flights
SELECT
List_of_Flights = S.List_of_Flights,
Kol_fo_Flights = S.Kol_fo_Flights
FROM dbo.Vrem_Table_Flights AS S
-- Удаляю временную таблицу
DROP TABLE Vrem_Table_Flights
-- Создаю временную таблицу группировки по счетам (сколько одинаковых счетов )
SELECT DISTINCT List_of_Flights, Count(List_of_Flights) AS Kol_Flights
INTO Vrem_Steck_Table_Flights
FROM Steck_Table_Flights
GROUP BY List_of_Flights
-- Корректирую номера Flights и Сбрасываю флаг Flag_Bill в 1 (как обработано)
UPDATE a
SET Num_Flights = b.Kol_Flights,
Flag_Bill = 1
FROM PPLS2BILLS_OBUF a INNER JOIN Vrem_Steck_Table_Flights b
ON a.List_of_Flights = b.List_of_Flights
WHERE Flag_Bill = 0
-- Удаляю временную таблицу Vrem_Steck_Table_Flights
DROP TABLE Vrem_Steck_Table_Flights
GO
-- EXEC Num_List_of_Flights
никому нельзя верить, а особенно собственным группировкам
−163
CREATE TABLE [dbo].[PPLS2BILLS_SRCO_MESAGE] (
[DOCUMENT] [char] (8) COLLATE Ukrainian_CI_AI_KS_WS NULL ,
[Nom_Document] [int] NULL ,
[Kol_Reis_In_Docum] [int] NULL ,
[Cancel_Kol_Reis_Doc] [int] NULL ,
[Greate_Date_Docum] [datetime] NULL ,
[Flag_Out_EC] [bit] NULL
) ON [PRIMARY]
именуй, не именуй ...