Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » SQL запрос

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42

Открыть новую тему     Написать ответ в эту тему

uranic2

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
то есть средствами PL\SQL не решается

можно просто средствами SQL
 
and
((Z is nul)  or (t.f3 = Z))

Всего записей: 297 | Зарегистр. 17-08-2004 | Отправлено: 10:36 02-05-2018
NiXXX



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Столкнулся со странным поведением курсора. По номеру клиента есть 10 записей - запрос из курсора возвращает именно это количество. А вот с выполнением курсора какая-то непонятка - он так же возвращает 10 записей, но одна из записей задвоена, в результате чего одна запись в выборку не попадает.
 
P.S. Переделал цикл - вроде все ок. Но окончательной уверенности нет

Всего записей: 365 | Зарегистр. 06-05-2003 | Отправлено: 17:23 03-05-2018 | Исправлено: NiXXX, 18:23 03-05-2018
NiXXX



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Комрады, тут у меня неслабо так пригорело после общения с разработчиками - они ни в какую не хотят ставить внешние ключи в таблицах. Я не пойму - это так невероятно сложно или как-то влияет на производительность системы? WTF?!
Схема сравнительно небольшая - около 100 таблиц. И нет ни одной, с**а, связи!

Всего записей: 365 | Зарегистр. 06-05-2003 | Отправлено: 09:57 10-05-2018 | Исправлено: NiXXX, 10:09 10-05-2018
uranic2

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Комрады, тут у меня неслабо так пригорело после общения с разработчиками - они ни в какую не хотят ставить внешние ключи в таблицах. Я не пойму - это так невероятно сложно или как-то влияет на производительность системы? WTF?!  
Схема сравнительно небольшая - около 100 таблиц. И нет ни одной, с**а, связи!

 
Слабаки!  
 
А если серьезно, то хоть какая СУБД? Например, для postgresql имеет смысл, если нагруженная СУБД, то проще модифицировать структуру БД (с FK будут временные блокировки на все связанные таблицы).  
 
 
 
 
 
 
Добавлено:
На мой взгляд, от FK намного больше пользы, чем вреда

Всего записей: 297 | Зарегистр. 17-08-2004 | Отправлено: 15:47 10-05-2018
NiXXX



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Про FK в postgres и блокировки читал, но в жизни столкнуться не приходилось.
Я на оракле сижу.

Всего записей: 365 | Зарегистр. 06-05-2003 | Отправлено: 17:04 10-05-2018
uranic2

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Про FK в postgres и блокировки читал, но в жизни столкнуться не приходилось.  
Я на оракле сижу

 
Ну на Oracle тоже DDL операции на нагруженных БД даром не даются. Помнится у нас была проблема с перекомпиляцией всех зависимых программных объектов от таблицы (пакеты, процедуры и т.п.), что могло привести к блокировке глобальной. Увы, с оралом уже 5 лет серьезно не работаем, - на postrgres перешли.

Всего записей: 297 | Зарегистр. 17-08-2004 | Отправлено: 07:49 11-05-2018
NiXXX



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
uranic2, если планируется какая-то глобальная операция, то FK можно же дропнуть, а потом вернуть обратно. Правда вероятно придется поискать инвалидные данные, но зато без блокировок.

Всего записей: 365 | Зарегистр. 06-05-2003 | Отправлено: 13:46 11-05-2018
uranic2

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
uranic2, если планируется какая-то глобальная операция, то FK можно же дропнуть, а потом вернуть обратно.

 
Систему не обманешь . Drop FK считается DDL операцией над таблицей. Соответственно будет наклыдывается блокировка ACCESS EXCLUSIVE. Т.е. если  со связанными таблицами работают (например выполняется долгий select), то вы не сможете удалить FK, транзакция будет ждать когда ей дадут доступ.  
 
Имеет смысл отключать, чтобы не было проверки целостности, и как-то ускорить процесс.
И для индексов да, при больших изменениях есть смысл дропнуть индекс, а потом его создать будет быстрее.
 

Всего записей: 297 | Зарегистр. 17-08-2004 | Отправлено: 17:32 11-05-2018
Alexzzy

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
NiXXX

Цитата:
тут у меня неслабо так пригорело после общения с разработчиками - они ни в какую не хотят ставить внешние ключи в таблицах. Я не пойму - это так невероятно сложно или как-то влияет на производительность системы? WTF?!  

Скорее всего всё очень просто - разработчики сидят на каком-то framework-ке... А такой "среднестатистический разработчик" может и не знать SQL (тем более DDL), вообще... Ну и framework может не работать с выставленными вручную FK.

Всего записей: 1474 | Зарегистр. 10-07-2013 | Отправлено: 05:24 16-05-2018 | Исправлено: Alexzzy, 06:42 16-05-2018
NiXXX



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Очередной пятничный затуп.
Есть у меня табличка из двух полей id|значение(секунды, тип number). Надо посчитать сколько в процентах от общего количества записей составляют записи со временем < 5 секунд, < 10 секунд.

Всего записей: 365 | Зарегистр. 06-05-2003 | Отправлено: 18:05 18-05-2018
SergioEmpasaDeParado

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем доброго времени суток. Помогите пожалуйста решить задачу с формированием запроса в phpmyadmin
для выборки записей с 2018-04-09 по 2018-04-11. Обращаюсь на форум так как вопрос важный, а в интернете не могу найти подходящего варианта.
 
 
 
 

Всего записей: 38 | Зарегистр. 13-04-2018 | Отправлено: 22:03 19-05-2018
uranic2

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Очередной пятничный затуп.  
Есть у меня табличка из двух полей id|значение(секунды, тип number). Надо посчитать сколько в процентах от общего количества записей составляют записи со временем < 5 секунд, < 10 секунд.  

 
приблизительно так:
 
select (sum(case when значение <5 then 1 else 0 end ) / count(*) ) * 100 as "процент <5"
from твой_тайбл
 

Всего записей: 297 | Зарегистр. 17-08-2004 | Отправлено: 08:22 21-05-2018
DenSyo

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
NiXXX
если еще актуально)

Код:
SELECT CAST(COUNT(iif([secunda]<5,[secunda],null)) AS NUMERIC(18, 2))/CAST(COUNT([secunda]) AS NUMERIC(18, 2))*100 as prc_5 FROM [heap].[dbo].[secundos]

Всего записей: 218 | Зарегистр. 19-01-2008 | Отправлено: 08:28 21-05-2018 | Исправлено: DenSyo, 02:11 22-05-2018
SergioEmpasaDeParado

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Если понадобиться
 

Код:
 
SELECT *
FROM works
WHERE (data_col BETWEEN CAST( '2018-04-09' AS DATE ) AND CAST( '2018-04-11' AS DATE ))
 

Всего записей: 38 | Зарегистр. 13-04-2018 | Отправлено: 11:25 21-05-2018
uranic2

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
-- ну да можно из через count вместо sum
select (Count(case when значение <5 then 1 else null end ) / count(*) ) * 100 as "процент <5"  
from твой_тайбл

Всего записей: 297 | Зарегистр. 17-08-2004 | Отправлено: 12:01 21-05-2018
NiXXX



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DenSyo,uranic2, благодарю!

Всего записей: 365 | Зарегистр. 06-05-2003 | Отправлено: 17:47 21-05-2018
DenSyo

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
очепятался) умножение на 100 в скобку внес, исправил. ну, думаю это было очевидно)

Всего записей: 218 | Зарегистр. 19-01-2008 | Отправлено: 02:13 22-05-2018 | Исправлено: DenSyo, 02:15 22-05-2018
uranic2

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ну некоторые БД понимают ключевое слово FILTER для агрегатных функций
 
select  count(1) filter (WHERE value <5) from  <твой_тейбл>

Всего записей: 297 | Зарегистр. 17-08-2004 | Отправлено: 15:07 22-05-2018
NiXXX



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В одной табличке у меня есть поле типа clob с таким вот содержимым.
Хочу оттуда выдрать только "ТЕКСТ_ОШИБКИ". Могу конечно через комбинацию instr и substr вырезать, но такое решение не кажется красивым. А вот с regexp'ом разобраться не могу.

Всего записей: 365 | Зарегистр. 06-05-2003 | Отправлено: 15:32 24-05-2018 | Исправлено: NiXXX, 18:22 24-05-2018
perceptron

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
у тебя xml не валидный и затесался не открытый тег </SysId>
 
Добавлено:
как пример можешь попробовать таким макаром (for SQL Server):

Код:
 
DECLARE @xml XML = N'<block><number>0</number><idFrontBRS></idFrontBRS><errorcode>1</errorcode><errortext>AAA</errortext></block><block><number>0</number><idFrontBRS></idFrontBRS><errorcode>1</errorcode><errortext>BBB</errortext></block>'
 
SELECT
  val.query('node()')  
FROM @xml.nodes('/block/errortext') d(val)  
 
--или
 
SELECT
  val.value('(errortext)[1]', 'NVARCHAR(max)')  
FROM @xml.nodes('/block') d(val)  
 
 

Всего записей: 433 | Зарегистр. 23-12-2005 | Отправлено: 16:51 24-05-2018 | Исправлено: perceptron, 17:25 24-05-2018
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » SQL запрос


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru