Необходимые ресурсы для работы с varchar2(32767) и varchar2(20)?

Есть ли разница в затрачиваемых ресурсах, размер отводимой памяти, количество машинного времени?

Конечно, речь о случае, когда обе переменные содержат одинаковое кол-во данных:

declare
  a  varchar2(32767) := 'Hello, World!';
  b  varchar2(20)    := 'Hello, World!';
begin
  --TODO
end;

Ответы (1 шт):

Автор решения: 0xdb

Разницы, ни в производительности, ни в затрачиваемых ресурсах, нет.

Приведённая в скобках макс. длина строчного значения, это только ограничение (constraint). Ресурсы будут выделяться в зависимости от актуального значения динамически.

Если согласно условиям задачи, для символьных значений никаких ограничений не предусматренно, то чтобы не указывать для каждой переменной ограничение, которое часто выбирается: "Да вроде больше, чем 20 символов не будет" (принцип - авось), лучше объявитъ свой тип данных для строк без ограничений:

declare
    subtype longvarchar is varchar2 (32767);
    s longvarchar := 'Hello, World!';
begin 
    s := rpad (s, 32767, 'X');
end;
/

PL/SQL procedure successfully completed.
→ Ссылка