Что означает знак двоеточия ‘:’ в Oracle?

#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. Чтобы позволить пользователю вводить значения, необходимые для каждой переменной, каждый раз, когда вы выполняете некоторый код.