- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
SELECT *
FROM table1
WHERE
COALESCE(
field1,
field2,
field3,
field4,
field5,
fieldN,
"lol"
)!="lol"
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−117
SELECT *
FROM table1
WHERE
COALESCE(
field1,
field2,
field3,
field4,
field5,
fieldN,
"lol"
)!="lol"
−113
with mycte as
(
select dateadd(dd, 1,@dato1)as Dato
union all
select Dato + 1
from mycte
where Dato + 1 <= @dato2
)
select count(Dato) as antall
from mycte
where Dato <=@dato2
OPTION (MAXRECURSION 0)
Суровые нордические ребята пытаются найти разницу в днях между двумя датами с помощью рекурсии.
И ведь dateadd они знают, а про datediff нет.
Так же веселит OPTION (MAXRECURSION 0), который обычно устанавливают с параметром отличным от 0 в тех случаях, когда рекурсия убегает в бесконечность, чтобы хоть как-то ограничить ее. Видимо, эхо дебаггинга сего замечательного кода.
−129
SELECT COUNT(*) FROM passwords WHERE program=program AND website=website AND login=login AND password=password
Okay :(
−113
select o.*
from (select rownum rw
, o.*
from (select o.* from all_tables o order by table_name) o
where rownum < 20
) o
where o.rw >= 10;
Стандартный аналог "LIMIT 9,10" в Oracle.
http://www.sql.ru/faq/faq_topic.aspx?fid=171
−108
update People
set PeopleIsJunior='N'
where PeopleIsJunior='Y'
and month(BirthDay)=(select month(getdate()))
and year(BirthDay)=(select year(getdate())-18)
and day(BirthDay)=(select day(getdate()))
Еженочно часа 3 делаем людей совершеннолетними. людей много , миллионы, и с табличкой активно работают.
Наличие индекса по BirthDay не играет никакого рояля, т.к. функции.
t-sql если чо.
−103
вайп
−109
end;
create or replace package body "MUT_TABLE" is
type a_table is table of number index by pls_integer;
position a_table;
empty a_table;
procedure SET_INITIAL_STATE
as
begin
position:=empty;
end SET_INITIAL_STATE;
procedure BEF_TR( ID IN NUMBER, A IN NUMBER)
as
begin
position (ID):= A;
end BEF_TR;
procedure AFT_TR
is
v number;
begin
v:=position.FIRST;
while v is not null loop
update A set
A=1,
B='!!!!!!!!!'
where A = 1;
v:= position.next(v);
end loop;
end AFT_TR;
end "MUT_TABLE";
−111
CREATE TABLE "A"
( "ID" NUMBER,
"A" NUMBER,
"B" VARCHAR2(20),
CONSTRAINT "A_PK" PRIMARY KEY ("ID") ENABLE
)
/
CREATE OR REPLACE TRIGGER "A_2"
AFTER
insert or update on "A"
for each row
begin
mut_table.bef_tr(:NEW.ID,:NEW.A);
end;
/
ALTER TRIGGER "A_2" ENABLE
/
CREATE OR REPLACE TRIGGER "A_3"
AFTER
insert on "A"
declare
b number;
begin
mut_table.aft_tr;
end;
/
ALTER TRIGGER "A_3" ENABLE
/
CREATE OR REPLACE TRIGGER "A_AT"
BEFORE
insert or update on "A"
for each row
declare
v number;
PRAGMA AUTONOMOUS_TRANSACTION;
begin
:NEW.A:=:NEW.A+1;
:NEW.B:='!!!!!!!!!!';
commit;
end;
/
ALTER TRIGGER "A_AT" DISABLE
/
CREATE OR REPLACE TRIGGER "A_I_S"
BEFORE
insert or update on "A"
begin
mut_table.set_initial_state;
end;
/
ALTER TRIGGER "A_I_S" ENABLE
/
CREATE OR REPLACE TRIGGER "A_T1"
BEFORE
insert or update on "A"
for each row
begin
update A set
A = :NEW.A+1,
B = 'was incremented'
where A = :NEW.A;
end;
/
ALTER TRIGGER "A_T1" DISABLE
/
CREATE OR REPLACE TRIGGER "BI_A"
before insert on "A"
for each row
begin
if :NEW."ID" is null then
select "A_SEQ".nextval into :NEW."ID" from dual;
end if;
end;
/
ALTER TRIGGER "BI_A" ENABLE
/
create or replace package MUT_TABLE as
procedure set_initial_state;
procedure bef_tr(ID number,A NUMBER);
procedure aft_tr;
−114
-- Я ТУТ ИСПОЛЬЗУЮ 2 КУРСОРА,
-- причем 2рой вызывается изнутри первого,
-- причем этот 2рой курсор ПОЛНОСТЬЮ (в худшем случае)
-- перебирает все свои значения, чтобы подставить одно.
-- ВОПРОС: как сделать так, чтоб работало так же, но чтоб не так яро грузилось???
DECLARE
CURSOR get_col1 IS
SELECT DISTINCT
a.constraint_name,
a.constraint_type,
a.table_name,
a.r_constraint_name,
b.column_name
FROM all_constraints a, all_cons_columns b
WHERE a.table_name = b.table_name
AND a.constraint_type in ('P', 'R')
AND a.constraint_name = b.constraint_name
ORDER by 1;
CURSOR get_col2 IS
SELECT constraint_name, table_name, column_name
FROM all_cons_columns
WHERE constraint_name in
(select r_constraint_name
from all_constraints
where constraint_type = 'R');
BEGIN
dbms_output.ENABLE;
dbms_output.put_line(rpad('Имя ограничения', 30)
||rpad('Тип', 5)
||rpad('Имя столбца', 30)
||rpad('Имя таблицы', 30)
||rpad('Имя таблицы', 30)
||rpad('Имя столбца', 30));
dbms_output.put_line(rpad('-', 155, '-'));
FOR main_col IN get_col1 LOOP
dbms_output.put(rpad(to_char(main_col.constraint_name), 30)
||rpad(to_char(main_col.constraint_type), 5)
||rpad(to_char(main_col.column_name), 30)
||rpad(to_char(main_col.table_name), 30));
IF (main_col.constraint_type = 'R') THEN
FOR sec_col IN get_col2 LOOP
IF (main_col.r_constraint_name = sec_col.constraint_name) THEN
dbms_output.put(rpad(to_char(sec_col.table_name), 30)
||rpad(to_char(sec_col.column_name), 30));
END IF;
END LOOP;
END IF;
dbms_output.new_line();
END LOOP;
END;
/
7. Используя сведения из представлений словаря данных получить
информацию о первичных и внешних ключах схемы: Номер по порядку,
Имя ограничения целостности, Тип, Имя столбца, Имя таблицы.
Кроме того, для внешних ключей указать Имя таблицы и Имя столбца
на которые ссылаются эти ключи.
−120
CASE
WHEN plandata - begindata = 40000.000000 THEN 4
WHEN plandata - begindata = 1090000.000000 THEN 16
WHEN plandata - begindata = 2090000.000000 THEN 24
WHEN plandata - begindata = 90000.000000 THEN 8
WHEN plandata - begindata = 50000.000000 THEN 4
WHEN plandata - begindata = 20000.000000 THEN 2
WHEN plandata - begindata = 1070000.000000 THEN 14
WHEN plandata - begindata = 70000.000000 THEN 6
WHEN plandata - begindata = 3090000.000000 THEN 32
WHEN plandata - begindata = 4090000.000000 THEN 40
WHEN plandata - begindata = 5090000.000000 THEN 48
WHEN plandata - begindata = 6090000.000000 THEN 56
WHEN plandata - begindata = 70000.000000 THEN 6
WHEN plandata - begindata = 10000.000000 THEN 1
WHEN plandata - begindata = 1040000.000000 THEN 12
WHEN plandata - begindata = 2040000.000000 THEN 20
WHEN plandata - begindata = 3040000.000000 THEN 28
WHEN plandata - begindata = 4040000.000000 THEN 36
WHEN plandata - begindata = 7040000.000000 THEN 44
WHEN plandata - begindata = 8040000.000000 THEN 52
WHEN plandata - begindata = 7090000.000000 THEN 48
WHEN plandata - begindata = 970000.000000 THEN 10
WHEN plandata - begindata = 100000.000000 THEN 9
WHEN plandata - begindata = 30000.000000 THEN 3
END AS TIME
Вычисляется плановое время выполнения задачи. begindata и plandata поля DATETIME, время начала и завершения операции