Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
UDF
|
|||
|---|---|---|---|
|
#18+
Нужно сообразить нечто а-ля Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Я так понял в СуБасе функцию родить нельзя... А SP... Во-первых: из SP можно вернуть только int (по крайней мере так в букваре написано). Во-вторых: как ее тогда дергать? Код: plaintext 1. В общем: какие будут советы/предложения? Можно, конечно, все организовать в SP (родить временную таблицу, потом бегать по ней и дергать MyFunc), но, IMHO, ректально это как-то... А хочеться по-людськи... select @@version Adaptive Server Enterprise/12.5.1/EBF 11428/P/NT (IX86)/OS 4.0/ase1251/1823/32-bit/OPT/Wed Sep 17 11:10:54 2003 _________________ "Helo, word!" - 17 errors 56 warnings ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2006, 22:44 |
|
||
|
UDF
|
|||
|---|---|---|---|
|
#18+
Ex_SoftЯ так понял в СуБасе функцию родить нельзя...Ну когда люди запомнят что Sybase пишется только с одной большой буквой. И это фирма производящая несколько разных баз данных и много разных других продуктов поэтому нельзя использовать ее имя для обозначения какой-то своей базы данных. Вот чисто из вредности: Можно в Sybase функцию родить! Запросто! Тебе на каком языке? Хочешь я ее тебе на Sybase PowerBuilder рожу? И попробуй только возмутится что это не "СуБасе". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2006, 22:55 |
|
||
|
UDF
|
|||
|---|---|---|---|
|
#18+
В ASE можно писать такие функции на Java. Для этого нужно только иметь ASE Java option, который имеет отдельную лицензию и стоит отдельных денег. Будет почти так, как вы нарисовали. Можно поставить себе developer edition и попробовать, устроит ли вас это. Только хочу предупредить, что производительность такого запроса однозначно будет ну просто никакая. На маленьких таблицах только это сможет работать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2006, 05:38 |
|
||
|
UDF
|
|||
|---|---|---|---|
|
#18+
White Owl Ex_SoftЯ так понял в СуБасе функцию родить нельзя...Ну когда люди запомнят что Sybase пишется только с одной большой буквой. И это фирма производящая несколько разных баз данных и много разных других продуктов поэтому нельзя использовать ее имя для обозначения какой-то своей базы данных. Вот чисто из вредности: Можно в Sybase функцию родить! Запросто! Тебе на каком языке? Хочешь я ее тебе на Sybase PowerBuilder рожу? И попробуй только возмутится что это не "СуБасе". Поддерживаю - на Sybase ASA WatcomSQL тоже можно целую тонну функций родить и ХП в запросах юзать как таблицы ... нечего писать, что типа Sybase ничего не умеет - он все умеет, но не везде ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2006, 06:27 |
|
||
|
UDF
|
|||
|---|---|---|---|
|
#18+
Гм... /me думает: вроде ж не пнятница... White Owl Ну когда люди запомнят что Sybase пишется только с одной большой буквой. Если это для Вас настолько критично, давайте обсудим это здесь White Owl Тебе на каком языке? Хочешь я ее тебе на Sybase PowerBuilder рожу? Во-первых: Ex_Soft А SP... Во-первых: из SP можно вернуть только int (по крайней мере так в букваре написано). Во-вторых: как ее тогда дергать? Код: plaintext 1. ... select @@version Adaptive Server Enterprise/12.5.1/EBF 11428/P/NT (IX86)/OS 4.0/ase1251/1823/32-bit/OPT/Wed Sep 17 11:10:54 2003 IMHO, из контекста уже понятно, что речь идет об ASE 12.5.1, а не о PowerBuilder'е. Во-вторых: топик открыт в Sybase ASA, ASE, IQ и если бы у меня возник вопрос: Как родить функцию в PowerBuilder'е , то, по крайней мере, я задал бы его в PowerBuilder ASCRUS на Sybase ASA WatcomSQL Всегда указывайте наименование и версию СУБД (Sybase ASE, Sybase ASA или Sybase IQ) Ex_Soft select @@version Adaptive Server Enterprise/12.5.1/EBF 11428/P/NT (IX86)/OS 4.0/ase1251/1823/32-bit/OPT/Wed Sep 17 11:10:54 2003 Ну?.. И где тут говориться о Sybase ASA WatcomSQL ? MasterZiv Для этого нужно только иметь ASE Java option, который имеет отдельную лицензию и стоит отдельных денег. Будет почти так, как вы нарисовали. Можно поставить себе developer edition и попробовать, устроит ли вас это. Да нет... На такое никто не пойдет... Хотя бы потому, что необходимость в таком финте ушами вылезла впервые - до этого обходились как-то тем, что предоставляется штатно... MasterZiv Только хочу предупредить, что производительность такого запроса однозначно будет ну просто никакая. На маленьких таблицах только это сможет работать. Да я в этом и не сомневался как бы... В том то и дело, что обрабатывать прийдется немерянные таблицы... По сему - повторюсь: как выше поставленную задачу можно оптимально решить в ASE 12.5.1? (что посредством SP - это понятно) Просто пока в гольову пришел один вариант: Ex_Soft родить временную таблицу, потом бегать по ней и дергать MyFunc М.б. ЭстЪ еще какие-то варианты решения? _________________ "Helo, word!" - 17 errors 56 warnings ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2006, 08:42 |
|
||
|
UDF
|
|||
|---|---|---|---|
|
#18+
Ex_SoftА SP... Во-первых: из SP можно вернуть только int (по крайней мере так в букваре написано). из SP можно вернуть столько и таких значений, сколько необходимо create proc test;1 (@in int, @out1 varchar(20) output, @out2 int output, @out3 money output) as begin select @out1='nike', @out2=1,@out3=20 end go declare @o1 varchar(20), @o2 int, @o3 money exec test 1, @out1=@o1 output, @out2=@o2 output, @out3=@o3 output go ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2006, 10:50 |
|
||
|
UDF
|
|||
|---|---|---|---|
|
#18+
komrad из SP можно вернуть столько и таких значений, сколько необходимо говорилось в контексте Ex_Soft Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. сомнительно, что в конструкции такого рода можно заюзать каким-то макаром output параметры SP... _________________ "Helo, word!" - 17 errors 56 warnings ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2006, 11:08 |
|
||
|
UDF
|
|||
|---|---|---|---|
|
#18+
Ex_Soft сомнительно, что в конструкции такого рода можно заюзать каким-то макаром параметры SP... никто не говорил что удастся делайте через процу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2006, 11:11 |
|
||
|
UDF
|
|||
|---|---|---|---|
|
#18+
Так к сведению: в ближайшем будущем, а именно в ASE 15.0.2, наконец-то появятся User Defined Function на основе SQL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2006, 11:18 |
|
||
|
UDF
|
|||
|---|---|---|---|
|
#18+
Гм... Тривиальная, на первый взгляд, задача ввела мну в ступор : как все это организовать-то?.. По идее напрашивается так: 1. Рожаем темповую таблицу 2. Организуем внешний цикл по Table1 курсором 3. Организуем внутренний цикл по Table2 курсором 4. Все строки у которых (exec @ret=MyFunc(T1.Smth,T2.Smth))=Smth записываем в темповую таблицу Но уж очень это, IMHO, ректально... :( Можно ли как-то это организовать более по людськи?... М.б. в ASE 12.5.1 ЭстЪ какие-то специфичные фичи, о которых я не знаю, с помощью которых это можно организовать более эстетичнее? Как люди выкручиваются из подобных ситуаций? Или ни у кого никогда не возникало потребности забалабенить такое? TIA _________________ "Helo, word!" - 17 errors 56 warnings ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2006, 14:53 |
|
||
|
UDF
|
|||
|---|---|---|---|
|
#18+
Ex_SoftГм... Тривиальная, на первый взгляд, задача ввела мну в ступор : как все это организовать-то?.. По идее напрашивается так: 1. Рожаем темповую таблицу 2. Организуем внешний цикл по Table1 курсором 3. Организуем внутренний цикл по Table2 курсором 4. Все строки у которых (exec @ret=MyFunc(T1.Smth,T2.Smth))=Smth записываем в темповую таблицу Но уж очень это, IMHO, ректально... :( Можно ли как-то это организовать более по людськи?... М.б. в ASE 12.5.1 ЭстЪ какие-то специфичные фичи, о которых я не знаю, с помощью которых это можно организовать более эстетичнее? Как люди выкручиваются из подобных ситуаций? Или ни у кого никогда не возникало потребности забалабенить такое? TIA _________________ "Helo, word!" - 17 errors 56 warnings можно выдрать результат запроса без этого where в темповую таблицу, по ней открыть курсор и позаписно анализировать данные, перекидывая (допустим) в другую темповую подходящие записи имхо конечно, делать надо с оглядкой, а то может у вас там записей мульёны ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2006, 15:28 |
|
||
|
UDF
|
|||
|---|---|---|---|
|
#18+
komrad можно выдрать результат запроса без этого where в темповую таблицу ... конечно, делать надо с оглядкой, а то может у вас там записей мульёны в том то и дело, что мульены... по сему нуна это оптимизировать как по скорости, так и по обЪему данных, закачиваемых в темповую таблицу. Потому как если закачать туда все, а потом там шеволиться... _________________ "Helo, word!" - 17 errors 56 warnings ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2006, 17:05 |
|
||
|
UDF
|
|||
|---|---|---|---|
|
#18+
Ex_Soft komrad можно выдрать результат запроса без этого where в темповую таблицу ... конечно, делать надо с оглядкой, а то может у вас там записей мульёны в том то и дело, что мульены... по сему нуна это оптимизировать как по скорости, так и по обЪему данных, закачиваемых в темповую таблицу. Потому как если закачать туда все, а потом там шеволиться... А почему именно на функции свет клином сошелся? Во вьюшку расчет значения этой MyFunc() по произведению таблиц вынести нельзя? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. morisТак к сведению: в ближайшем будущем, а именно в ASE 15.0.2, наконец-то появятся User Defined Function на основе SQL.Ура, ура. Не прошло и 8 лет :-)) Жаль только, что 15 версию использовать уже некому будет. Просрали, всё просрали, долбо..ы (с) Горчев ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2006, 03:50 |
|
||
|
UDF
|
|||
|---|---|---|---|
|
#18+
Ex_Soft По идее напрашивается так: 1. Рожаем темповую таблицу 2. Организуем внешний цикл по Table1 курсором 3. Организуем внутренний цикл по Table2 курсором 4. Все строки у которых (exec @ret=MyFunc(T1.Smth,T2.Smth))=Smth записываем в темповую таблицу Да просто нужно запрос на JOIN написать и все. Если условия JOIN-а меняются, надо запросы налету генерировать и выполнять. Это -- единственный способ уйти от O( N*M ) . Хотя бы в некоторых случаях. Если нужно, можно общую часть JOIN-а вынести в определение VIEW, и на его основе уже генерировать финальный запрос. Короче -- меняй постановку задачи, думай на SQL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2006, 08:27 |
|
||
|
UDF
|
|||
|---|---|---|---|
|
#18+
sn1251 А почему именно на функции свет клином сошелся? Во вьюшку расчет значения этой MyFunc() по произведению таблиц вынести нельзя? IMHO - нЭт MasterZiv Да просто нужно запрос на JOIN написать и все. Если условия JOIN-а меняются, надо запросы налету генерировать и выполнять. Это -- единственный способ уйти от O( N*M ) . Хотя бы в некоторых случаях. Если нужно, можно общую часть JOIN-а вынести в определение VIEW, и на его основе уже генерировать финальный запрос. IMHO, JOIN'ы, VIEW'хи тоже не прокатят... MasterZiv Короче -- меняй постановку задачи, думай на SQL. Гм... Тогда я лучче опишу постановку задачи, мо что-то всем миром надумаем Преамбула. Производиться импорт, 4 example, контрагентов. Данные заносятся в промежуточную таблицу. Из всего, что имеем: Ф.И.О., ДР, адрес . Предваряя флейм на предмет скудности данных: для заключения договора страхования - это все, что необходимо знать о страхователе ф/л. Более того, если, 4 example, страхователем является ю/л, и оно страхует скопом всех своих сотрудников, то застрахованные лица подаются вообще в приложении к договору в виде списка и там даже адрес может отсутствовать. Амбула. Срок действия договора 1 год. Соответственно каждый год заключается новый договор. Поэтому контрагенты, как правило, практически одни и теже. Необходимо вычленить из промежуточной таблицы контрагентов, которые уже существуют в основной таблице контрагентов. Поскольку люди набирают кто во что горазд, то для того, что бы наиболее точно сравнить используется следующий алгоритм: Код: plaintext 1. 2. 3. 4. 5. На основе выше описанного алгоритма простенькая SP Код: 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. И все это нуна оптимизировать с точки зрения увеличения быстродействия и уменьшения ресурсоемкости. Какие будут идеи/предложения? _________________ "Helo, word!" - 17 errors 56 warnings ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2006, 17:49 |
|
||
|
UDF
|
|||
|---|---|---|---|
|
#18+
То, что делает эта процедура можно IMHO представить как: Обычное соединение через UNION ALL нескольких запросов с джойнами по выражению. Естественно это будет тормозить. Поэтому как вариант вычислять сразу выражения (например, триггером при вставке) и джойнить потом эту радость несколькими запросами с объединением через UNION ALL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2006, 18:43 |
|
||
|
UDF
|
|||
|---|---|---|---|
|
#18+
just_me Поэтому как вариант вычислять сразу выражения (например, триггером при вставке) и джойнить потом эту радость несколькими запросами с объединением через UNION ALL. Вариант создания дополнительных полей, содержащих промежуточные трансформации с формированием их триггером как бы рассматривался. Конечно, в этом случае, действительно можно обойтись без выпендрежа с SP a-la UDFчистыми запросами и UNION'ами. Скорее всего, таки, склонимся к этому варианту - потому как даже разбухание БД за счет 5-ти доп полей (на каждый этап сравнения) меньшее зло, чем тормоза при выше предложенном (SP с двумя курсорами) варианте. Мо у кого ышо ЭстЪ какие-нить идеи/предложения? _________________ "Helo, word!" - 17 errors 56 warnings ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2006, 20:33 |
|
||
|
UDF
|
|||
|---|---|---|---|
|
#18+
Последовательно из импортрой таблицы делается временная таблица для каждого из этих пунктов: asdf 1. Производится замена импортных буковок, сходных по начертанию, на наши - сравниваем. Если не равно п. 2. 2. Переводиться все в один регистр - сравниваем. Если не равно п. 3. 3. Удаляются пробелы - сравниваем. Если не равно п. 4. 4. Удаляются all non-alphanumeric characters, including punctuation - сравниваем. Если не равно п. 5. 5. Удаляются гласные - сравниваем. Если не равно - кердык Причем так, что во временной таблице уже в поле кладется результат каждого преобразования. И пишется запрос на эту временную таблицу и основные справочники, который дает совпадение. Совпавшие записи удаляются. И не участвуют в следующем пункте. и так далее, всего пять раз. Тупо, примитивно, но будет работать быстро. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2006, 12:55 |
|
||
|
|

start [/forum/topic.php?fid=55&msg=33955657&tid=2012614]: |
0ms |
get settings: |
11ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
88ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
72ms |
get tp. blocked users: |
2ms |
| others: | 250ms |
| total: | 468ms |

| 0 / 0 |
