Этот баннер — требование Роскомнадзора для исполнения 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 |
|
||
|
|

start [/forum/topic.php?fid=43&msg=33146819&tid=1605642]: |
0ms |
get settings: |
9ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
31ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
66ms |
get tp. blocked users: |
1ms |
| others: | 243ms |
| total: | 388ms |

| 0 / 0 |
