powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Replace
25 сообщений из 52, страница 2 из 3
Replace
    #39400014
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elicorawish
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
with t as (
select 'abcdefxzw4242'   str from dual union all
select '123x343'         str from dual union all
select '00f03xe12x'      str from dual union all
select '0123456789'      str from dual
)
select replace(str,'x',rpad('x',4000)) from t;

rpad('x',4000)


Тут не "только один replace". И тоже лишь видимость :)можете объяснить, в чём дело? Ни разу не сталкивался, в доке найти не смог - почему результат такой
...
Рейтинг: 0 / 0
Replace
    #39400064
Vint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx,
длинна строки. на 12.1 при varchar2>4к результат будет неожиданный.
...
Рейтинг: 0 / 0
Replace
    #39400065
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vintandreymx,
длинна строки. на 12.1 при varchar2>4к результат будет неожиданный.да и на 11 для меня неожиданно
...
Рейтинг: 0 / 0
Replace
    #39400071
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx,

С сишной функции возникает эксепшен и результат возвращается тот, который пришел.
Защита от атак переполнения буфера.
...
Рейтинг: 0 / 0
Replace
    #39400079
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopandreymx,

С сишной функции возникает эксепшен и результат возвращается тот, который пришел после обрезания.
Защита от атак переполнения буфера.Fixed.
...
Рейтинг: 0 / 0
Replace
    #39400089
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymxможете объяснить, в чём дело? Ни разу не сталкивался, в доке найти не смог - почему результат такойRTFM Character Functions Returning Character Values (FAQ) :SQL Language ReferenceThe length of the value returned by the function is limited by the maximum length of the data type returned.
For functions that return CHAR or VARCHAR2, if the length of the return value exceeds the limit, then Oracle Database truncates it and returns the result without an error message.
...
Рейтинг: 0 / 0
Replace
    #39400111
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymxVintandreymx,
длинна строки. на 12.1 при varchar2>4к результат будет неожиданный.да и на 11 для меня неожиданно
на границах лимитов всегда можно ждать неожиданностей
(за это и опубликовал, если честно )

то ли дело -
Код: plsql
1.
2.
3.
4.
5.
6.
7.
with t as (
  select 'abcdefxzw4242'   str from dual union all
  select '123x343'         str from dual union all
  select '00f03xe12x'      str from dual union all
  select '0123456789'      str from dual
)
select replace(str,'x', 'x'||chr(0) ) from t;
...
Рейтинг: 0 / 0
Replace
    #39400116
fortnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic,


а из 12 с пойдёт?


WITH FUNCTION replace_2 (v_str varchar2) RETURN varchar2 IS
vv_str varchar2(200);
BEGIN

vv_str := replace (v_str,'x','%%%');
for i in 1 ..4000 loop
for c in 1 ..256 loop
vv_str := replace (vv_str,'%%%' || chr(c),'%%%');
end loop;
end loop;
RETURN replace (vv_str,'%%%','');
END;
select replace_2(str) from test_test
...
Рейтинг: 0 / 0
Replace
    #39400121
fortnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
create table test_test as
select 'abcdefxzw4242' str from dual union all
select '123x343' str from dual union all
select '00f03xe12x' str from dual union all
select '00f03xe12x' str from dual union all
select '00f03xe12x' str from dual union all
select '0123456789' str from dual;


WITH FUNCTION replace_2 (v_str varchar2) RETURN varchar2 IS
vv_str varchar2(200);
BEGIN

vv_str := replace (v_str,'x','%%%');
for i in 1 ..4000 loop
for c in 1 ..256 loop
vv_str := replace (vv_str,'%%%' || chr(c),'%%%');
end loop;
end loop;
RETURN replace (vv_str,'%%%','');
END;
select replace_2(str) from test_test
/

ошибочно отослалось предыдущее.
...
Рейтинг: 0 / 0
Replace
    #39400124
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хоспади
SY же озвучил нормальное решение, полностью удовлетворяющее заданию
...
Рейтинг: 0 / 0
Replace
    #39400135
Dshedoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав Любомудров,

А зачем там вообще replace тогда?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
with t as (
select 'abcdefxzw4242'   str from dual union all
select '123x343'         str from dual union all
select '00f03xe12x'      str from dual union all
select '0123456789'      str from dual
)
select case when instr(str,'x') > 0 then substr(str,1,instr(str,'x')-1) else str end
from t
...
Рейтинг: 0 / 0
Replace
    #39400145
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что значит зачем?
Условие такое
...
Рейтинг: 0 / 0
Replace
    #39400151
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав ЛюбомудровSY же озвучил нормальное решение, полностью удовлетворяющее заданиюКак раз-таки в том "решении" само задание лишнее.
...
Рейтинг: 0 / 0
Replace
    #39400152
Dshedoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав Любомудров,
Я к тому, что представленное SY решение, никак не использует replace.
Это всё равно, что воткнуть просто replace(str,'x','y') и дальше работать с 'y' другими функциями, и говорить, что replace используется.

Думаю, что-то подобное должно быть:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
with t as (
select 'abcdefxzw4242'   str from dual union all
select '123x343'         str from dual union all
select '00f03xe12x'      str from dual union all
select '0123456789'      str from dual
)
select nvl(replace(str,substr(str,instr(str,'x')),null),str)
from t
...
Рейтинг: 0 / 0
Replace
    #39400155
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orawish
Код: plsql
1.
select replace(str,'x', 'x'||chr(0) ) from t;

Я ж уже писал. Зависит от гуя.
Код: plsql
1.
2.
3.
4.
5.
6.
REPLACE(STR,'X','X'||CHR(0
--------------------------
abcdefx zw4242
123x 343
00f03x e12x
0123456789

...
Рейтинг: 0 / 0
Replace
    #39400158
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicВячеслав ЛюбомудровSY же озвучил нормальное решение, полностью удовлетворяющее заданиюКак раз-таки в том "решении" само задание лишнее.Задание есть задание
Все остальное -- это уже рассуждения на тему
...
Рейтинг: 0 / 0
Replace
    #39400159
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я просто удивился, что такое очевидное решение не было озвучено сразу
А потом можно и повеселиться
...
Рейтинг: 0 / 0
Replace
    #39400160
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elicorawish
Код: plsql
1.
select replace(str,'x', 'x'||chr(0) ) from t;

Я ж уже писал. Зависит от гуя.
Код: plsql
1.
2.
3.
4.
5.
6.
REPLACE(STR,'X','X'||CHR(0
--------------------------
abcdefx zw4242
123x 343
00f03x e12x
0123456789


???
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
with t as (
  select 'abcdefxzw4242'   str from dual union all
  select '123x343'         str from dual union all
  select '00f03xe12x'      str from dual union all
  select '0123456789'      str from dual
)
select dump(replace(str,'x', rpad('x',1e4 ))) from t;
Typ=1 Len=6: 97,98,99,100,101,102
Typ=1 Len=3: 49,50,51
Typ=1 Len=5: 48,48,102,48,51
Typ=1 Len=10: 48,49,50,51,52,53,54,55,56,57
...
Рейтинг: 0 / 0
Replace
    #39400161
fortnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав ЛюбомудровХоспади
SY же озвучил нормальное решение, полностью удовлетворяющее заданию

Я правильно понимаю, что моё решение не подходит?

WITH FUNCTION replace_2 (v_str varchar2) RETURN varchar2 IS
vv_str varchar2(4000) :=v_str;
BEGIN


for i in 1 ..4000 loop
for c in 1 ..256 loop
vv_str := replace (vv_str,'x' || chr(c),'x');
end loop;
end loop;
RETURN replace (vv_str,'x','');
END;
select replace_2(str) from test_test
...
Рейтинг: 0 / 0
Replace
    #39400171
Jonhson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orawishandreymxпропущено...
да и на 11 для меня неожиданно
на границах лимитов всегда можно ждать неожиданностей
(за это и опубликовал, если честно )

то ли дело -
Код: plsql
1.
2.
3.
4.
5.
6.
7.
with t as (
  select 'abcdefxzw4242'   str from dual union all
  select '123x343'         str from dual union all
  select '00f03xe12x'      str from dual union all
  select '0123456789'      str from dual
)
select replace(str,'x', 'x'||chr(0) ) from t;



внезапно

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
with t as (
select 'abcdefxzw4242'   str from dual union all
select '123x343'         str from dual union all
select '00f03xe12x'      str from dual union all
select '0123456789'      str from dual union all
select 'x0123456789'     str from dual union all
select 'x'      str from dual
)
select replace(str,'x',rpad('x',4000)) from t;
...
Рейтинг: 0 / 0
Replace
    #39400174
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fortnetВячеслав ЛюбомудровХоспади
SY же озвучил нормальное решение, полностью удовлетворяющее заданию

Я правильно понимаю, что моё решение не подходит?

WITH FUNCTION replace_2 (v_str varchar2) RETURN varchar2 IS
vv_str varchar2(4000) :=v_str;
BEGIN


for i in 1 ..4000 loop
for c in 1 ..256 loop
vv_str := replace (vv_str,'x' || chr(c),'x');
end loop;
end loop;
RETURN replace (vv_str,'x','');
END;
select replace_2(str) from test_testНу это ты спрашивай у собеседующих ТС
Особенно, если у них, например, 8i
...
Рейтинг: 0 / 0
Replace
    #39400177
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orawish???Ты как-то странно цитируешь, но таки да, я согласен, что "дурь причем, вялая" - не видимость.
...
Рейтинг: 0 / 0
Replace
    #39400198
fortnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав ЛюбомудровНу это ты спрашивай у собеседующих ТС
Особенно, если у них, например, 8i

Ну, это вообще мелочи.
Можно всё в блоке выполнить.

Главное заложенная идея.
...
Рейтинг: 0 / 0
Replace
    #39400210
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, идея неплоха
Сочувствую
...
Рейтинг: 0 / 0
Replace
    #39400421
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopdbms_photoshopandreymx,

С сишной функции возникает эксепшен и результат возвращается тот, который пришел после обрезания.
Защита от атак переполнения буфера.Fixed.спасибо всем за помощь, удачи
...
Рейтинг: 0 / 0
25 сообщений из 52, страница 2 из 3
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Replace
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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