PL/SQL многоплюсовые выражения :-)

Всё по теме СУБД Oracle: установка, настройка, использование, решение проблем и т.д. и т.п. и др. и пр.
Ответить
Аватара пользователя
SQL*Plus
Сообщения: 120
Зарегистрирован: Ср апр 20, 2022 1:09 pm

PL/SQL многоплюсовые выражения :-)

Сообщение SQL*Plus »

Обнаружил странную ситуацию в PL/SQL с использованием '+' в операции сложения:

Код: Выделить всё

DECLARE 
   N1 NUMBER := 0;
   N2 NUMBER := 0;
   N3 NUMBER := 0;
   N4 NUMBER := 0;
   N9 NUMBER := 0;
BEGIN
   FOR k IN 1 .. 4 LOOP
      N1 := N1 + 1;
      N2 := N2 ++ 2;
      N3 := N3 +++ 3;
      N4 := N4 ++++ 4;
      N9 := N9 +++++++++ 9;
   END LOOP;
   dbms_output.put_line('N1 = ' || N1);
   dbms_output.put_line('N2 = ' || N2);
   dbms_output.put_line('N3 = ' || N3);
   dbms_output.put_line('N4 = ' || N4);
   dbms_output.put_line('N9 = ' || N9);
END;
/

N1 = 4
N2 = 8
N3 = 12
N4 = 16
N9 = 36

PL/SQL procedure successfully completed.
Получается, что для операции сложения можно использовать несколько знаков '+'?!
В зависимости от погоды и настроения духа! :-)

Проверил на двух базах
- 19.13.0.0.0 (EE локальная)
- 19.18.0.1.0 (Облачная Autonomous Database):

Код: Выделить всё

SELECT banner_full FROM v$version;
BANNER_FULL                                                                                                                                                     
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.13.0.0.0

BANNER_FULL                                                                                                                                                     
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.18.0.1.0
А у вас как? Тот же самый эффект? На всех версиях?
Аватара пользователя
Valery Yourinsky
Сообщения: 36
Зарегистрирован: Ср май 18, 2022 2:30 pm

Re: PL/SQL многоплюсовые выражения :-)

Сообщение Valery Yourinsky »

Народ подсказал, что это унарные операторы '+' и '-' работают (смена знака):

Код: Выделить всё

SQL> DECLARE 
  2     N9 NUMBER := 0;
  3  BEGIN
  4     FOR k IN 1 .. 4 LOOP
  5        N9 := N9 - + - +-+ + + + + 9;
  6     END LOOP;
  7     dbms_output.put_line('N9 = ' || N9);
  8  END;
  9  /
N9 = -36

PL/SQL procedure successfully completed.
Оказалось, что всё просто! :-)

Вот только два минуса подряд без пробела не нужно писать, поскольку получится комментарий! :-)
Ответить