Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Эффективность, читабельность, сопровождаемость SQL кода / 25 сообщений из 29, страница 1 из 2
11.09.2020, 17:30
    #39997727
НеофитSQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эффективность, читабельность, сопровождаемость SQL кода
Тема для многих личная, заведомо субъективная, поэтому давайте больше примеров хорошего кода, не более 20 строк.
Если очень хочется покритиковать код опубликованный другими участниками, то критикуйте конструктивно - указав недостатки и переделав код так, как считаете правильно.

Если пост бесполезный для других с точки зрения образования, то сюда его не надо. Есть много других тем для желчи.

Я начну с кусочка кода, который написал вчера для иллюстрации моего метода проверки параметров запроса:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
-- опубликовано на правах GPL v3 / published under GPL v3
-- Автор/Author: НеофитSQL
--
-- инлайн квери precheck перечисляет через "или" все условия, при которых исполнение
-- квери следует прекратить и выдать сообщение об ошибке
-- глобальная функция fAbortQuery оборачивает процедуру Raise_Application_Error,
-- т.к. вызов процедур не разрешен из SQL select
with precheck as (select besapi.fAbortQuery('precheck failed in test.sql') from dual
                   where sysdate < to_date('2020','yyyy') or
                         sysdate > to_date('2037','yyyy'))

-- первая строчка задает имена и типы колонок, но не входит в рекордсет
-- если precheck условия выполнились. Если prechek выстрелил, квери вылетит с ошибкой
          select '?' as Question,      0 as Answer from dual where (select * from precheck)='as'
union all select '2x2=?',              4           from dual
union all select 'Сломаных индексов:', count(*)    from USER_INDEXES where upper(status) != 'VALID'
union all select 'Всего таблиц:',      count(*)    from ALL_OBJECTS where upper(object_type) = 'TABLE'



Кто-то прокомментировал, что не хотели бы сопровождать такой код. Как его сделать лучше?
Запрос достаточно простой - он выдает таблицу из двух колонок (текст, число) разных полезных значений,
предварительно проверив входные параметры, чтоб не генерить белиберду или пустую таблицу при плохих исходных.

Я знаю об одном недостатке этого кода - порядок строчек оставлен на произвол БД, удобного ключа сортировки нет.
...
Рейтинг: 0 / 0
11.09.2020, 18:22
    #39997757
booby
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эффективность, читабельность, сопровождаемость SQL кода
НеофитSQL,

SQL и "не более 20 строк" - это оксюморон.

Кроме того, слепящие глаз "вершины SQL" хорошо бы показывать в привязке к возможностям версии конкретной версии системы.
Современные версии позволяют не выполнять клиентский запрос и другими способами, и без выброса сообщений об ошибках,
а "универсальный" SQL существует только в книжках сомнительной полезности.

Цель какая у сообщения об ошибке - это доброжелательная помощь взломщику вашего кода,
вы хотите пользователя чему-то "обучить", или какая-то иная?

Может быть, это сообщение для себя самого, такого сорта:
"Если вы видите этот текст, значит программист ошибся. Сообщите в службу поддержки."
?

Вот вам восторг без желчи - зашибись.
Вот вам конструктивная критика:
Надо всегда оставлять существо дело - когда код пишется, чтобы его комментировать столь общирно,
разумно выбросить сам код и оставить главное - комментарий, расширив его, при необходимости, до 20 строк.
...
Рейтинг: 0 / 0
11.09.2020, 19:19
    #39997775
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эффективность, читабельность, сопровождаемость SQL кода
НеофитSQL
Есть много других тем для желчи.
Никакой жидкости. Просто сферический говнокод останется говнокодом как его не "вылизывай".
Решать нужно бизнес задачи и в комплексе, а не высосанные из пальца "я защищаюсь от "плохих" параметров".
Если результатом твоей работы является запросишко, то ты просто мелкий sql-раб, мнящий о себе невесть что.
...
Рейтинг: 0 / 0
11.09.2020, 19:29
    #39997780
НеофитSQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эффективность, читабельность, сопровождаемость SQL кода
booby
НеофитSQL,
Может быть, это сообщение для себя самого, такого сорта:
"Если вы видите этот текст, значит программист ошибся. Сообщите в службу поддержки."
?


Да, именно так.
На ситуации, где правильность и целостность системы под вопросом, желательно реагировать немедленно.

В мой запрос не должны попадать некорректные параметры, и сегодня не попадают. Я знаю, потому что проверяю.

Это может измениться когда код над моим запросом изменится, мой код запроса целиком скопипастят в другую часть системы, или превратят в подчиненный запрос другого запроса, который шлет мусор.

В моем случае, сообщение "звоните поддержке" скорее всего увидит программист который дал моему запросу плохой параметр, даже при самом примитивном тестировании. Это отличается от случая когда он запустил мой запрос, увидел что-то на экране, и решил что все в порядке.

Проверка параметров, это выбор каждого. Мои функции в сях проверяют указатели на читаемость/писаемость памяти, как это делают все системные функции Windows начиная с 2003. Это правильный уровень защиты для опубликованного API, но может казаться "слишком" для внутреннего использования. Зато если процесс крэшнулся, это никогда не в моей DLL.
...
Рейтинг: 0 / 0
11.09.2020, 20:07
    #39997786
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эффективность, читабельность, сопровождаемость SQL кода
НеофитSQLВ моем случае, сообщение "звоните поддержке" скорее всего увидит программист который дал
моему запросу плохой параметр, даже при самом примитивном тестировании. Это отличается от
случая когда он запустил мой запрос, увидел что-то на экране, и решил что все в порядке.

А как это может случиться если у тебя весь код обвешан юнит-тестами и данные, возвращаемые
запросом проверяются на соответствие заданным автоматически, без "увидел что-то на экране"?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
11.09.2020, 20:36
    #39997796
НеофитSQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эффективность, читабельность, сопровождаемость SQL кода
Dimitry Sibiryakov

НеофитSQLВ моем случае, сообщение "звоните поддержке" скорее всего увидит программист который дал
моему запросу плохой параметр, даже при самом примитивном тестировании. Это отличается от
случая когда он запустил мой запрос, увидел что-то на экране, и решил что все в порядке.

А как это может случиться если у тебя весь код обвешан юнит-тестами и данные, возвращаемые
запросом проверяются на соответствие заданным автоматически, без "увидел что-то на экране"?


Очень просто, подумай: Мои юнит тесты проверяют мой код, и находят ошибки в моем коде.

Мусорные параметеры приходят от других, которых мои юнит тесты не проверяют.

Ты же знаешь, что такое юнит тест, или просто поторопился сделать комментарий?
...
Рейтинг: 0 / 0
11.09.2020, 21:11
    #39997804
booby
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эффективность, читабельность, сопровождаемость SQL кода
НеофитSQL
...
В моем случае, сообщение "звоните поддержке" скорее всего увидит программист который дал моему запросу плохой параметр, даже при самом примитивном тестировании. Это отличается от случая когда он запустил мой запрос, увидел что-то на экране, и решил что все в порядке.
....


О, да ты великолепен!
То есть ты не свои ошибки таким образом проявлять собрался, а обучать других программистов,
как пользоваться твоими запросами, собираешься...
Это пять баллов.

Но попробуй принять в расчёт, что дела с тобой иметь никто не будет .

И это, курьеров-то у тебя, распространяющих твои запросы среди жаждущих их использования программистов
уже сейчас сколько, тысяч сто наберется?

При таких задатках тебе бы не стоило заниматься такой фигнёй, как написание sql-запросов.
Садись сразу пиши корпоративные правила оформления кода и протоколы взаимодействия программистов.
Жалко такой талант на ерунду разменивать.
...
Рейтинг: 0 / 0
12.09.2020, 00:23
    #39997864
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эффективность, читабельность, сопровождаемость SQL кода
Понижайте градус агрессии, пока совсем в оскорбления не свалились...
...
Рейтинг: 0 / 0
12.09.2020, 03:19
    #39997877
ma1tus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эффективность, читабельность, сопровождаемость SQL кода
НеофитSQL,

Проверку параметров оставь прикладному уровню; запанибратством с терминологией можешь блеснуть в прямом общении с коллегами, но документируя код, делай это не на смеси английского с придурковатым.
...
Рейтинг: 0 / 0
12.09.2020, 07:01
    #39997881
НеофитSQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эффективность, читабельность, сопровождаемость SQL кода
booby

То есть ты не свои ошибки таким образом проявлять собрался, а обучать других программистов,
как пользоваться твоими запросами, собираешься...


Конечно, для этого и пишется техническая документация, чтоб обучать других программистов.
Так учили меня, и так я учил других, когда это было моей работой.

booby

При таких задатках тебе бы не стоило заниматься такой фигнёй, как написание sql-запросов.
Садись сразу пиши корпоративные правила оформления кода и протоколы взаимодействия программистов.
Жалко такой талант на ерунду разменивать.


Это было в прошлых работах. Сейчас я приношу некоторую пользу написанием SQL запросов, и изучением/применением новых для меня языков программирования, и технологий, до которых раньше не доходили руки и не было времени. SQL один из них, и мой хороший коллега посоветовал этот форум, где много знающих людей бывает. Я уже нескольких встретил.

Тема про образование других программистов поднята хорошая, даже если тон выбран неудачно.
...
Рейтинг: 0 / 0
12.09.2020, 08:35
    #39997886
Synoptic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эффективность, читабельность, сопровождаемость SQL кода
НеофитSQL,

опубликовано на правах GPL v3 / published under GPL v3
Инлайн, квери....

Тьфу, кровь из глаз.
Правильный код комментирует себя сам.
...
Рейтинг: 0 / 0
12.09.2020, 08:39
    #39997887
Synoptic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эффективность, читабельность, сопровождаемость SQL кода
НеофитSQL
Сейчас я приношу некоторую пользу написанием SQL запросов
Какая может быть польза от тебя в SQL, если в банальный to_number ты передаёшь нецифровые символы и лезешь на форум за решением этой мега-проблемы??
...
Рейтинг: 0 / 0
12.09.2020, 10:39
    #39997897
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эффективность, читабельность, сопровождаемость SQL кода
SQL-код с удобными включателями/выключателями/переключателями (которые управляются комментариями или параметрами) нужен только в сугубо утилитарных скриптах для конкретной задачи, за ее пределами он никому не нужен.
А в рабочих задачах "производительность" с разгромным счетом побеждает "гибкость" и универсальные запросы не нужны.
...
Рейтинг: 0 / 0
12.09.2020, 12:55
    #39997906
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эффективность, читабельность, сопровождаемость SQL кода
Вообще, скоро появятся макросы...
...
Рейтинг: 0 / 0
12.09.2020, 15:43
    #39997931
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эффективность, читабельность, сопровождаемость SQL кода
И тогда наступит настоящий ад
...
Рейтинг: 0 / 0
12.09.2020, 16:06
    #39997932
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эффективность, читабельность, сопровождаемость SQL кода
Вячеслав Любомудров,

А я, как оптимист, надеюсь, что (как минимум скалярные) макросы дадут существенный прирост производительности
...
Рейтинг: 0 / 0
12.09.2020, 16:10
    #39997935
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эффективность, читабельность, сопровождаемость SQL кода
Количество переключений контекста должно существенно снизиться, прозрачность повыситься, только хз как тюнить потом такие запросы... Надо как-нибудь на досуге покопать, но скорее всего реальные запросы можно будет видеть и у них будут свои sql_id
...
Рейтинг: 0 / 0
12.09.2020, 17:19
    #39997943
booby
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эффективность, читабельность, сопровождаемость SQL кода
НеофитSQL
booby

То есть ты не свои ошибки таким образом проявлять собрался, а обучать других программистов,
как пользоваться твоими запросами, собираешься...

Конечно, для этого и пишется техническая документация, чтоб обучать других программистов....
Тема про образование других программистов поднята хорошая, даже если тон выбран неудачно.


Мда, запущенный случай. Похоже, уже не операбельный.

Ладно, раз тема про комментарии попробуем так зайти:
вот здесь https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1329011&msg=22194853
для обоснования красоты твоего, перенесенного в этот топик, запроса ты используешь аналогию:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
// функция подсчета объема ведер и бутылок
ERRORCODE CalcVesselVolume( const OBJECT& po ) // вызов по ссылке не даст передать NULL
{
    if( o.type != TYPE_BUCKET && 
        o.type != TYPE_BOTTLE )
        return ERROR_BAD_OBJECT_TYPE;
   ...



Этот конкретный пример был предельно неудачен именно по причине того,
что в нём не используется Raise_Application_Error.
Он не аналогичен показанному в первом посте этого топика запросу.

Поэтому что возмьём за пример аналогии такой текст:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
// функция подсчета объема ведер и бутылок
   void CalcVesselVolume( const OBJECT& po ) // вызов по ссылке не даст передать NULL
{
    if( o.type != TYPE_BUCKET && 
        o.type != TYPE_BOTTLE )
        Throw( Ex_Errno("vessel_volume", "Неумелый прикладной программист подготовил дрянной объект-параметр для великолепной библиотечной процедуры" ));

   ...



Отформатируем его в предложенном в первом посте данного топика стиле "лучших практик":
Код: plaintext
1.
2.
3.
4.
// функция подсчета объема ведер и бутылок, вызов по ссылке не даст передать NULL 
   void CalcVesselVolume( const OBJECT& po ) { if( o.type != TYPE_BUCKET && o.type != TYPE_BOTTLE ) Throw( Ex_Errno("vessel_volume", "Неумелый прикладной программист подготовил дрянной объект-параметр для великолепной библиотечной процедуры" ));

   ...


Очевидно что так стало несопоставимо лучше...
Что же, может и стало, для тех, кому надо прочитать всего лишь одну строку...

Теперь код нужно откомментировать.
Я позволю себе не тратить драгоценное время "другого программиста" на
особо ценные замечания сорта "первая строчка задает имена и типы колонок",
и, тем более, на "published under GPL v3"

Просто добавим содержательный комментарий для такого "другого программиста", которого "нужно обучить",
потому что он, может быть, не понимает, что здесь происходит.
Код: plaintext
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.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
// псевдокод, использующий выброс ошибки при "проверке параметров"
  void CalcVesselVolume( const OBJECT& po ) { 

    //предполагается абстрактная среда времени выполнения, поддерживающая работу с исключениями.

    //варианты использования:
    //а) Вызываемая процедура работает в одном (главном) потоке с вызывающей:
    //  При выбрасывании исключения управление передается в точку обработки ожидаемого исключения
    //  в коде вызывающего. Если такого места не обнаруживается, среда времени выполнения обязана уметь
    //  остановить такой поток и освободить занятые им ресурсы, без нарушения устойчивости в целом работы 
    //  запускающей среды.
    //  В Oracle Database, например, такой режим обеспечивается при запуске системой независимых pl/sql заданий (job).
    
    //б) Многопоточное окружение с главным потоком, порождающим дочерние.
    //   При возникновении ошибки в дочернем потоке среда выполнения не может просто погасить выбросивший исключение дочерний поток,
    //   а должна передать информацию о получении такого исключения в порождающий поток.
    //   В Oracle Database, например, такой режим поддерживается при параллельном выполнении SQL-запросов.
    
    //в) Распределенное окружение, вызывающий и вызываемый работают в независимых процессах,
    //   взаимодействие между которыми обеспечивается независимо от них обоих управляемой средой передачи сообщений.
    //   В Oracle Database это режим, к котром взаимодействует удалённый клиент и сервер.
    //   Пусть клиент явно запросил выполнения такой процедуры.
    //   Тогда для вызываемой процедуры вызывающим становится обслуживающий вызов серверный процесс.
    // 
    //   С точки зрения самого обслуживающего вызов процесса он всегда выполняет тот или курсор,
    //   отдавая результат выполнения в виде потока сообщений.
    //   В общем случае, при получении обслуживающим вызов процессом любого исключения,
    //   возникающем в процессе выполнения курсора, нельзя предсказать, 
    //   какого размера поток данных будет, или уже был, и был ли, отдан клиенту.
    //
    //   На стороне обслуживающего вызов процесса выполнение в этот момент должно прерваться,
    //   и сообщение о возникшей ошибке должно быть отдано клиенту отдельным сообщением, 
    //   вне потока передачи результатов выполнения заказанного курсора.
    //
    //   На стороне вызывающего клиента, в любом случае должен быть организован прием потока сообщений ошибках, переданных с сервера.
    //   Следует принять в расчет, что в составе этого же потока идут, кроме сообщений об ошибках прочие сообщения информационного плана, 
    //   докладывающие, например, о состоянии среды выполнения обслуживающего серверного процесса.
    //   Далее, в зависимости от конкретного устройства софта на клиентской стороне, обслуживающего вызов,
    //   или от его настроек, на стороне клиента может происходить или не происходить симметричный 
    //   выброс исключения, сигнализирующего о возникновении ошибки на серверной стороне.
    //   Во втором случае, клиентский код должен самостоятельно обследовать (обычно коллекцию) полученных от сервера сообщений,
    //   отделить информационные сообщения от сообщения об ошибках, и принять решение, что делать при наличии последних.
    //  
    //   На практике встречаются два подхода, один из которых либо полагается на гарантированность доставки сообщения об ошибке 
    //   и умение клиентского драйвера автоматически выбросить ошибку на клиенте, либо быть настроенным на такое умение.
    //
    //   Другой подход заключается в том, чтобы строить такие слои прикладных программных интерфейсов,
    //   которые гарантируют отсутствие необходимости анализа специального потока об ошибках,
    //   никогда не приводят к возникновению исключительной ситуации на стороне серверного обслуживающего процесса,
    //   и всю необходимую информацию явно содержат в параметрах вызываемой удаленной процедуры.    
    
     if( o.type != TYPE_BUCKET && o.type != TYPE_BOTTLE ) Throw( Ex_Errno("vessel_volume", "Неумелый прикладной программист подготовил дрянной объект-параметр для великолепной библиотечной процедуры" ));

   ...



Пожалуй, я даже не буду спрашивать у вас, где и как проходит граница
"обучающих других программистов" комментариев.
...
Рейтинг: 0 / 0
14.09.2020, 06:54
    #39998179
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эффективность, читабельность, сопровождаемость SQL кода
xtender
Вообще, скоро появятся макросы...
Хмм... А что, есть реальный смысл окунаться в омут ново-глючных версий сразу?
...
Рейтинг: 0 / 0
14.09.2020, 07:45
    #39998184
crutchmaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эффективность, читабельность, сопровождаемость SQL кода
НеофитSQL
читабельность, сопровождаемость SQL кода

Ха-ха.
...
Рейтинг: 0 / 0
14.09.2020, 07:54
    #39998185
crutchmaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эффективность, читабельность, сопровождаемость SQL кода
НеофитSQL
Как его сделать лучше?

Никак. У нас есть такая же шляпа из union all на 1к строчек.

НеофитSQL
Я знаю об одном недостатке этого кода

Вообрази, что у тебя там параметров не 4, а 400 и выборки везде не по count таблички с условием, а что-нибудь более толстое.
...
Рейтинг: 0 / 0
14.09.2020, 09:23
    #39998199
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эффективность, читабельность, сопровождаемость SQL кода
НеофитSQL
предварительно проверив входные параметры, чтоб не генерить белиберду или пустую таблицу при плохих исходных


В таком случае, необходимо ещё предварительно проверить все таблицы, используемые в запросе, вдруг нехороший пользователь вбил туда неидеальные данные, или нехороший разработчик другой задачи что-то изменил в уникальности полей соединения, или ...

упд. Задумайтесь хоть немного о том, что декларативное описание извлечения данных из множеств зависит не только от параметров вашего запроса. Запрос возвращающий хорошие данные на юнит-тесте запросто может вернуть на реальных данных совершенно неожиданный результат. Просто потому, что оттачивая проверку параметров вы не удосужитесь проверить уникальность условий соединения множеств.
...
Рейтинг: 0 / 0
14.09.2020, 09:28
    #39998202
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эффективность, читабельность, сопровождаемость SQL кода
НеофитSQL
Код: plsql
1.
-- опубликовано на правах GPL v3 / published under GPL v3



Как насчёт привести тогда уж и код функции, а если внутри неё используются системные оракловые, то срочно начать рыть доку в поисках условий распространения кода с их использованием?
...
Рейтинг: 0 / 0
14.09.2020, 10:35
    #39998219
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эффективность, читабельность, сопровождаемость SQL кода
env
В таком случае, необходимо ещё предварительно проверить все таблицы, используемые в запросе, вдруг нехороший пользователь вбил туда неидеальные данные
была у нас старая БД, тянущаяся с семерки... где был месяц=2 и число=30
...
Рейтинг: 0 / 0
14.09.2020, 23:22
    #39998567
НеофитSQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Эффективность, читабельность, сопровождаемость SQL кода
andreymx
env
В таком случае, необходимо ещё предварительно проверить все таблицы, используемые в запросе, вдруг нехороший пользователь вбил туда неидеальные данные
была у нас старая БД, тянущаяся с семерки... где был месяц=2 и число=30


Одна из инициатив в моей новой работе - посмотреть на целостность/качество данных по таблицам, и по их взаимосвязям, и поднять/удержать качество данных ночной автоматизацией.
Это уже потихоньку делается, косяки и несоответствия потихоньку исправляются, данные становятся здоровее.

Потому что как пример 2/30 показывает, бывают ошибки (как при вводе, так и при выборе типов данных).

В своем PL/SQL коде я по возможности предохраняюсь.

Например, select into может выбить, если вернул количество строк отличное от одного. Если поиск по уникальному ключу, то про много строк можно и не беспокоиться, а пустой результат возможен, хотя вроде и не должен быть. В этом случае мой код логнет ошибку с известными параметрами, а я на следующий день посмотрю таблицу ошибок чтоб посмотреть где ошибка - в коде, в дизайне или в данных.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Эффективность, читабельность, сопровождаемость SQL кода / 25 сообщений из 29, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]