Я клянусь, что об этом уже много раз спрашивали, но я не могу применить другие примеры к своему случаю использования:
Прежде всего, этот запрос будет выполнен как часть Informatica SQL Source Qualifierи в некоторых случаях передаваться из оператора SQL Server OpenQuery, поэтому следует помнить об этом, и SQL Plus не будет использоваться;Oracle SQL Developer используется только для разработки кода.
Моя история - это, прежде всего, SQL Server и Teradata, но, как следует из названия, у меня теперь есть требование, в котором мне нужно объявить, заполнить и использовать переменную в Oracle,все в пределах одной и той же процедуры. Не SP, поэтому нет объявлений In / Out
В SQL Server этот код будет работать должным образом (для ясности добавлены номера строк):
1. Declare @MaxDate Int
2.
3. With f_data (cal_period) As (Select 201904 As cal_period)
4.
5. Select @MaxDate = Max(cal_period) From f_data
6.
7. Select
8. Case
9. When (@MaxDate%100) < 12 Then @MaxDate+1
10. Else (@MaxDate+100) - ((@MaxDate%100)-1)
11. End As dt
- Строка 1: это периоды даты ГГГГММ, определенные как int
- Строка 3: здесь я использую встроенное представление (CTE) для иллюстрации и чтобы вам было проще копировать и вставлять, но на самом деле,на самом деле это физическая управляющая таблица, поэтому она обычно не будет видна в сценарии.
- Строка 5: Заполняет параметр (префикс SQL для параметров задается символом at) набором значений с одним значением
- Строка 7-11: это просто логика для продвижения периода на единицу, процентная отметка в SQL Server - это функция модуля, Oracle записывается как Mod (@ MaxDate, 100)
Для тех, кто не знаком с SQL Server, ему не нужна справочная таблица, такая как Dual ("Sys.Dual") для выполнения запроса, так что для Oracle необходим оператор "From Dual" в отсутствующей строке 12
Мой реквирЭлемент, по сути, является точной копией вышеупомянутого T-SQL, поэтому мне нужно объявить переменную одноразового использования, заполнить эту переменную результатами запроса SQL, а затем использовать эту переменную в преобразовании - результатиз которых записывается в переменную Informatica и SSIS для последующего использования.
До сих пор я пытался объявить переменную, это работало (я имею в виду, что она не возвращала ошибку):
Declare MaxPeriod Int;
Begin
Select 201904 Into MaxPeriod From Dual;
End;
А заполнение из оператора SQL также показывает, что оно успешно завершено:
Declare MaxPeriod Int;
Begin
Select Max(MaxPeriodVal) Into MaxPeriod From CtrlTable;
End;
Хотя я не могу выйти за пределы этого, чтобы фактически протестировать переменную при сбое операторов put.line, как и простые проверки Case:
Declare MaxPeriod Int;
Begin
Select 201904 Into MaxPeriod From Dual;
End;
Select
Case
When 201904 = MaxPeriod Then 'Match'
Else 'No Match'
End As dteChk
From Dual;
Я попытался поставить префикс MaxPeriod в проверке с помощью двоеточия, а префикс, суффикс / оба - с амперсандом, например: MaxPeriod;& MaxPeriod;MaxPeriod &;& MaxPeriod & Все из которых не удалось.