Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Dynamic Sql и апостроффффф!  [new]
Vit_URAZOV
Member

Откуда:
Сообщений: 84
сушествет проблема может подскажите...
Необходимо в строке собрать запрос чтобы открыть в ref cursor
в переменке собираю запрос
-мне заранеее не известно количество критериев
sqlquiry:='select field1 from table where field2 like ''%'||Value1||'%''||' and field3 like ''%'||Value2||'%''....
проблемы начинаются когда в ValueN попадают строки с произвольны количеством апострофов
открытие невозможно порой просто потому что собранная строка не компилируется из за апострофов при открытии ref cursor
я попытался использовать translate с заменой на ^ но проблема не ушла..
кто решал ткую проблему и может есть у вас какие советы на этот счет
26 июн 09, 23:48    [7350694]     Ответить | Цитировать Сообщить модератору
 Re: Dynamic Sql и апостроффффф!  [new]
suPPLer
Member

Откуда: Харків, Україна
Сообщений: 7794
Блог
Vit_URAZOV,

Слова "sql injection", "cursor sharing" Вам что-нибудь говорят? Почитайте про связываемые переменные (bind variables).

declare
  l_dummy dual.dummy%type;
begin
  execute immediate 'select dummy from dual where dummy like ''%'' ||:p1|| ''%'' ' into l_dummy using 'X';
  dbms_output.put_line(l_dummy);
end;
27 июн 09, 00:38    [7350797]     Ответить | Цитировать Сообщить модератору
 Re: Dynamic Sql и апостроффффф!  [new]
Vit_URAZOV
Member

Откуда:
Сообщений: 84
Ага очень смешно.. аж до дури
а если посмотреть винмательно что запрос ДИМНАМИЧЕСКИЙ и МНЕ зАРАНЕЕ НЕИЗВЕСТНО СКОКА У МЕНЯ БУДЕТ этих перменных , количество становиться мне известно в МОМЕНТ ВЫЗОВА!
ЧТО СКАЖЕТЕ НА ЭТО ГОСПОДИН УМНИК :-(
27 июн 09, 18:28    [7351451]     Ответить | Цитировать Сообщить модератору
 Re: Dynamic Sql и апостроффффф!  [new]
skelet
Member [заблокирован]

Откуда: moskau
Сообщений: 5549
Vit_URAZOV,

может вам енто... внешнюю на сях или яве лучше забабацать?
27 июн 09, 18:35    [7351457]     Ответить | Цитировать Сообщить модератору
 Re: Dynamic Sql и апостроффффф!  [new]
naumenko
Member

Откуда:
Сообщений: 4
Vit_URAZOV

sqlquiry:='select field1 from table where field2 like ''%'||Value1||'%''||' and field3 like ''%'||Value2||'%''....


Вам просто нужно вместо переменных Value1, Value2... использовать replace( Value1, '''', ''''''), replace( Value2, '''', ''''''). Т.е. заменить одну кавычку на две.
27 июн 09, 19:00    [7351486]     Ответить | Цитировать Сообщить модератору
 Re: Dynamic Sql и апостроффффф!  [new]
skelet
Member [заблокирован]

Откуда: moskau
Сообщений: 5549
naumenko

Вам просто нужно вместо переменных Value1, Value2... использовать replace( Value1, '''', ''''''), replace( Value2, '''', ''''''). Т.е. заменить одну кавычку на две.


это вообще модно что-ли стало так извращаться теперь?
27 июн 09, 19:14    [7351509]     Ответить | Цитировать Сообщить модератору
 Re: Dynamic Sql и апостроффффф!  [new]
RA\/EN
Member

Откуда:
Сообщений: 3659
skelet

может вам енто... внешнюю на сях или яве лучше забабацать?
skelet
naumenko

Вам просто нужно вместо переменных Value1, Value2... использовать replace( Value1, '''', ''''''), replace( Value2, '''', ''''''). Т.е. заменить одну кавычку на две.


это вообще модно что-ли стало так извращаться теперь?

Ваши представления о том, что является "извращением", извращены до предела!
27 июн 09, 23:06    [7351733]     Ответить | Цитировать Сообщить модератору
 Re: Dynamic Sql и апостроффффф!  [new]
suPPLer
Member

Откуда: Харків, Україна
Сообщений: 7794
Блог
Vit_URAZOV,

Господин Умник промолчит, а я скажу - пользуйтесь DBMS_SQL.
27 июн 09, 23:10    [7351740]     Ответить | Цитировать Сообщить модератору
 Re: Dynamic Sql и апостроффффф!  [new]
skelet
Member [заблокирован]

Откуда: moskau
Сообщений: 5549
RA\/EN

Ваши представления о том, что является "извращением", извращены до предела!

хм.... даже если и так, это не ответ на вопрос.

По задачу явно плачет или как уже написали dbms_sql, или OCI
28 июн 09, 10:06    [7351965]     Ответить | Цитировать Сообщить модератору
 Re: Dynamic Sql и апостроффффф!  [new]
Vit_URAZOV
Member

Откуда:
Сообщений: 84
Ваше мнение какое будет если использовать dbms_session.set_context..
например
dbms_session.set_context('CTX','VAR_NAME','%'||VAR_NAME||'%');
а потом
myquery:=myquery||myquery||'and var_name like SYS_CONTEXT("CTX","VAR_NAME")'
остаются вопросы-
первое нужно ли подчищать за собой и если да то когда ? и если у нас это все на уровне сессии то может оно само "помрет".и если двара за делю set_context то перетрет ли старое новым знаечением
Ваше мнение коллеги
29 июн 09, 13:21    [7354423]     Ответить | Цитировать Сообщить модератору
 Re: Dynamic Sql и апостроффффф!  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
Vit_URAZOV,

1) отвечу, за отсутствующего, на этот крик души:
Vit_URAZOV
Ага очень смешно.. аж до дури
а если посмотреть винмательно что запрос ДИМНАМИЧЕСКИЙ и МНЕ зАРАНЕЕ НЕИЗВЕСТНО СКОКА У МЕНЯ БУДЕТ этих перменных , количество становиться мне известно в МОМЕНТ ВЫЗОВА!
ЧТО СКАЖЕТЕ НА ЭТО ГОСПОДИН УМНИК :-(

- элементарно. всего то делов, динамически генерите динамический эскуэль
(тут уже, енто будет plsql, на самом деле).

2) к любому использованию динамического эскуэля надобно подходить осторожно
ибо надежность вашей поделки резко падает.
имхо, если чтобы покрыть аналогичный бизнес функционал достаточно закодить в ~20 раз
больше, но статического кода - следует лабать статический
29 июн 09, 14:28    [7354762]     Ответить | Цитировать Сообщить модератору
 Re: Dynamic Sql и апостроффффф!  [new]
(:_:)
Guest
Vit_URAZOV,

Text literals
29 июн 09, 14:42    [7354851]     Ответить | Цитировать Сообщить модератору
 Re: Dynamic Sql и апостроффффф!  [new]
Vit_URAZOV
Member

Откуда:
Сообщений: 84
Неа, возможно я жуткий перфекционист и в какой то мере лентяй но лентяй от прогресса- если есть разработанные возможности я предпочту ими воспользоваться..
29 июн 09, 20:17    [7356141]     Ответить | Цитировать Сообщить модератору
 Re: Dynamic Sql и апостроффффф!  [new]
Alex Roudnev
Member

Откуда: Валнут Крик, Калифорния
Сообщений: 5547
RA\/EN
skelet

может вам енто... внешнюю на сях или яве лучше забабацать?
skelet
naumenko

Вам просто нужно вместо переменных Value1, Value2... использовать replace( Value1, '''', ''''''), replace( Value2, '''', ''''''). Т.е. заменить одну кавычку на две.


это вообще модно что-ли стало так извращаться теперь?

Ваши представления о том, что является "извращением", извращены до предела!


Это безусловно было бы извращением.
29 июн 09, 22:06    [7356348]     Ответить | Цитировать Сообщить модератору
 Re: Dynamic Sql и апостроффффф!  [new]
suPPLer
Member

Откуда: Харків, Україна
Сообщений: 7794
Блог
Vit_URAZOV,

зачем Вам context? Откуда Вы берёте переменные для динамического запроса?
29 июн 09, 22:11    [7356360]     Ответить | Цитировать Сообщить модератору
 Re: Dynamic Sql и апостроффффф!  [new]
skelet
Member [заблокирован]

Откуда: moskau
Сообщений: 5549
Alex Roudnev
RA\/EN
skelet

может вам енто... внешнюю на сях или яве лучше забабацать?
skelet
naumenko

Вам просто нужно вместо переменных Value1, Value2... использовать replace( Value1, '''', ''''''), replace( Value2, '''', ''''''). Т.е. заменить одну кавычку на две.


это вообще модно что-ли стало так извращаться теперь?

Ваши представления о том, что является "извращением", извращены до предела!


Это безусловно было бы извращением.


стоп стоп, было бы извращением извращаться или извращать представления о том что есть извращение??

Запуталсо я уже в этой риторике
29 июн 09, 22:23    [7356389]     Ответить | Цитировать Сообщить модератору
 Re: Dynamic Sql и апостроффффф!  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
Vit_URAZOV
Неа, возможно я жуткий перфекционист и в какой то мере лентяй но лентяй от прогресса- если есть разработанные возможности я предпочту ими воспользоваться..

пользуйтесь, на здоровье. я жеж про ..только без экстремизьма

а то - оно может статься, что воспользуетесь возможностью погасить свет и,
отселе довеку, работать в темноте
30 июн 09, 10:38    [7357531]     Ответить | Цитировать Сообщить модератору
 Re: Dynamic Sql и апостроффффф!  [new]
Vit_URAZOV
Member

Откуда:
Сообщений: 84
Все кажеться пошел флуд...:-(
вернусь к

dbms_session.set_context('CTX','VAR_NAME','%'||VAR_NAME||'%');
а потом
myquery:=myquery||myquery||'and var_name like SYS_CONTEXT("CTX","VAR_NAME")'

это фишка из журнала Oracle july/august 2009
On Popularity and Natural Selection
я хочу воспользоваться дабы не опасаться каждый раз что у меня прийдет хитрожо...й литерал
Спасибо всем за участия буду решать проблему исходя их накопленной инфы. спасибо за участие!
30 июн 09, 15:58    [7359814]     Ответить | Цитировать Сообщить модератору
 Re: Dynamic Sql и апостроффффф!  [new]
suPPLer
Member

Откуда: Харків, Україна
Сообщений: 7794
Блог
Vit_URAZOV,

так я и не понял, где у Вас "не известно количество критериев"... В коде Вашего последнего примера устанавливается одна контекстная переменная, значит, заранее известно, что она одна. Где неизвестность?
30 июн 09, 16:36    [7360065]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить