#oracle #plsql #regexp-replace
#Oracle #plsql #регулярное выражение-замена
Вопрос:
if (:new.first_name is not null) then
:new.first_name := substr(regexp_replace(:new.first_name,'[^'||chr(1)||'-'||chr(127)||']',null),1,20);
end if;
может кто-нибудь помочь мне с этим кодом? Я не могу этого понять!
Комментарии:
1.
:new
вероятно, имеется в виду недавно вставленная / обновленная строка, так как этот код, вероятно, выполняется внутри какого-то триггера. Для получения дополнительной информации ознакомьтесь с документацией.
Ответ №1:
Этот код, вероятно, взят из триггера ОБНОВЛЕНИЯ или ВСТАВКИ, он ссылается на псевдоряду, содержащую новые значения для строки
UPDATE x
SET y = 'z'
WHERE y = 'a'
Триггер при этом обновлении будет иметь :old
псевдоподводку, где находится столбец y
'a'
, и :new
псевдоподводку, где y
находится 'z'
. Если вы измените значение :new
в before
триггере, это изменит то, что записано в таблицу
Комментарии:
1. Также я хотел бы добавить еще одно использование, поскольку вопрос касается «:», это можно использовать и для переменных пользовательского ввода , если вы используете SQL Developer. Чтобы позволить пользователю вводить значения, необходимые для каждой переменной, каждый раз, когда вы выполняете некоторый код.