Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
DB и Си
|
|||
|---|---|---|---|
|
#18+
Следуя вашим советам решил попробовать написать хп на Си. Сразу возникли вопросы: 1) У меня есть скомпиленная библиотека, куда ее класть? 2) Нужно ли регистрировать? Если да то как? 3) Как вызвать из UDF или SP? Зарание спасибо за ответ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2005, 21:50 |
|
||
|
DB и Си
|
|||
|---|---|---|---|
|
#18+
db2a2e81.pdf Application Development Guide: Programming Server Applications db2axe81.pdf Application Development Guide: Building and Running Applications db2s1e81.pdf SQL Reference Volume 1 db2s2e81.pdf SQL Reference Volume 2 примеры в SQLLIB\samples\c ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2005, 22:46 |
|
||
|
DB и Си
|
|||
|---|---|---|---|
|
#18+
В примерах в SQLLIB\samples\c есть достаточно информации для старта - как компилировать, куда класть. Лично я UDF и SP на C не пишу, у меня даже компилятор не установлен. Это (программирование на C) скорее для людей, бьющихся за производительность, причем не факт, что её можно существенно повысить таким путем ;-). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2005, 22:53 |
|
||
|
DB и Си
|
|||
|---|---|---|---|
|
#18+
может я чего не понимаю... однако мне просто нужно написать свою функцию Код: plaintext 1. 2. скомпелить длл mydll.dll и вызвать ее из UDF такое возможно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2005, 23:34 |
|
||
|
DB и Си
|
|||
|---|---|---|---|
|
#18+
Во, я тоже хотел бы написать без использования Си (уж очень заказчик настаивает). Но несколько напрягает отсутствие аналогов битовых операторов (Виктор, спасибо за подсказку), аналогов ISNUMERIC (спасибо КукБуку) и ISDATE (сейчас запнулся на нем, родимом). Ну и отсутствие опыта, конечно :). Не знаю как сделать в UDF аналог MS SQL-ной TEMPORARY VARIABLE TABLE. Т.е. UDF SplitText возвращает таблицу, а вторая (вызывающая) функция идет по записям этой таблицы, строка за строкой. Попробовал FOR, ругается. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2005, 00:17 |
|
||
|
DB и Си
|
|||
|---|---|---|---|
|
#18+
divpможет я чего не понимаю... однако мне просто нужно написать свою функцию скомпелить длл mydll.dll и вызвать ее из UDF такое возможно? UDF - это функция. Вызвать одну (написанную на произвольном языке - C, Java etc) UDF из другой (SQL) UDF вы вполне можете. Написать UDF на C, вызывающую другую функцию на C - тоже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2005, 13:46 |
|
||
|
DB и Си
|
|||
|---|---|---|---|
|
#18+
ak@Не знаю как сделать в UDF аналог MS SQL-ной TEMPORARY VARIABLE TABLE. Т.е. UDF SplitText возвращает таблицу, а вторая (вызывающая) функция идет по записям этой таблицы, строка за строкой. Попробовал FOR, ругается. Что такое "TEMPORARY VARIABLE TABLE"? С синтаксисом FOR у вас минимум три проблемы (это то, что сразу бросается в глаза): 1. FOR list_emails (txt) AS 2,3. SELECT txt FROM DB2ADMIN.FSPLIT(v_emails, ';'); настоятельно рекомендую перечитать синтаксис FOR и как делать выборку из табличных функций. И - если бы не SET v_cnt = v_cnt +1, вместо той конструкции можно было использовать Код: plaintext 1. 2. 3. 4. Кстати, явное указание схемы в коде (DB2ADMIN. ) приведет к неудобствам - вы лишаетесь возможности держать несколько копий данных и кода в одной базе (что полезно при отладке). Если будете пользоваться неявной - не забудьте кроме ceuurent schema задать current function path. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2005, 14:02 |
|
||
|
DB и Си
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2005, 14:07 |
|
||
|
DB и Си
|
|||
|---|---|---|---|
|
#18+
Да, этот конкретный пример я и пытался сделать так, как Вы сказали. Только не знал про ключевое слово TABLE в FROM clause. А VARIABLE TABLE - это таблица-переменная. То же самое, что и временная таблица, но находится целиком в памяти, а не в tempdb. Ну и соответственно область видимости - текущая процедура. Использовать временные таблицы в UDF в MSSQL нельзя, но таблицы-переменные можно. Точно не помню, но их, по-моему, нельзя индексировать, хотя во многих случаях они увеличивают скорость работы за счет отсутсвия операций чтения-записи. Описание таблицы-переменной DECLARE @v_table TABLE (i int identity(1, 1) PRIMARY KEY, somefield int, ....) А дальше используется как обычная таблица. Например SELECT COUNT(*) FROM @v_table WHERE somefield = 123 А по поводу указания схемы - я ее никогда и не указывал. Тут она в качестве эксперимента. Виктор, спасибо за помощь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2005, 21:09 |
|
||
|
DB и Си
|
|||
|---|---|---|---|
|
#18+
Блин, не понос, так золотуха. Не билдится функция. Кто знает, как с этим бороться? Когда нет MODIFIES SQL DATA, пишет: DB2ADMIN.FAREEMAILSVALID: 22: [IBM][CLI Driver][DB2/NT] SQL0374N The "MODIFIES SQL DATA" clause has not been specified in the CREATE FUNCTION statement for LANGUAGE SQL function "DB2ADMIN.FAREEMAILSVALID" but an examination of the function body reveals that it should be specified. LINE NUMBER=22. SQLSTATE=428C2 Когда есть: DB2ADMIN.FAREEMAILSVALID: 3: [IBM][CLI Driver][DB2/NT] SQL0628N Multiple or conflicting keywords involving the "NO/CONTAINS/READS/MODIFIES SQL DATA" clause are present. LINE NUMBER=3. SQLSTATE=42613 Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2005, 22:02 |
|
||
|
DB и Си
|
|||
|---|---|---|---|
|
#18+
ak@Да, этот конкретный пример я и пытался сделать так, как Вы сказали. Только не знал про ключевое слово TABLE в FROM clause. А еще две синтаксические ошибки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2005, 23:41 |
|
||
|
DB и Си
|
|||
|---|---|---|---|
|
#18+
ak@Блин, не понос, так золотуха. Не билдится функция. Кто знает, как с этим бороться? Код: 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. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2005, 23:43 |
|
||
|
DB и Си
|
|||
|---|---|---|---|
|
#18+
Спасибо, Виктор, но все та же ерунда с MODIFIES SQL DATA. Видимо Development Center чего-то кривит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2005, 01:05 |
|
||
|
DB и Си
|
|||
|---|---|---|---|
|
#18+
Что, именно на том (немодифицированном) скрипте, который привел я??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2005, 10:06 |
|
||
|
DB и Си
|
|||
|---|---|---|---|
|
#18+
Development Center не может ничего кривить (в данном контексте). Внимательнее относитесь к разнице между READS SQL DATA, CONTAINS SQL и MODIFIES SQL DATA. Так, CREATE FUNCTION FSPLITTEXT(txt VARCHAR(1024), delimiter VARCHAR(1) ) не обращается ни к каким таблицам вообще, поэтому напрашивается CONTAINS SQL (хотя READS SQL DATA, быть может, подойдет). А если бы делала SELECT из "физической" таблицы (напрямую или в конечном счете через цепочку функций и view), то должно подойти READS SQL DATA. Ну, а если внутри INSERT/UPDATE/DELETE - тогда MODIFIES SQL DATA. Если функция F1 вызывает F2, а F2 - MODIFIES SQL DATA, то тогда F1 просто обязана быть MODIFIES SQL DATA. (Если F2 может модифицировать данные, а F1 вызывает F2, то F1 может модифицировать данные). Если F2 - READS SQL DATA, то F1 должна быть READS SQL DATA или MODIFIES SQL DATA. Аналогично с DETERMINISTIC и EXTERNAL ACTION. Вот что за глюк с [IBM][CLI Driver][DB2/NT] SQL0628N Multiple or conflicting keywords involving the "NO/CONTAINS/READS/MODIFIES SQL DATA" clause are present. LINE NUMBER=3. SQLSTATE=42613 мне непонятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2005, 10:27 |
|
||
|
DB и Си
|
|||
|---|---|---|---|
|
#18+
Понятно, что MODIFIES SQL DATA и DETERMINISTIC противоречат друг другу, но это еще не всё. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2005, 10:43 |
|
||
|
DB и Си
|
|||
|---|---|---|---|
|
#18+
Складывается впечатление (явного указания в документации я не нашел), что только табличные функции могут быть MODIFIES SQL DATA! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2005, 11:37 |
|
||
|
DB и Си
|
|||
|---|---|---|---|
|
#18+
По диаграмке в кулинарной книжке так и выходит, хотя в официальной документации не сказано. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2005, 12:02 |
|
||
|
DB и Си
|
|||
|---|---|---|---|
|
#18+
Нет, тогда ошибка и в кулинарной книжке. Наверное, пора гуглить англоязычные ньюсгруппы и спрашивать Ibm'еров. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2005, 12:05 |
|
||
|
DB и Си
|
|||
|---|---|---|---|
|
#18+
http://groups.google.com/groups?hl=ru&lr=&threadm=39c3crF5v7oioU1%40individual.net&rnum=1&prev=/groups%3Fq%3DSQL0628N%26hl%3Dru%26lr%3D%26sa%3DN%26scoring%3Dd Т.е. в официальной документации это всё-таки есть - но нарисовано так уродливо, что я не обратил внимание на сноску. Полагаю, теперь вопрос кристально ясен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2005, 13:40 |
|
||
|
DB и Си
|
|||
|---|---|---|---|
|
#18+
Спасибо, Виктор. Четко и прозрачно. Огромное спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2005, 16:31 |
|
||
|
DB и Си
|
|||
|---|---|---|---|
|
#18+
Табличные ф-ции на SQL не могут содержать IUD операторы. Кстати в таких функциях можно вызвать SP, правда только те которые READ SQL DATA. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2005, 10:30 |
|
||
|
DB и Си
|
|||
|---|---|---|---|
|
#18+
Да нет, наоборот, табличные могут, нетабличные не могут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2005, 11:21 |
|
||
|
DB и Си
|
|||
|---|---|---|---|
|
#18+
а если писать на си, то на каком нужно писать чтобы все заработало под линухом? Подойдет ли важал си? можно ли будет написать на си шарпе и заработает ли без моно дот нет гну и подобных? Да а лучше обьясните плз. где исполняются скопиленные дллки? Может что в самой диби два есть, ну чтобы заработало под линухом ддлка написанная на си шарпе... зарание спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2005, 23:37 |
|
||
|
DB и Си
|
|||
|---|---|---|---|
|
#18+
очепятка: вижал си конечно! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2005, 23:37 |
|
||
|
DB и Си
|
|||
|---|---|---|---|
|
#18+
divpа если писать на си, то на каком нужно писать чтобы все заработало под линухом? Подойдет ли важал си? можно ли будет написать на си шарпе и заработает ли без моно дот нет гну и подобных? Да а лучше обьясните плз. где исполняются скопиленные дллки? Может что в самой диби два есть, ну чтобы заработало под линухом ддлка написанная на си шарпе... зарание спасибо! В сущности не важно на каком языке реализовывать DLL, лишь бы можно было правильно передать параметры. Можно ни на дельфях как я полагаю сляпать DLL, тут лишь одна проблема - pascal не поддерживает Embeded SQL. DLL-ки кладутся в любой каталог, который прописан в PATH. Но как правило в %DB2PATH%\FUNCTION. А можно и без этого обойтись, если задавать полный путь в external name. >Да а лучше обьясните плз. где исполняются скопиленные дллки? Может что в >самой диби два есть, ну чтобы заработало под линухом ддлка написанная на >си шарпе... Было бы супер...) Видно, что вы "большой" спец в Линуксе. Это невозможно. Совместимость между хранимками, написанными на C под Linux и Win - только на уровне исходных текстов. в Linux *.so а в Win - *.dll - соответственно и форматы разные. Кстати, можно компилиться для линукса и под виндой, но для этого следует использовать хотябы MinGW (gcc под виндой) в режиме кросс-компилятора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2005, 10:23 |
|
||
|
DB и Си
|
|||
|---|---|---|---|
|
#18+
>В сущности не важно на каком языке реализовывать DLL, лишь бы можно было правильно передать параметры в доке где-то был cписок компиляторов, которые поддерживаются. сходу не нашел. параметры-параметрами, но еще зачастую нужно линковаться с библиотеками db2, а для этого нужен соотв. компилятор. например, icc на w2k уже не поддерживается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2005, 10:48 |
|
||
|
DB и Си
|
|||
|---|---|---|---|
|
#18+
ф>В сущности не важно на каком языке реализовывать DLL, лишь бы можно было правильно передать параметры в доке где-то был cписок компиляторов, которые поддерживаются. сходу не нашел. параметры-параметрами, но еще зачастую нужно линковаться с библиотеками db2, а для этого нужен соотв. компилятор. например, icc на w2k уже не поддерживается Если вы желаете использовать статический SQL то линковаться действительно нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2005, 10:51 |
|
||
|
DB и Си
|
|||
|---|---|---|---|
|
#18+
Victor MetelitsaСкладывается впечатление (явного указания в документации я не нашел), что только табличные функции могут быть MODIFIES SQL DATA! Так и есть! "Проверено электроникой". Сегодня мне пришлось исправить функцию, которая должна была возвращать только INTEGER, на функцию возвращающую таблицу. А иначе ругалась на ошибку SQL0628N ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2005, 13:43 |
|
||
|
|

start [/forum/topic.php?all=1&fid=43&tid=1605642]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
61ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 253ms |
| total: | 413ms |

| 0 / 0 |
