SQL Fiddle
Настройка схемы Oracle 11g R2 :
create function jbmdate (p_date in varchar2)
return varchar2
as
begin
return to_char(to_date(p_date,'YYYYMMDD'),'DD.MM.YYYY');
end;
/
Запрос 1 :
SELECT '20180818' AS input,
jbmdate( '20180818' ) AS dt,
DUMP( jbmdate( '20180818' ) ) AS "dump"
FROM DUAL
Результаты
| INPUT | DT | dump |
|----------|------------|---------------------------------------------|
| 20180818 | 18.08.2018 | Typ=1 Len=10: 49,56,46,48,56,46,50,48,49,56 |
Как видно из вывода функции DUMP()
, возвращенный тип данных VARCHAR2
имеет длину 10. Где бы ни были получены ваши 3990 дополнительных байтов, он не генерируется SQL или PL / SQL и Вы должны посмотреть дальше вниз по течению в приложении, которое запрашивает базу данных.
Запрос 2 : Если вы хотите явно привести VARCHAR2
к определенной длине, то вы можете использовать функцию CAST( your_value AS VARCHAR2(10) )
, чтобы привести его к длине 10, но, как вы можете видеть ниже , это не влияет на вывод DUMP
, так как возвращаемое значение уже имеет длину 10.
SELECT '20180818' AS input,
CAST( jbmdate( '20180818' ) AS VARCHAR2(10) ) AS dt,
DUMP( CAST( jbmdate( '20180818' ) AS VARCHAR2(10) ) ) AS "dump"
FROM DUAL
Результаты
| INPUT | DT | dump |
|----------|------------|---------------------------------------------|
| 20180818 | 18.08.2018 | Typ=1 Len=10: 49,56,46,48,56,46,50,48,49,56 |