Я хочу написать повторно используемый код, и мне нужно объявить некоторые переменные в начале и повторно использовать их в скрипте, например:
DEFINE stupidvar = 'stupidvarcontent';
SELECT stupiddata
FROM stupidtable
WHERE stupidcolumn = &stupidvar;
Как я могу объявить переменную и повторно использовать ее в следующих инструкциях, таких как SQLDeveloper.
попытки
- Используйте раздел DECLARE и вставьте следующий оператор SELECT в
BEGIN
иEND;
. Доступ к переменной с помощью&stupidvar
. - Используйте ключевое слово
DEFINE
и получите доступ к переменной. - Использование ключевого слова
VARIABLE
и доступ к переменной.
Но во время попыток я получаю всевозможные ошибки (несвязанная переменная, синтаксическая ошибка, ожидаемая SELECT INTO
...).
sql
oracle
variables
declaration
bl4ckb0l7
источник
источник
Ответы:
Есть несколько способов объявления переменных в скриптах SQL * Plus.
Первый - использовать VAR для объявления переменной привязки. Механизм присвоения значений переменной - это вызов EXEC:
VAR особенно полезен, когда мы хотим вызвать хранимую процедуру, которая имеет параметры OUT или функцию.
В качестве альтернативы мы можем использовать подстановочные переменные. Это хорошо для интерактивного режима:
Когда мы пишем сценарий, который вызывает другие сценарии, может быть полезно заранее определить переменные. Этот фрагмент кода запускается без запроса ввода значения:
Наконец, есть анонимный блок PL / SQL. Как видите, мы все еще можем назначать значения объявленным переменным в интерактивном режиме:
источник
Попробуйте использовать двойные кавычки, если это переменная типа char:
или
UPD:
источник
ORA-01008: not all variables bound
.DEFINE num = 1; SELECT &num FROM dual;
ведет к:ORA-01008: not all variables bound
В PL / SQL v.10
ключевое слово объявлять используется для объявления переменной
чтобы присвоить значение, вы можете установить его, когда вы объявляете
или чтобы выбрать что-то в эту переменную, которую вы используете
INTO
оператор, однако вам нужно обернуть оператор в,BEGIN
аEND
также вы должны убедиться, что возвращается только одно значение, и не забывайте точки с запятой.Таким образом, полное заявление будет выглядеть следующим образом:
Ваша переменная может использоваться только в пределах
BEGIN
иEND
поэтому , если вы хотите использовать более чем один , вам придется сделать несколькоBEGIN END
обертокНадеюсь, это сэкономит вам время
источник
Если вы хотите объявить дату, а затем использовать ее в SQL Developer.
источник
Просто хочу добавить ответ Мэйтаса . Может быть, это очевидно, но я долго искал, чтобы выяснить, что переменная доступна только внутри конструкции BEGIN-END , поэтому, если вам понадобится использовать ее в каком-то коде позже, вам нужно поместить этот код в BEGIN -END блок .
Обратите внимание, что эти блоки могут быть вложенными :
источник
Вопрос в том, чтобы использовать переменную в скрипте, значит, для меня она будет использоваться в SQL * Plus.
Проблема в том, что вы пропустили кавычки, и Oracle не может преобразовать значение в число.
Этот образец отлично работает благодаря автоматическому преобразованию типов (или как он там называется).
Если вы проверите, набрав DEFINE в SQL * Plus, он покажет, что переменная num имеет значение CHAR.
В этом случае это не проблема, потому что Oracle может разбирать строку на число, если это будет действительное число.
Когда строка не может быть преобразована в число, Oracle не может с ней справиться.
С цитатой, поэтому не заставляйте Oracle выполнять синтаксический анализ до числа, все будет в порядке:
Итак, чтобы ответить на исходный вопрос, это должно быть похоже на этот образец:
Есть другой способ сохранить переменную в SQL * Plus, используя значение столбца запроса .
COL [УМН] имеет new_value параметр в значение магазина из запроса по имени поля.
Как видите, значение X.log было установлено в переменной stupid_var , поэтому мы можем найти файл X.log в текущем каталоге, в котором есть журнал.
источник
Вот ваш ответ:
источник
В Toad я использую такие работы:
Затем значение будет распечатано в
DBMS Output
Window.Ссылка здесь и здесь 2 .
источник
Иногда вам нужно использовать макропеременную, не прося пользователя ввести значение. Чаще всего это нужно делать с необязательными параметрами скрипта. Следующий код полностью функционален
Подобный код каким-то образом был найден в каталоге rdbms / sql.
источник
Один из возможных подходов, если вам просто нужно указать параметр один раз и воспроизвести его в нескольких местах, - это сделать что-то вроде этого:
Этот код генерирует строку из 8 случайных цифр.
Обратите внимание, что я создаю своего рода псевдоним,
str_size
который содержит константу8
. Он перекрестно объединен для использования в запросе более одного раза.источник