powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / EXECUTE IMMEDIATE proc и in out переменные
15 сообщений из 15, страница 1 из 1
EXECUTE IMMEDIATE proc и in out переменные
    #35303073
JUNIORik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть процедура
proc(
id in number,
retrn out number
);

Конструкция
EXECUTE IMMEDIATE "proc(1);"
не подходит, т. к. выдается ошибка
wrong types or numbers.

Как обработать uot переменную.
...
Рейтинг: 0 / 0
EXECUTE IMMEDIATE proc и in out переменные
    #35303077
JUNIORik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пишите наверно сюда.
...
Рейтинг: 0 / 0
EXECUTE IMMEDIATE proc и in out переменные
    #35303125
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JUNIORikЕсть процедура
proc(
id in number,
retrn out number
);

Конструкция
EXECUTE IMMEDIATE "proc(1);"
не подходит, т. к. выдается ошибка
wrong types or numbers.

Как обработать uot переменную.
Есть причина, по которой вы не используете RPC?
...
Рейтинг: 0 / 0
EXECUTE IMMEDIATE proc и in out переменные
    #35303161
JUNIORik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PL99Есть причина, по которой вы не используете RPC?

Да, есть.
Если вы работали с Oracle , то
знаете, что есть такие коллекции.
И вот такую коллекцию я формирую на стороне клиента
и передаю параметром
в процедуру.
...
Рейтинг: 0 / 0
EXECUTE IMMEDIATE proc и in out переменные
    #35306366
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JUNIORik PL99Есть причина, по которой вы не используете RPC?

Да, есть.
Если вы работали с Oracle , то
знаете, что есть такие коллекции.
И вот такую коллекцию я формирую на стороне клиента
и передаю параметром
в процедуру.Не вижу связи.
Приведите, хотя бы, спецификацию функции
...
Рейтинг: 0 / 0
EXECUTE IMMEDIATE proc и in out переменные
    #35306681
JUNIORik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
оЙ, ЕНТЕР НАЖАЛА

В базе

Код: plaintext
1.
2.
3.
create type tab_rec as table of varchar( 15 );

create or reaplace proc(in_tab   in  tab_rec, out_parm  out  integer)
...

На клиенте
(очевидно, что на клиенте
такого типа tab_rec нет)
используем execute immediate.

ls_sql = "DECLARE ";
ls_sql = ls_sql + "type tab_rec IS table of varchar(15); ";
ls_sql = ls_sql + "in_tab tab_rec; ";
ls_sql = ls_sql + "out_parm integer; ";
ls_sql = ls_sql + "BEGIN ";
ls_sql = ls_sql + "proc(in_tab, out_parm); ";
ls_sql = ls_sql + "END; ";
EXECUTE IMMEDIATE ls_sql;
Вопрос как обработать out_parm?
EXECUTE IMMEDIATE
...
Рейтинг: 0 / 0
EXECUTE IMMEDIATE proc и in out переменные
    #35307107
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JUNIORik...
На клиенте
(очевидно, что на клиенте
такого типа tab_rec нет)
используем execute immediate.
...
хм... круто.

Код: plaintext
1.
//объявление
subroutine myProcedure (string in_tab[], ref integer out_parm) RPCFUNC ALIAS FOR "myOwner.myProcedure"

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
//Вызов
integer li_Ret
string inArray[]
sqlca.myProcedure (inArray[], li_Ret)
if sqlca.sqlcode <  0  then
//обработка
else
messageBox ("li_Ret", string(li_ret))
end if
...
Рейтинг: 0 / 0
EXECUTE IMMEDIATE proc и in out переменные
    #35307111
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то похожее обсуждалось
-----------------------------------------------------------------------------
Главная деталь любой машины - голова ее владельца
...
Рейтинг: 0 / 0
EXECUTE IMMEDIATE proc и in out переменные
    #35307364
JUNIORik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PL99//объявление
subroutine myProcedure (string in_tab[], ref integer out_parm) RPCFUNC ALIAS FOR "myOwner.myProcedure"

На ORACLE так нельзя писать,
если я не права киньте в меня камень.
...
Рейтинг: 0 / 0
EXECUTE IMMEDIATE proc и in out переменные
    #35307376
JUNIORik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, я в смысле что Oracle не воспримет массив (string in_tab[]).
...
Рейтинг: 0 / 0
EXECUTE IMMEDIATE proc и in out переменные
    #35307437
пробуй к своему ls_sql добавить

ls_sql += 'select out_parm;'

и запускать через курсор.
...
Рейтинг: 0 / 0
EXECUTE IMMEDIATE proc и in out переменные
    #35308712
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JUNIORik PL99//объявление
subroutine myProcedure (string in_tab[], ref integer out_parm) RPCFUNC ALIAS FOR "myOwner.myProcedure"

На ORACLE так нельзя писать,
если я не права киньте в меня камень.Вы пробовали? Получили ошибку? Или просто Вам так кажется?

На всякий случай, все давно придумано
...
Рейтинг: 0 / 0
EXECUTE IMMEDIATE proc и in out переменные
    #35309213
gust-dust
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PL99 JUNIORik PL99//объявление
subroutine myProcedure (string in_tab[], ref integer out_parm) RPCFUNC ALIAS FOR "myOwner.myProcedure"

На ORACLE так нельзя писать,
если я не права киньте в меня камень.Вы пробовали? Получили ошибку? Или просто Вам так кажется?

На всякий случай, все давно придумано

И думать нечего - не работает. Так можно писать только если процедура ничего не возвращает. И в примерах по ссылке этой ситуации нет.

В хелпе есть топик про работу с процедурами которые имееют out аргументы. С такой процедурой надо работать как с курсором. Даешь declare, затем execute, затем fetch into, после close.
Чтобы все было чисто надо расставить аргументы процедуры так, чтобы все out были в конце. В declare их не пишешь, а в fetch будут только они.
...
Рейтинг: 0 / 0
EXECUTE IMMEDIATE proc и in out переменные
    #35310130
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gust-dustИ думать нечего - не работает. Я не поленился написать пример
Oracle:
Код: plaintext
1.
2.
3.
4.
5.
6.
BANNER                                                          
----------------------------------------------------------------
Oracle Database 10g Release  10 . 2 . 0 . 1 . 0  - Production             
PL/SQL Release  10 . 2 . 0 . 1 . 0  - Production                          
CORE	 10 . 2 . 0 . 1 . 0 	Production                                      
TNS for  32 -bit Windows: Version  10 . 2 . 0 . 1 . 0  - Production         
NLSRTL Version  10 . 2 . 0 . 1 . 0  - Production 
Код: plaintext
CREATE TABLE T$VA (F1 VARCHAR2( 20 ));
Код: plaintext
1.
2.
3.
4.
CREATE OR REPLACE PACKAGE Testinout AS
TYPE ltVarcharArray IS TABLE OF VARCHAR2( 100 ) INDEX BY BINARY_INTEGER;
PROCEDURE Test_Inout (aIN IN  ltVarcharArray, aiRet OUT NUMBER );
END Testinout;
/
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
CREATE OR REPLACE PACKAGE BODY Testinout AS
PROCEDURE TEST_INOUT (aIN IN ltVarcharArray, aiRet OUT NUMBER ) IS
BEGIN
    FORALL indx IN aIN.FIRST .. aIN.LAST
       INSERT INTO T$VA
          ( F1 )
          VALUES
          (aIN (indx));
aiRet :=  1 ;
   EXCEPTION
     WHEN OTHERS THEN
aiRet := - 1 ;
       RAISE;
END TEST_INOUT;
END testinout;
/

PB:
Код: plaintext
Version  7 . 0 . 3  build  10312 
Код: plaintext
1.
2.
3.
//Объявление
subroutine TEST_INOUT(string aIN[], ref double aiRet) RPCFUNC ALIAS FOR "EXDATA.TESTINOUT.TEST_INOUT"
//Не забудьте заменить EXDATA на вашего владельца пакета
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
//Вызов
string laIN[]
double li_Ret= 0 
string ls_Err

laIN [ 1 ] = '1'
laIN [ 2 ] = '2'
sqlca.TEST_INOUT ( laIN, li_Ret)
if sqlca.sqlcode =  0  then 
	commit;
	messagebox ("", string(li_ret))
else
	ls_Err = sqlca.SQLErrText
	rollback;
	messagebox ("", ls_Err)
end if
...
Рейтинг: 0 / 0
EXECUTE IMMEDIATE proc и in out переменные
    #35314943
JUNIORik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PL99...
Круто
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / EXECUTE IMMEDIATE proc и in out переменные
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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