SQL - Как объявить переменную - PullRequest
0 голосов
/ 22 октября 2019

У меня ниже синтаксиса Oracle SQL:

select effective_date
from table
 where effective_date >= to_date(:processingDate, 'yyyymmdd')

Моя ошибка

«ProcessingDate» не объявлено.

Вопрос: Что делаетэтот знак ':' значит? Нужно ли указывать, что такое «processingDate»? Если да, то как?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 22 октября 2019

Вероятно, это переменная (любая из varchar(8), nvarchar(8), char(8) или nchar(8), поскольку вы сопоставляете ее с 8-символьным фиксированным форматом даты).

Некоторые системыиспользуйте : перед именем, чтобы обозначить имя переменной. Некоторые используют ?. Другие используют @. Другим вообще не требуется никаких ведущих символов.

Чтобы знать, что подходит для вашей базы данных, нам нужно знать, какую базу данных вы используете. to_date() сужает его до Oracle или Postgresql, но этого по-прежнему недостаточно, потому что я также видел инструменты отчетности, которые используют : перед именем для переменных независимо от конечной платформы базы данных.

Но вы, вероятно, не хотите просто добавлять оператор DECLARE для переменной. Переменная сама по себе здесь бесполезна, если она не имеет значащего значения. Вам необходимо выяснить, откуда это значение должно исходить, и убедиться, что система настроена для его правильного предоставления.

1 голос
/ 23 октября 2019

Если вы хотите выполнить запрос самостоятельно в sql * plus или в любом другом инструменте, вы можете определить эту переменную и использовать ее, используя переменную substitution. : используется для переменных связывания в oracle.

Переменные подстановки объявляются с использованием &.

Таким образом, ваш случай может выглядеть следующим образом:

Define processingDate=20191023

select effective_date
from table
 where effective_date >= to_date('&processingDate', 'yyyymmdd');

Cheers!!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...