powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / DW и процедура Oracle
25 сообщений из 65, страница 1 из 3
DW и процедура Oracle
    #34096686
Добрый день! Я новичек и в том и другом. Прочитал, что DW можно создавать на базе хранимых процедур. Вопрос: как должна выглядеть процедура для DW?
Например, есть таблица AAA с полем BBB. И надо прочитать все строки в DW.
Спасибо.
...
Рейтинг: 0 / 0
DW и процедура Oracle
    #34096717
boogiman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Учтите, что из Oracle процедура не возвращает select!!! Может проще в PB datastore сделать?
...
Рейтинг: 0 / 0
DW и процедура Oracle
    #34096739
Прошу прощения, может быть я неточно выразился. Имелось в виду DW - object, а не control.
...
Рейтинг: 0 / 0
DW и процедура Oracle
    #34096803
boogiman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это типа так создаётся динамически datastore с oracle

lds_rfc=Create datastore


new_sql = "select id, bil_kl, dat_begin, dat_end, bi_bank from " &
+"con.zap_w where status='n'"
new_syntax = SQLCA.SyntaxFromSQL(new_sql, &
'Style(Type=Form)', error_syntaxfromSQL)
if Len(error_syntaxfromSQL) > 0 THEN
f_insert_in_log(error_syntaxfromSQL)
return(0)
end if
lds_rfc.Create(new_syntax, error_create)
if Len(error_create) > 0 THEN
f_insert_in_log(error_create)
return(0)
end if
lds_rfc.SetTransObject(SQLCA)
ll_rows_rfc=lds_rfc.Retrieve()
...
Рейтинг: 0 / 0
DW и процедура Oracle
    #34096823
Как написать процедуру на PLSQL, чтобы она позволила создать DW - object
...
Рейтинг: 0 / 0
DW и процедура Oracle
    #34096908
boogiman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А стоит оно того извращаться? Oracle процедура хорошо фетчит параметры и массив, а вот селект это оччень геморойно (для datawindow нужен селект ).

Чем вам мой пример не нравится?
...
Рейтинг: 0 / 0
DW и процедура Oracle
    #34096922
Пример понятен и хорош, но мне хочется разобраться с DW на основе хранимых процедур
...
Рейтинг: 0 / 0
DW и процедура Oracle
    #34097044
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boogimanэто типа так создаётся динамически datastore с oracle
Хочу предупредить, что такой способ создания DataStore ведет к двухкратному исполнению sql запроса, что может быть крайне нежелательно в случае большого времени исполнения.
...
Рейтинг: 0 / 0
DW и процедура Oracle
    #34097063
AndrewN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Процедура должна быть следующего ввида:
Код: plaintext
1.
2.
3.
4.
5.
CREATE OR REPLACE PROCEDURE TEST_DWPROC(a in VARCHAR2,
c IN OUT sys_refcursor)
BEGIN
 ....
END TEST_DWPROC;

Короче, смысл в том, что оракловая процедура должна возвращать REF CURSOR.
Дерзайте. Задавайте вопросы.
...
Рейтинг: 0 / 0
DW и процедура Oracle
    #34097136
boogiman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну а так к примеру вызвать процедуру из PB (9)

transaction orac
orac = create transaction
orac.DBMS = "O84 Oracle8/8i (8.x.4+)"
orac.LogPass = 'slava'
orac.ServerName = "OW"
orac.LogId = "ggg"
orac.AutoCommit = True
orac.DBParm = "PBCatalogOwner='go'"

CONNECT USING oracul;
IF oracul.SQLCode <> 0 THEN
return
END IF

int nom1 =0
int nom2 =0
int nom3 =0
int nom4 =0

DECLARE proc_253 PROCEDURE FOR
F_253_start (fil => :fil,dat => :dat)
USING orac;

EXECUTE proc_253;
if oracul.SqlCode <> 0 then
RETURN
end if

FETCH proc_253 INTO :nom1, :nom2,:nom3,:nom4;
if oracul.SqlCode <> 0 then
orac.SQLErrText)
CLOSE proc_253;
RETURN
end if

DISCONNECT USING oracul;
destroy orac
...
Рейтинг: 0 / 0
DW и процедура Oracle
    #34097217
AndrewN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boogimanНу а так к примеру вызвать процедуру из PB (9)

transaction orac
orac = create transaction
orac.DBMS = "O84 Oracle8/8i (8.x.4+)"
orac.LogPass = 'slava'
orac.ServerName = "OW"
orac.LogId = "ggg"
orac.AutoCommit = True
orac.DBParm = "PBCatalogOwner='go'"

.............

DISCONNECT USING oracul;
destroy orac

ИМХО не о том и не про то. Не в кассу по-моему. :)

ЗЫ: Дай чтоль кусочек tnsnames.ora файла своего сервера для полного набора. :)
...
Рейтинг: 0 / 0
DW и процедура Oracle
    #34097400
to AndrewN
Вот я и не знаю, как это написать. А спросить не у кого. Подскажите пожалуйста на примере таблицы AAA с полем BBB Varchar2(10)
...
Рейтинг: 0 / 0
DW и процедура Oracle
    #34097937
AndrewN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
CREATE OR REPLACE PROCEDURE TEST_DWPROC(c IN OUT sys_refcursor)
BEGIN
 open c for select BBB from AAA;
END TEST_DWPROC;
...
Рейтинг: 0 / 0
DW и процедура Oracle
    #34099542
Спасибо огромное!
...
Рейтинг: 0 / 0
DW и процедура Oracle
    #34099641
Вот только еще вопрос. А каким образом курсор закроется после того как DW или DS будет использовано? Нужны ли какие-либо дополнительные действия?
...
Рейтинг: 0 / 0
DW и процедура Oracle
    #34099884
Геннадич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
DW и процедура Oracle
    #34100217
AndrewN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИМХО, ПБ должен сам закрыть курсор. А закрыть его какими либо другими средствами не получится из ПБ. По крайней мере я не знаю способов. Это работало. Более того, это описано в каких-то White-papers по ПБ. Более точно не могу сказать, не помню уже. Поищите на www.sybase.com :)

Ну и конечно есть ещё один способ. Сайбейз как-то сделал оракловый пакет-враппер. Это крыжик в драйвере "PBDBMS". Я им никогда не пользовался и думаю мало кто пользовался вообще, по причине слабодокументированности и т.п.

Итог: Использовать ref cursor, а всё остальное оставить на откуп ПБ.
...
Рейтинг: 0 / 0
DW и процедура Oracle
    #34100245
Спасибо большое. Я и сам думал, что PB должен сам, но были сомнения.
...
Рейтинг: 0 / 0
DW и процедура Oracle
    #34101523
Oleg1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AndrewNНу и конечно есть ещё один способ. Сайбейз как-то сделал оракловый пакет-враппер. Это крыжик в драйвере "PBDBMS". Я им никогда не пользовался и думаю мало кто пользовался вообще, по причине слабодокументированности и т.п.
А там и документировать нечего. Мы пользовались этим пакетом. Нормально все работает. Но по большому счету, при работе с Ораклом ни такие извращения, ни возврат курсора не нужны. Это все от MSSQL идет, IMHO.
...
Рейтинг: 0 / 0
DW и процедура Oracle
    #34102248
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oleg1Но по большому счету, при работе с Ораклом ни такие извращения, ни возврат курсора не нужны. Это все от MSSQL идет, IMHO.Да нет, не все так линейно. Например, отчеты на процедурах гораздо удобнее в сопровождении.
...
Рейтинг: 0 / 0
DW и процедура Oracle
    #34103437
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PL99 Oleg1Но по большому счету, при работе с Ораклом ни такие извращения, ни возврат курсора не нужны. Это все от MSSQL идет, IMHO.Да нет, не все так линейно. Например, отчеты на процедурах гораздо удобнее в сопровождении.
У меня есть сомнения в упомянутом удобстве сопровождения.

В чем разница между DW с процедурой с курсором и просто с запросом?
И там и там надо написать запрос, только в первом случае запрос формируется на серверной стороне, а во втором на клиентской.
Причем ничто не мешает и во втором случае хранить запрос в БД.

Различия в следующем:
DW на ХП - безопасность, выполняется только то, что разрешено сервером.

DW на SELECT - гибкость, возможность динамически сформировать запрос на клиенте.

Лично мне удобнее второе.
...
Рейтинг: 0 / 0
DW и процедура Oracle
    #34103670
AndrewN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Некоторые вещи либо нельзя сделать одним селектом либо делаются неэффективно. А в процедуре - ваяй что хочешь. В этом очень большое удобство.
...
Рейтинг: 0 / 0
DW и процедура Oracle
    #34103879
Фотография AIZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зато в процедурах можно использовать связываемые переменные, что влияет на производительность. Да и сам запрос можно выполнять динамически, т.е передавать его в параметрах вызова.
...
Рейтинг: 0 / 0
DW и процедура Oracle
    #34103892
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndrewNНекоторые вещи либо нельзя сделать одним селектом либо делаются неэффективно. А в процедуре - ваяй что хочешь. В этом очень большое удобство.
Все равно в конце процедуры будет SELECT.
А подготовку можно и с клиента сделать.
...
Рейтинг: 0 / 0
DW и процедура Oracle
    #34105943
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyВ чем разница между DW с процедурой с курсором и просто с запросом?
И там и там надо написать запрос, только в первом случае запрос формируется на серверной стороне, а во втором на клиентской.
Причем ничто не мешает и во втором случае хранить запрос в БД.Формирование запроса на серверной стороне позволяет не тыкаться лишний раз клиентом, типа, оптимизируем траффик :-))
Anatoly MoskovskyРазличия в следующем:
DW на ХП - безопасность, выполняется только то, что разрешено сервером.

DW на SELECT - гибкость, возможность динамически сформировать запрос на клиенте.Безопасность независимо от того, как сформировано DW, определяется сервером, иначе это не безопасность, а так, только детей пугать :-)

Anatoly MoskovskyЛично мне удобнее второе.На клиенте динамически формировать запрос ничуть не удобнее, чем на сервере, по мне так как раз наоборот, но тут,что называется, на вкус и цвет... :-) Кроме того, процедура позворяет написать статический код, который, хотя и выглядит ужасно, но зато обеспечивает требуемую производительность.
...
Рейтинг: 0 / 0
25 сообщений из 65, страница 1 из 3
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / DW и процедура Oracle
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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