powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Проблема вызова ХП Оракла при передаче массива структур
8 сообщений из 8, страница 1 из 1
Проблема вызова ХП Оракла при передаче массива структур
    #38037202
GooSergey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток!
Может кто-нибудь сталкивался с такой проблемой:

Есть ХП на Оракле (все что сообщили о ней ее разработчики привожу ниже):

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
 
message
 (
 out_error OUT INTEGER, 
 client_absid IN INTEGER,
 document_subject IN VARCHAR, 
 document_text IN VARCHAR, 
 document_attachedfiles IN FILEINF_T,
 p_client_abs IN VARCHAR  
)

FILEINF_T AS OBJECT (
attachedfiles_name VARCHAR(255)
, attachedfiles_val BLOB      
)



Объявил local external function:
Код: sql
1.
SUBROUTINE message ( ref long out_error, long client_absid, string document_subject,string document_text, readonly FILEINF_T document_attachedfiles[], string client_abs) RPCFUNC ALIAS FOR "message"



В проекте создана соответствующая структура FILEINF_T
В скрипте вызываю ХП следующим образом (тестовый вариант):

Код: sql
1.
2.
3.
4.
5.
6.
FILEINF_T files[]
FILEINF_T file
file.attachedfiles_name = "test"
files[1] = file
....
this.message ( ref ll_return, pclient_absid, pdocument_subject, pdocument_text,  files, pclient_abs)


В ответ получаю ошибку "Unsupported argument type in DLL function message at line 23 in function uf_ib_messagefile of object ..."

Подскажите в чем может быть проблема?
...
Рейтинг: 0 / 0
Проблема вызова ХП Оракла при передаче массива структур
    #38037438
GooSergey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добавлю:
1 Power Builder 11.5.1
2 описание структуры
Код: sql
1.
2.
3.
4.
global type fileinf_t from structure
  string        attachedfiles_name
  blob      attachedfiles_val
 end type


3. Подключение к Оракл пробовал через DBMS=ORA Oracle и O10 Oracle10g (10.1.0)
...
Рейтинг: 0 / 0
Проблема вызова ХП Оракла при передаче массива структур
    #38037948
Фотография urvas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подозреваю, что Oracle не желает переваривать массив структур, который Вы ему скармливаете. Попробуйте передать не массив, а единичную структуру.
...
Рейтинг: 0 / 0
Проблема вызова ХП Оракла при передаче массива структур
    #38038184
GooSergey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пробовал результат тот же(
...
Рейтинг: 0 / 0
Проблема вызова ХП Оракла при передаче массива структур
    #38038308
Фотография urvas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GooSergey,
Описание такое ?
SUBROUTINE message ( ref long out_error, long client_absid, string document_subject,string document_text, readonly FILEINF_T document_attachedfiles , string client_abs) RPCFUNC ALIAS FOR "message"

А local external function описана в объекте транзакции (sqlca)?
...
Рейтинг: 0 / 0
Проблема вызова ХП Оракла при передаче массива структур
    #38038402
GooSergey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
urvas,
Да
SUBROUTINE message ( ref long out_error, long client_absid, string document_subject, string document_text, readonly fileinf_t document_attachedfiles, string client_abs) RPCFUNC ALIAS FOR "message"

экспериментировал как с [] так и с readonly
Описание как и вызов расположены в частях объекта унаследованного от transaction
...
Рейтинг: 0 / 0
Проблема вызова ХП Оракла при передаче массива структур
    #38038779
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GooSergey...
В ответ получаю ошибку "Unsupported argument type in DLL function message at line 23 in function uf_ib_messagefile of object ..."

Подскажите в чем может быть проблема?Ну, эхотаг какбэ намекает, что не может передать параметр типа структура.
Теперь, если не шашечки, а ехать, то надо сделать обертку примерно так:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
CREATE OR REPLACE PROCEDURE PB_MESSAGE 
 (
 out_error OUT INTEGER, 
 client_absid IN INTEGER,
 document_subject IN VARCHAR, 
 document_text IN VARCHAR, 
 daf_attachedfiles_name IN VARCHAR2,
 daf_attachedfiles_val IN BLOB,
 p_client_abs IN VARCHAR 
) 
IS
FILEINF FILEINF_T;
BEGIN
   FILEINF := FILEINF_T(daf_attachedfiles_name, daf_attachedfiles_val);
	MESSAGE( 
 out_error , 
 client_absid ,
 document_subject , 
 document_text , 
 FILEINF,
 p_client_abs  
) ;
END PB_MESSAGE;
/



Тестовая код исходной процедуры:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
CREATE OR REPLACE PROCEDURE message
 (
 out_error OUT INTEGER, 
 client_absid IN INTEGER,
 document_subject IN VARCHAR, 
 document_text IN VARCHAR, 
 document_attachedfiles IN FILEINF_T,
 p_client_abs IN VARCHAR 
) IS
BEGIN
   out_error := 0;
   EXCEPTION
     WHEN OTHERS THEN
		out_error := SQLCODE;
       RAISE;
END message;
/



Объявление local external function:
Код: vbnet
1.
2.
3.
subroutine PB_MESSAGE(ref long OUT_ERROR,long CLIENT_ABSID,string DOCUMENT_SUBJECT, &
string DOCUMENT_TEXT,string DAF_ATTACHEDFILES_NAME,blob DAF_ATTACHEDFILES_VAL, &
string P_CLIENT_ABS) RPCFUNC ALIAS FOR "PB_MESSAGE"



Тестовый код:
Код: vbnet
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.
n_tr tr
tr = create n_tr
tr.DBMS = "O90 Oracle9i (9.0.1)"
tr.LogPass = "***"
tr.ServerName = "ATDEV"
tr.LogId = "***"
tr.AutoCommit = False

connect using tr;

if tr.SQLCODE <> 0 THEN
	MessageBox ("", tr.SQLErrText)
	return
end if;

long ll_return = -1, pclient_absid
string pdocument_subject, pdocument_text
FILEINF_T files
string pclient_abs
files.attachedfiles_name = "test"
files.attachedfiles_val = blob("test")
tr.PB_MESSAGE(ll_return, pclient_absid, pdocument_subject, pdocument_text,  files.attachedfiles_name, files.attachedfiles_val, pclient_abs)
if tr.SQLCODE <> 0 THEN
	MessageBox (string(ll_return), tr.SQLErrText)
	return
end if;

MessageBox ("Success", ll_return)



PB 9.0.3 build 8836
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select BANNER from v$version;

BANNER                                                                          
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production          
PL/SQL Release 11.2.0.1.0 - Production                                          
CORE	11.2.0.1.0	Production                                                      
TNS for Linux: Version 11.2.0.1.0 - Production                                  
NLSRTL Version 11.2.0.1.0 - Production                                          

5 rows selected.


Oracle client 10.2.0.1
...
Рейтинг: 0 / 0
Проблема вызова ХП Оракла при передаче массива структур
    #38039628
GooSergey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PL99, Спасибо огромное!
К сожалению доступа к серверу Oracle не имею, но уже написал запрос на изменение данной процедуры.
На SCN подтверждают что из ПБ переменную типа Object передать нельзя.
http://scn.sap.com/thread/3265959
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Проблема вызова ХП Оракла при передаче массива структур
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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