Жаба для Oracle 12.12: в чем разница между литералом и переменной среды? - PullRequest
0 голосов
/ 30 января 2019

Я использую переменную &WEIGHT в коде SQL несколько раз.Когда я выполняю, появляется следующее окно с просьбой установить значение моей переменной.

enter image description here

У меня есть два основных вопроса:

1) В чем разница между литералом и переменной среды?

2) Переменная &WEIGHT несколько раз указывается в коде SQL.Это означает, что все эти утверждения будут принимать одно и то же значение, это правильно?

Ответы [ 3 ]

0 голосов
/ 30 января 2019

Переменная подстановки (&WEIGHT здесь) является заполнителем, так же, как переменная в программном модуле, и полезна для повышения производительности.Так как в этом случае разбор для выполнения оператора SELECT выполняется один раз, в то время как для каждого литерала операция синтаксического анализа повторяется.Таким образом, ни один из операторов не будет иметь одинаковое значение для каждого вызова.

Более того, использование литерала имеет уязвимость для SQL-инъекций.

PSДля строкового типа значений используются одинарные кавычки '&STR' переменные подстановки.

0 голосов
/ 01 февраля 2019

Объяснение Литтлфутом переменной «литерал и окружение» не за горами.Что касается вашего второго вопроса, вам будет предложено ввести значение для каждого веса, который вы объявили, используя один амперсанд.Если вы хотите ввести ВЕС один раз и сохранить одно и то же значение для каждого использования, используйте двойной амперсанд.

Пример 1, дважды запрашивает ВЕС.

select &WEIGHT, &WEIGHT from dual;

Пример 2, запрашивает ВЕСодин раз.

select &&WEIGHT, &&WEIGHT from dual;

Одиночный / двойной амперсанд также применяется, когда у вас есть много операторов, выполняемых вместе как скрипт, F5 ярлык в Toad.

Пример 1, подсказкидля WEIGHT дважды, один раз для каждого оператора.

select &WEIGHT from dual;
select &WEIGHT from dual;

Пример 2, запрашивает WEIGHT один раз, один раз, когда он встречается, и это значение повторно используется для каждого последующего оператора, используя && WEIGHT.

select &&WEIGHT from dual;
select &&WEIGHT from dual;

См. Раздел «Избегание ненужных запросов значений» в Руководство пользователя SQL * Plus .

0 голосов
/ 30 января 2019

Литерал - это то, что вы вводите вручную, например, 10 как DEPTNO из таблиц Скотта.

Переменная окружения - это то, что говорит ее имя - позволяет выбирать среди TOAD или системных переменных (таких как SYSDATE,PATH, TNSADMIN и т. Д.).

Что касается вашего второго вопроса, да - независимо от того, сколько у вас операторов (SQL или PL / SQL), окон, разных соединений ... если вы используете один и тот же ВЕСпеременная во всех них, они получат одинаковое значение.

...