Pull to refresh
3
0

Пользователь

Send message
а есть в api метод который покажет позиции сайта по конкретному региону и по конкретному запросу?
Да там все делалось в авральном режиме, постоянно весело несколько сотен актуальных необработанных обращений от пользователей. Начальник кстати когда понял, что отмахнуться по легкому не получиться сбежал взяв две недели отпуска и потом три больничного, в общем на весь период сдачи отчета. По поводу «если на ключевые точки контроля сбора отчётности в министерствах ставят ответственных ит-специалистов, которые не знают основных возможностей sql-сервера» — да там даже студенты не задерживали, сами посудите на организацию которая занимается аналитикой, статистикой и разработкой ПО всего 5 пишущих программистов и среди этих пяти текучка бешеная.
вопрос то не в том, что оон разрешил или запретил. Была система которая зашла в тупик из за того что она была не правильно спроектирована, связанный сервер это наверное единственное что там могло помочь. Никто не застрахован, что его могут перебросить на какой нибудь проект который писался еще при советской власти не понятно кем и как, в котором придется хоть как то но решать задачу.
да иногда нет возможности выбирать
Статья то как раз про mssql, так как я специально показал неправильно спроектированную систему, которая разрослась и зашла в тупик, и то что в mssql есть инструменты которые помогают выйти даже из такой тупиковой ситуации.
На самом деле это не очень хорошо, объем данных был большой и каждый раз их тащить по сети это не правильно. Кроме того министерство могло попросить сделать какой нибудь отчет срочно, и если какой нибудь сервер был недоступен на момент получения, в нем были бы не верные цифры, да и пользователю ждать получение данных с сотни разных серверов не очень хорошо. В общем это больше от безысходности подход.
да, вы меня поняли, система уже была спроектирована таким образом, что не оставалось ничего кроме того, чтобы подпереть ее еще одним костылем
что именно не понравилось?
Просто в mssql хранимая процедура может вернуть выборку, в oracle такого нет. Статья про то как получить выборку средствами pl/sql кода обратиться к ней как к обычной таблице и не просесть в плане производительности. Как это можно сделать с помощью процедуры?
Пример не некорректный а простой, процедуру в 1000 строк кода я сюда вытащить не могу сами понимаете. Я показал возможность в чистом виде, а как ее использовать решает программист в силу своего опыта. Новички, за которыми не присматривают, все равно будут не оптимально выбирать инструмент. Для этого и существует градация программистов, тим лиды и тому подобное.

По поводу like это первое что в голову пришло, можно как вы написали разбить строку и уже делать join по первичному ключу, так что вопрос решаем.

А дописывать всегда все приходиться, требования растут. У нас была сначала небольшая view, аналитик все дописывал требования, в итоге все это в 1000 строк когда уложилось, когда в функцию перенесли, на view стало дорабатывать ее просто не возможно и огромное кол-во оператора or в запросе делало свое дело в плане торможения.

Предлагаю сойтись на том, что есть view а есть конвейерные функции и их не нужно сравнивать как одно и тоже. В большинстве случаев нужно использовать view, но при очень сложной логике нужно использовать конвейерные функции.
Ну тут уже больше вопрос что отдавать на базу данных. Я сторонник того, что база данных для работы с данными, а не для реализации 85% функциональности приложения включая посылку http запросов и тому подобному. Данный пример был сконцентрирован на случай сложной выборки из базы которую тяжело сделать средствами sql. Если же нужно распарить xml поменять значения для пары полей или провести валидацию, то конечно это нужно делать в языке программирования а не в базе данных
Эта функция рассчитана на получение списка по одному отделу, джонить ее 1000 раз конечно не нужно. Если вам нужно получать информацию по всем отделам, стоит просто доработать функцию, например условиях выборки поменять:
where
      dep.department_id = p_department_id 

на
where
      dep.department_id = p_department_id  or p_department_id   is null

а если нужно получать информацию не по всем отделам а по нескольким, то строку со списком ид отделов через запятую передавать и брать через like:
where
      '%p_str%' like ',' || dep.department_id || ','

Речь про то что все таки бывает невозможным реализовать нужную логику на sql, у нас есть процедура которая до 1000 строк разрослась, писали на sql потом в функцию перенесли, слишком много условий ветвления было. Данный пример именно для таких случаев, а не для повседневных, если есть возможность сделать на sql без потери удобочитаемости когда и прасадки в производительности то однозначно нужно писать на sql.
если в субд не встроен мощный процедурный язык то да, но в oracle pl/sql очень силен и заточен именно под работу с данными, поэтому мне кажется на нем решать такие задачи удобнее, так сказать не отходя от кассы.
Описанный пример да, так как тут отсутствует сложность в логике получения, но я начал с того что иногда просто необходимо задействовать процедурный язык, если запрос очень сложный не всегда все можно получить за счет sql, а если и получиться то запрос будет ужасным и начнет тормозить, именно для этого и нужны такие конструкции как я описал. Там где запрос не очень сложный конечно нужно использовать sql без использования pl/sql кода

Посчитать среднюю зп пожалуйста я не написал вызов этой функции
select * from table (hr.test.get_employees_dep(v_department_id)) emps
основной смысл в том что к результату можно обратиться как к реляционной таблице, табличные функции для этого и созданы.
У нас один модуль на работе был, который возвращал выборку для документа, логика в нем была сложная и требования к нему постоянно нарастали как снежный ком. Его сколько могли тянули на sql, в итоге во первых запрос стал очень тяжелый для доработки, во вторых из за того что в нем было миллион конструкций or он начал просто висеть на большом объеме данных. В данном случае его было просто необходимо перенести в функцию, в которой описать именно очень сложную логику процедурным языком было в сто раз проще и скорость работы стала нормальной.
with это все равно sql запрос, я когда что то делаю стараюсь сначала на sql многое отдать, но бывают случаи когда логика очень сложная и ее проще реализовать за счет процедурного языка, который в oracle очень силен. Некоторые процедуры получаются очень большими, если их отдать на откуп в sql во первых запрос станет очень громоздким и его станет тяжело дописывать во вторых в таких запросах будет много конструкций or из за чего сам запрос начнет тормозить.
with это все равно sql запрос, я когда что то делаю стараюсь сначала на sql многое отдать, но бывают случаи когда логика очень сложная и ее проще реализовать за счет процедурного языка, который в oracle очень силен. Некоторые процедуры получаются очень большими, если их отдать на откуп в sql во первых запрос станет очень громоздким и его станет тяжело дописывать во вторых в таких запросах будет много конструкций or из за чего сам запрос начнет тормозить.
вы с mssql работаете?
вы с mssql работаете?

Information

Rating
Does not participate
Registered
Activity