Как получить максимальную и минимальную длину, разрешенную в столбце varchar2
. Мне нужно проверить входящие данные из временной таблицы, которая поступает из какой-то удаленной базы данных. И каждое значение строки должно быть проверено для определенных столбцов, чтобы оно имело максимальное или минимальное значение, которое может быть установлено в столбце.
Поэтому я должен был получить спецификации столбца, используя детали его схемы. Я сделал proc
для этого:
PROCEDURE CHK_COL_LEN(VAL IN VARCHAR2,
MAX_LEN IN NUMBER :=4000,
MIN_LEN IN NUMBER :=0,
LEN_OUT OUT VARCHAR2)
IS
BEGIN
IF LENGTH(VAL)<MIN_LEN THEN
LEN_OUT := 'ERROR';
RETURN;
ELSIF LENGTH(VAL)>MAX_LEN THEN
LEN_OUT := 'ERROR';
RETURN;
ELSE
LEN_OUT := 'SUCCESS';
RETURN;
END IF;
END;
END CHK_COL_LEN;
Но проблема в том, что его нельзя использовать повторно, и он немного жестко запрограммирован. Я должен явно отправить значение MAX
и MIN
для каждого значения вместе с данными для проверки.
Итак, при вызове proc
это что-то вроде:
CHK_COL_LEN(EMP_CURSOR.EMP_ID, 5, 1, LEN_ERROR_MSG);
Вместо этого я хочу что-то вроде: (Если что-то подобное существует!)
CHK_COL_LEN(EMP_CURSOR.EMP_ID,
EMP.COLUMN_NAME%MAX_LENGTH,
EMP.COLUMN_NAME%MIN_LENGTH,
LEN_ERROR_MSG)
Заранее спасибо.
ИЗМЕНИТЬ
select max(length(col)) from table;
Это решение, но мне снова придется запускать этот запрос каждый раз, чтобы установить две переменные для значений MAX и MIN. И выполнение дополнительных двух запросов для каждого значения, а затем установка 2 переменных будет стоить значительного снижения производительности при наличии около 32 таблиц, каждая с 5-8 столбцами varchar2 и средними строками около 40k-50k в каждой таблице.