powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Создание пользовательской функции в DB2 v8
15 сообщений из 15, страница 1 из 1
Создание пользовательской функции в DB2 v8
    #32634820
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще одна проблема...
В версии DB2 v7 можно было в качестве пользовательских функций встраивать функции, написанные на С. А как быть с 8 версией... Порбую скрипт в командном центре:

create function sm.pars(varchar(250),varchar(1000),varchar(25))
returns char(250)
not fenced
not deterministic
no sql
no external action
language c
parameter style db2sql
external name 'c:\sm\pars\udf!ctr'
disallow parallel

Он работал в 7 версии. А сейчас что делать????? HELP!!!!
...
Рейтинг: 0 / 0
Создание пользовательской функции в DB2 v8
    #32634916
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
#makefile
DBUSER=db2admin
DBNAME=utfdb
DBPASSWORD=ibmdb2

TARGET=funcs1.dll
DEF=funcs.def
LIBS=db2api.lib
DB2INCLUDE=D:\SQLLIB\INCLUDE
INCLUDE=D:\VC98\INCLUDE

CPPOBJS= ft.obj
CFLAGS= -Z7 -O2 -G5 -c -W2 -D_X86_= 1  -DWIN32 -GR -GX
LINKFLAGS= /DEBUG /DLL

.SUFFIXES:
.SUFFIXES: .obj .sqx .cpp

.cpp.obj:
	cl $(CFLAGS) $*.cpp

.sqx.obj:
	echo CONNECT TO $(DBNAME) USER $(DBUSER) USING '$(DBPASSWORD)' > $*.db2
	echo PREP $*.sqx BINDFILE >> $*.db2
	echo BIND $*.bnd >> $*.db2
    @if exist $*.log del $*.log
    d:\sqllib\bin\db2clpex db2 -z $*.log -vf $*.db2
    type $*.log
	cl $(CFLAGS) -I$(INCLUDE) -I$(DB2INCLUDE) $*.cxx

$(TARGET): $(CPPOBJS) Makefile funcs.def
	link $(LINKFLAGS) -out:$(TARGET) $(SQXOBJS) $(CPPOBJS) $(LIBS) /LIBPATH:D:\SQLLIB\LIB -def:$(DEF)
    copy $(TARGET) d:\sqllib\function


Код: 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.
//ft.sqx
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <sqlenv.h>
#include <sqludf.h>

SQL_API_RC SQL_API_FN rndvarchar (
		SQLUDF_SMALLINT *cnt,
		SQLUDF_CHAR (*str)[ 255 ],
        SQLUDF_NULLIND *cntind,
        SQLUDF_NULLIND *strind,
		SQLUDF_TRAIL_ARGS
    )
{
	sqlint16 n=*cnt;
    if (n> 254 ) n= 254 ;
    for(long i= 0 ;i<n;i++) {
    	((char*)str)= 97 +rand()% 26 ;
    }
    ((char*)str)[ 0 ]-=('a'-'A');
    (*str)[n]= 0 ;
    return  0 ;
}

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
CONNECT TO utfdb USER db2admin USING ibmdb2@

DROP FUNCTION RNDVARCHAR(SMALLINT)@

CREATE FUNCTION RNDVARCHAR(CNT SMALLINT)
RETURNS VARCHAR( 254 )
LANGUAGE C
NO SQL
PARAMETER STYLE SQL
NOT FENCED
NO EXTERNAL ACTION
EXTERNAL NAME 'funcs1!rndvarchar'
@


Код: plaintext
1.
2.
LIBRARY funcs1
EXPORTS rndvarchar


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
db2 => connect to utfdb

   Информация соединения с базой данных

 Сервер баз данных           = DB2/NT  8 . 2 . 0 
 ID авторизации SQL          = DB2ADMIN
 Алиас локальной базы данных = UTFDB

db2 => values substr(rndvarchar(smallint( 20 )), 1 , 20 )

 1 
 [i]-------------------- 
Vscxggbwkfnqduxwfnfo

   1  записей выбрано.

db2 =>
...
Рейтинг: 0 / 0
Создание пользовательской функции в DB2 v8
    #32635212
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за ответ в любом случае
А первый фрагмент - это про что или где???
...
Рейтинг: 0 / 0
Создание пользовательской функции в DB2 v8
    #32635242
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1 фрагмент - это makefile, который используется утилитой make или nmake)
полезно знать такие вещи, а также CVS
...
Рейтинг: 0 / 0
Создание пользовательской функции в DB2 v8
    #32635246
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще один тупой вопрос, надеюсь последний!:)
А куда ентот файл девать??? Его создавать что ли???
...
Рейтинг: 0 / 0
Создание пользовательской функции в DB2 v8
    #32635328
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
создешь файлs с именами:
1) makefile
2) ft.sqx

должен быть установлен VC++ и прописаны правильно пути.

вводишь:
nmake

после чего созается funcs1.dll и копируется в каталог D:\SQLLIB\FUNCTION
...
Рейтинг: 0 / 0
Создание пользовательской функции в DB2 v8
    #32635375
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фигня какая-то...
dll-собрал.... в комцентре запускаю create function... и ноль эмоций
Ни ошибок, ни результатов Чего может быть???
...
Рейтинг: 0 / 0
Создание пользовательской функции в DB2 v8
    #32635443
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробовал эту dll подключиьт к 7 версии, тож заработала(
Почему же на 8-ке не получается????
...
Рейтинг: 0 / 0
Создание пользовательской функции в DB2 v8
    #32635470
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я эту dll обкатывал и на 8.1 и на 8.2..
...
Рейтинг: 0 / 0
Создание пользовательской функции в DB2 v8
    #32635519
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем создал твою dll. Дык она тоже не хочет ни в какую создавать функцию?!?!!?!?
В комцентре запускаю команду:
create function....

Результат:
------------------------------ Введенные команды ------------------------------
CREATE FUNCTION RNDVARCHAR(CNT SMALLINT) RETURNS VARCHAR(254) LANGUAGE C NO SQL PARAMETER STYLE SQL NOT FENCED NO EXTERNAL ACTION EXTERNAL NAME 'C:\DB2.TMP\2\2\funcs1!rndvarchar'
-----------------------------------------------------------------------------
и все!!!!!!!!!!!!!!
Ну он хоть бы ругнулся для приличия?!?!?! Чего делать-то??? HELP!!!!
...
Рейтинг: 0 / 0
Создание пользовательской функции в DB2 v8
    #32635540
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у меня ни разу в жизни ничего подобного не было...
а вызов функции проходит?
собственно: values db2admin.rndvarcahr(smallint(10)) ?
чего говорит?
...
Рейтинг: 0 / 0
Создание пользовательской функции в DB2 v8
    #32635555
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DBA2191E Ошибка выполнения SQL.

com.ibm.db.DataException: Ошибка
менеджера баз данных. : [IBM][CLI Driver][DB2/NT] SQL0440N Не
найдено авторизованной подпрограммы "RNDVARCHAR" типа
"FUNCTION" с совместимыми аргументами. SQLSTATE=42884



Вот такое пишет... Вполне логично, ведь функция-то не создалась(
...
Рейтинг: 0 / 0
Создание пользовательской функции в DB2 v8
    #32635566
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот зараза!!! А ведь в 7 версии твоя функция раПотает, возвращает :
1

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Phqghumeay



1 record(s) selected.
Может дело в DB2???
...
Рейтинг: 0 / 0
Создание пользовательской функции в DB2 v8
    #32635586
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
единственное что приходит на ум - переустанови DB2. у меня в 8-ке все работает отлично
...
Рейтинг: 0 / 0
Создание пользовательской функции в DB2 v8
    #32635624
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все... Я ее добил!!!
Спасибо за терпение и сочувствие....
Пока не запустил создание из командной строки а-ля db2cmd.exe....... ну и так далее, ни фиха не получалось.... Пол дня потратил
УРА!
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Создание пользовательской функции в DB2 v8
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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