Изменение значения возврата формы Varchar2 по умолчанию (4000) на (10char)? - PullRequest
0 голосов
/ 30 августа 2018

Мой вопрос:

create function jbmdate (p_date in varchar2)
return varchar2
as
begin
  return to_char(to_date(p_date,'YYYYMMDD'),'DD.MM.YYYY');
end;

Как видите, возвращается varchar со значением по умолчанию: 4000 байт / символ.

Но проблема в том, что он будет использоваться в графическом интерфейсе, поэтому 4000 достаточно неудачен.

Так как я могу изменить возвращаемое значение этого varchar2 на (10 символов)?

View of Gui Table altered

Это должно выглядеть так

но я выгляжу так при использовании в графическом интерфейсе.

View of Gui Table

Так что настоящая проблема не в самом графическом интерфейсе, а в sql ..., показанном здесь в squirrle sql: View of SQuirrle Table

Так, как я могу изменить Точность, которая возвращается функцией.

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

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 |
0 голосов
/ 30 августа 2018

Функция определяет только базовый тип возвращаемого значения (в данном случае VARCHAR2). Он не может определить более конкретную длину, чтобы повлиять на формат отображения, используемый вашим графическим интерфейсом.

Приложения будут различаться по способу отображения строк. Например, PL / SQL Developer отобразит вывод в ожидаемой вами компактной форме, как и Oracle Live SQL .

Это должно выглядеть так
...
но это выглядит так, когда используется в графическом интерфейсе.
...
Так что настоящая проблема не в самом графическом интерфейсе, а в sql

Я не вижу, как вы пришли к такому выводу, так как кажется очевидным, что проблема в GUI (SQuirreL SQL Client?). Возможно, вы могли бы попробовать это в другом инструменте.

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