powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Bind Variable: PB --> Oracle
20 сообщений из 20, страница 1 из 1
Bind Variable: PB --> Oracle
    #32961095
MikeV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет всем!
PB 9.0.1 Build 6533, Oracle 9.2.0.6
Использую в своем PB-приложении оракловый пакет DBMS_APPLICATION_INFO
для указания, какая времяемкая операция выполняется в БД в данный момент:

action1 = "Расчет оборотки"
as_sql = begin DBMS_APPLICATION_INFO.SET_ACTION('" + action1 + "'); end;"
execute immediate :as_sql;

Все работает, но DBA наезжает: так нехорошо, потому что без использования
Bind Variable для указания операции в Shared Pool Area Oracle хранится куча одинаковых текстов begin DBMS_APPLICATION_INFO.SET_ACTION...
Переделал вызов на динамический SQL format 2:

PREPARE SQLSA FROM "begin DBMS_APPLICATION_INFO.SET_ACTION(?); end;";
EXECUTE SQLSA USING :action1;

Опять все работает, но PB передает ораклу по-прежнему SQL Statement без Bind Variable?!

Помогите, плз! Заранее спасибо.
...
Рейтинг: 0 / 0
Bind Variable: PB --> Oracle
    #32961141
Фотография AIZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй DbParm=DisableBind=1 в коннекте
...
Рейтинг: 0 / 0
Bind Variable: PB --> Oracle
    #32961178
MikeV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 AIZ:
Уже пробовал - не помогает.
...
Рейтинг: 0 / 0
Bind Variable: PB --> Oracle
    #32962174
Фотография AIZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так может проще написать функцию БД и вызывать ее передавая соответствующий параметр?
...
Рейтинг: 0 / 0
Bind Variable: PB --> Oracle
    #32962602
Геннадич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AIZПопробуй DbParm=DisableBind=1 в коннекте
Не путайте Божий дар с яичницей, вот:

RTFMDescription

For those DBMSs that support bind variables, PowerBuilder binds input parameters to a compiled SQL statement by default. The DisableBind parameter allows you to specify whether you want to disable this default binding.
When you set DisableBind to 1 to disable the binding, PowerBuilder replaces the input variable with the value entered by the application user or specified in a PowerBuilder script.
...
Рейтинг: 0 / 0
Bind Variable: PB --> Oracle
    #32962819
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MikeVВсе работает, но DBA наезжает: так нехорошо, потому что без использования Bind Variable для указания операции в Shared Pool Area Oracle хранится куча одинаковых текстов begin BMS_APPLICATION_INFO.SET_ACTION...
...Как это ни прискорбно, но, по большому счету, DBA прав...

Почему вы не хотите использовать RPC-вызов?

Код: plaintext
1.
// объявление
SUBROUTINE set_action(string action_name) RPCFUNC ALIAS FOR "SYS.dbms_application_info.set_action"

строка trans_object.DBParm не должна запрещать использование bind-переменных, т.е. DisableBind=0 (по умолчанию)

Код: plaintext
1.
2.
// вызов
trans_object.Set_Action("My Action")

Честно говоря, не проверял, т.к. эти проблемы решаются простым наращиванием железа, а разрабатывать мне удобнее именно с DisableBind :-), но думаю, что это может помочь...
...
Рейтинг: 0 / 0
Bind Variable: PB --> Oracle
    #32963058
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 PL99

Как это ни прискорбно, но, по большому счету, DBA прав

Почему прискорбно? Различающиеся запросы лишают смысл применение library cache, который как раз и создан для повторного выполнения запросов

Честно говоря, не проверял, т.к. эти проблемы решаются простым наращиванием железа, а разрабатывать мне удобнее именно с DisableBind :-), но думаю, что это может помочь...

Во-первых, наращивание железа - не всегда простой и доступный путь. Во-вторых, согласно концепции Oracle, оптимизация приложений (к которому относится и использование bind var) - это то, что дает макс. выигрыш в производительности и с чего следует начинать любую оптимизацию при неудовлетворительных скоростных характеристиках

PS В Oracle есть еще параметр CURSOR_SHARING, который может отчасти решить проблему, но использование bind - верный путь
...
Рейтинг: 0 / 0
Bind Variable: PB --> Oracle
    #32964154
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tru552 PL99

Как это ни прискорбно, но, по большому счету, DBA прав

Почему прискорбно?Это плохо прикрытый наезд на DBA :-)


tru55 Честно говоря, не проверял, т.к. эти проблемы решаются простым наращиванием железа, а разрабатывать мне удобнее именно с DisableBind :-), но думаю, что это может помочь...

Во-первых, наращивание железа - не всегда простой и доступный путь. Наверное, это в самом деле так... Но, до сих пор, в моей практике, стоимость оптимизации (читай стоимость времени разработчиков) всегда была в разы выше стоимости апгрейда...

tru55Во-вторых, согласно концепции Oracle, оптимизация приложений (к которому относится и использование bind var) - это то, что дает макс. выигрыш в производительности и с чего следует начинать любую оптимизацию при неудовлетворительных скоростных характеристикахТоже согласен - начинать надо с оптимизации приложения. А вот оптимизацию приложения надо начинать с проектирования правильной структуры данных... Все остальные способы оптимизации вряд ли влияют более чем на 10-15% общей производительности

Все IMHO, разумеется
...
Рейтинг: 0 / 0
Bind Variable: PB --> Oracle
    #32964402
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это плохо прикрытый наезд на DBA

Зачем же так с DBA (как я есть "в одном флаконе")


Наверное, это в самом деле так... Но, до сих пор, в моей практике, стоимость оптимизации (читай стоимость времени разработчиков) всегда была в разы выше стоимости апгрейда...

1. Зависит от мощности сервера (чем выше мощность, тем дороже)
2. Дык разработчики часто свои, им и так зарплату платят, а деньги на железо надо еще выбить


Тоже согласен - начинать надо с оптимизации приложения. А вот оптимизацию приложения надо начинать с проектирования правильной структуры данных... Все остальные способы оптимизации вряд ли влияют более чем на 10-15% общей производительности

Структура данных, безусловно, влияет (правда, проценты никогда не считал). Но есть и другие немаловажные факторы, например, оптимизация запросов и др...
...
Рейтинг: 0 / 0
Bind Variable: PB --> Oracle
    #32964519
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
offtop
tru55 Это плохо прикрытый наезд на DBA

Зачем же так с DBA (как я есть "в одном флаконе")

Больше не буду :-)


tru55 Наверное, это в самом деле так... Но, до сих пор, в моей практике, стоимость оптимизации (читай стоимость времени разработчиков) всегда была в разы выше стоимости апгрейда...

1. Зависит от мощности сервера (чем выше мощность, тем дороже)
2. Дык разработчики часто свои, им и так зарплату платят, а деньги на железо надо еще выбить

Давайте возьмем российский сервер. Самый дорогой из тех, на которые указана цена, стоит 10532$ - т.е. 1.5 - 2 человеко-месяца по весьма скромным для Москвы расценкам...
Если проект небольшой, скажем, 1 человеко-год, то цена сервера сопоставима с ценой разработки, но для такого проекта/предприятия и сервер, скорее всего, подойдет попроще...

tru55 Тоже согласен - начинать надо с оптимизации приложения. А вот оптимизацию приложения надо начинать с проектирования правильной структуры данных... Все остальные способы оптимизации вряд ли влияют более чем на 10-15% общей производительности

Структура данных, безусловно, влияет (правда, проценты никогда не считал). Но есть и другие немаловажные факторы, например, оптимизация запросов и др...Если приложение грамотно спроектировано, то для того, чтобы написать неоптимальный запрос, придется потрудиться...
endoff
...
Рейтинг: 0 / 0
Bind Variable: PB --> Oracle
    #32965983
MikeV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 PL99:
Спасибо! RPC-вызов - то, что надо!
...
Рейтинг: 0 / 0
Bind Variable: PB --> Oracle
    #32971591
MikeV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В продолжение темы :)
Неприятно удивил метод dw_1.ReselectRow(row)
Он, редиска, формирует фразу WHERE без всяких Bind Variables:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
SELECT "BAL", "DATA", "PACH", "NOMZAP", "NDOK", "CBAL", "CNOM", "COB", "DBAL", 
"DNOM", "DOB", "Q", "SM", "PR", "TIP", "SHZ", "DOPOL", "REZ", "NAME", "CENA", 
"TDOK", "T06", "T07", "N06", "N07", "D06", "D08", "N08", "N09", "N10", "N12", "N13", 
"N14", "T08", "T09", "T10", "T11", "T12", "T13", "T14", "T15", "N15", "N16", "N17", 
"N18", "N19", "N20", "N23", "D09", "D10", "N21", "D12", "N22", "T16", "T17", "T18", 
"N24", "N25", "N26", "N27", "N28", "N29", "N30" 
FROM "CE2FDNV" WHERE "BAL" =  15  AND "DATA" =  39  AND "PACH" =  1  AND "NOMZAP" =  1976 

Помогите, плз! Может, кто-то подскажет, как с этим сбороться?
...
Рейтинг: 0 / 0
Bind Variable: PB --> Oracle
    #32980175
MikeV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нашел-таки ответ на свой последний вопрос:
вместо
ReselectRow(row)
пишем
execute immediate 'alter session set cursor_sharing=force';
ReselectRow(row)
execute immediate 'alter session set cursor_sharing=exact';
Между прочим, этой нехитрой штукой мы сэкономили 164 Mb в shared_pool
...
Рейтинг: 0 / 0
Bind Variable: PB --> Oracle
    #32992309
pbdeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sorry, I do not have Russian keyboard at work, but I really need help.
I have to run followed code within UserObject that I created.
I have unknown amount of retrieval arguments. That is why I need
Use Describe SQLSA Into SQLDA;

Any suggestions would be highly appreciated. I am stuck. Thank you

Here is the code that I ran:
ls_sql = "select distinct multiplier from multiplier where contract_nmbr = ?"
SQLCA.dbParm = "DisableBind = 1"
Prepare SQLSA From :ls_sql using sqlca;
Describe SQLSA Into SQLDA;

If SQLCA.SQLCode <> 0 then
MessageBox("Describe failed", SQLCA.SQLErrText)

/////ERROR APPEAR HERE as followed


/////////////////////////////////////////////////////// below code did not run
return ""
end if
Declare my_cur Dynamic CURSOR FOR SQLSA ;
……

Thank you
...
Рейтинг: 0 / 0
Bind Variable: PB --> Oracle
    #32992430
Фотография Ikar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pbdeveloperSorry, I do not have Russian keyboard ...
...
Рейтинг: 0 / 0
Bind Variable: PB --> Oracle
    #32994263
pbdeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо
Попробую перевести

B невидiмом обьекте мне нужно запустить следующий коде:

ls_sql = "select distinct multiplier from multiplier where contract_nmbr = ?"
SQLCA.dbParm = "DisableBind = 1"
Prepare SQLSA From :ls_sql using sqlca;

т.к мне не известно количество аргументов мне необходимо
запустить Describe SQLSA Into SQLDA;:

Describe SQLSA Into SQLDA;

Здесь появляется ошибка : ORA-01008: not all variables bound
что значит DisableBind = 0 мне нужно изменить значенuе в динамическом режиме на DisableBind = 1. Я работаю в PowerBuiler 9.02 build 7610, Oracle 8i.

Буду очень признательна за помощь. Спасибо
...
Рейтинг: 0 / 0
Bind Variable: PB --> Oracle
    #32994307
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pbdeveloperls_sql = "select distinct multiplier from multiplier where contract_nmbr = ?"
Где в этом sql упомянутые "неизвестное количество аргументов" ?
...
Рейтинг: 0 / 0
Bind Variable: PB --> Oracle
    #32994328
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Describe SQLSA Into SQLDA;
Здесь появляется ошибка : ORA-01008: not all variables bound
По идее на этапе Describe еще не требуется binding. Так что скорее всего ошибка возникает открытии курсора через OPEN из-за того что неверно указан список bind-переменных.
Надо открывать курсор так:
Код: plaintext
OPEN DYNAMIC c using :li_contract_nmbr ;
...
Рейтинг: 0 / 0
Bind Variable: PB --> Oracle
    #32994357
pbdeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Согласно документацуии :

Accessing attribute information
When a statement is described into a DynamicDescriptionArea, this information is available to you in the attributes of that DynamicDescriptionArea variable:

Information Attribute
Number of input parameters NumInputs
Array of input parameter types InParmType
Number of output parameters NumOutputs
Array of output parameter types OutParmType

NumInputs Я могу витащить только после Describe.
Я написала просто пример на самом деле Я не снаю сколько аргументов
будет
...
Рейтинг: 0 / 0
Bind Variable: PB --> Oracle
    #32994462
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотрите на этот работающий пример, может быть он поможет разобраться, что Вы делаете не так.
Код: 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.
35.
36.
String ls_sql
Dec{ 0 } ld_id =  101 
DECLARE c DYNAMIC CURSOR FOR sqlsa ;

ls_sql = "select lname from customer where id = ?"
PREPARE sqlsa FROM :ls_sql ;
If sqlca.SQLCode <>  0  Then
   MessageBox("PREPARE error", sqlca.SQLErrText)
   Return
End If
DESCRIBE sqlsa INTO sqlda ;
If sqlda.NumInputs =  1  Then
   sqlda.SetDynamicParm( 1 , ld_id)
Else
   MessageBox("BIND error", "NumInputs <> 1")
   Return
End If

OPEN DYNAMIC c USING DESCRIPTOR sqlda ;

FETCH c USING DESCRIPTOR sqlda ;
If sqlca.SQLCode <>  0  Then
   MessageBox("FETCH error", sqlca.SQLErrText)
Else
   If sqlda.NumOutputs >=  1  Then
      If sqlda.OutParmType[ 1 ] = TypeString! Then
         MessageBox("Result", sqlda.GetDynamicString( 1 ))
      Else
         MessageBox("Result error", "Not supported")
      End If
   Else
      MessageBox("Result error", "NumOutputs < 1")
   End If
End If

CLOSE c;

PS. Кстати, "DisableBind=X" на dynamic SQL никак не влияет. Этот параметр используется при генерации запросов в DW и embedded SQL.
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Bind Variable: PB --> Oracle
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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