Гость
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Создание пользовательской функции в DB2 v8 / 15 сообщений из 15, страница 1 из 1
04.08.2004, 12:40
    #32634820
TORT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание пользовательской функции в DB2 v8
Еще одна проблема...
В версии 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
04.08.2004, 13:07
    #32634916
gardenman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание пользовательской функции в DB2 v8
Код: 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
04.08.2004, 15:04
    #32635212
TORT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание пользовательской функции в DB2 v8
Спасибо за ответ в любом случае
А первый фрагмент - это про что или где???
...
Рейтинг: 0 / 0
04.08.2004, 15:15
    #32635242
gardenman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание пользовательской функции в DB2 v8
1 фрагмент - это makefile, который используется утилитой make или nmake)
полезно знать такие вещи, а также CVS
...
Рейтинг: 0 / 0
04.08.2004, 15:19
    #32635246
TORT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание пользовательской функции в DB2 v8
Еще один тупой вопрос, надеюсь последний!:)
А куда ентот файл девать??? Его создавать что ли???
...
Рейтинг: 0 / 0
04.08.2004, 16:00
    #32635328
gardenman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание пользовательской функции в DB2 v8
создешь файлs с именами:
1) makefile
2) ft.sqx

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

вводишь:
nmake

после чего созается funcs1.dll и копируется в каталог D:\SQLLIB\FUNCTION
...
Рейтинг: 0 / 0
04.08.2004, 16:23
    #32635375
TORT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание пользовательской функции в DB2 v8
Фигня какая-то...
dll-собрал.... в комцентре запускаю create function... и ноль эмоций
Ни ошибок, ни результатов Чего может быть???
...
Рейтинг: 0 / 0
04.08.2004, 16:45
    #32635443
TORT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание пользовательской функции в DB2 v8
Попробовал эту dll подключиьт к 7 версии, тож заработала(
Почему же на 8-ке не получается????
...
Рейтинг: 0 / 0
04.08.2004, 16:54
    #32635470
gardenman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание пользовательской функции в DB2 v8
Я эту dll обкатывал и на 8.1 и на 8.2..
...
Рейтинг: 0 / 0
04.08.2004, 17:06
    #32635519
TORT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание пользовательской функции в DB2 v8
В общем создал твою 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
04.08.2004, 17:12
    #32635540
gardenman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание пользовательской функции в DB2 v8
у меня ни разу в жизни ничего подобного не было...
а вызов функции проходит?
собственно: values db2admin.rndvarcahr(smallint(10)) ?
чего говорит?
...
Рейтинг: 0 / 0
04.08.2004, 17:19
    #32635555
TORT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание пользовательской функции в DB2 v8
DBA2191E Ошибка выполнения SQL.

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



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

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

Phqghumeay



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


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