Изменения остаются навсегда для замены? - PullRequest
1 голос
/ 04 июля 2011

Может ли кто-нибудь сказать мне разницу между функцией замены и функцией перевода Oracle?

Я где-то читал, что замена делает изменения в базе данных постоянными, а перевод - нет, это правильно?

Может ли кто-нибудь показать запрос, который докажет, что замена постоянно вносит изменения в базу данных?

Ответы [ 2 ]

3 голосов
/ 04 июля 2011

Ни одна из функций не вносит постоянные изменения - только при использовании UPDATE и после фиксации транзакции выполняется "постоянное" изменение ... До тех пор, пока в этом столбце не будет запущен следующий оператор обновления;)

Две функции работают по-разному:

SELECT translate('1tech23', '123', '456') AS translate,
       replace('1tech23', '123', '456') AS replace
  FROM DUAL

... возвращается:

translate  replace
-------------------
4tech56    1tech23

REPLACE заменяет предоставленный шаблон; TRANSLATE перебирает строку для одновременной обработки заменяющего символа (перемещение слева направо)

2 голосов
/ 04 июля 2011

Разница между REPLACE и TRANSLATE:

  • REPLACE заменяет одну строку на другую.
  • TRANSLATE заменяет символы в одном наборе на символы в другом.
  • Ни TRANSLATE, ни REPLACE не обновляют базу данных.

Вот несколько примеров:

create table nada (id number(8), description nvarchar2(30));
insert into nada values (1, "I like peanuts.");
insert into nada values (2, 'Peanuts are not a nut.');
insert into nada values (3, 'peanuts are a legume.');
commit;
select * from nada;
Id Description
-- ------------------------
 1 I like peanuts.
 2 Peanuts are not a nut.
 3 peanuts are a legume.

REPLACE работает так:

select replace(description, 'peanuts', 'tomatoes') from nada;

дает:

replace(description,'peanuts','tomatoes')
--------------------------------------
I like tomatoes.
Peanuts are not a nut.
tomatoes are a legume.

Просто слово «арахис» заменяется на «помидоры».Он чувствителен к регистру, поэтому «Арахис» не заменяется.

TRANSLATE работает следующим образом:

select translate(description, ' .', '_!') from nada;
translate(description, ' .', '_!')
----------------------------------
I_like_peanuts!
Peanuts_are_not_a_nut!
peanuts_are_a_legume!

Все пробелы заменены на подчеркивания и все периоды заменяются на взрывы!


Ни ПЕРЕВОД, ни ЗАМЕНА не обновляют базу данных.Они просто меняют значение в заявлении.Конечно, вы можете использовать это значение для обновления базы данных, если хотите.Например:

select replace(description, 'peanuts', 'tomatoes') from nada;
select * from nada;

Таблица остается прежней :

Id Description
-- ------------------------
 1 I like peanuts.
 2 Peanuts are not a nut.
 3 peanuts are a legume.

Если вы хотите изменить таблицу, поместите ее в инструкцию UPDATE или INSERT, например:

update nada set description = replace(description, 'peanuts', 'tomatoes');
commit;

Теперь это изменилось:

select * from nada;
Id Description
-- ------------------------
 1 I like tomatoes.
 2 Peanuts are not a nut.
 3 tomatoes are a legume.

Теперь, если вы хотите также исправить арахис, вы можете использовать REGEXP_REPLACE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...