将Varchar2的返回值从default(4000)更改为(10char)?

时间:2018-08-30 08:51:01

标签: oracle plsql

我的问题是:

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

如您所见,这将返回一个默认值为4000字节/字符的varchar。

但是问题是它将在GUI中使用,所以4000真是不幸了。

那么我怎么可能将此varchar2的返回值更改为(10 char)?

View of Gui Table altered

应该看起来像这样

但是我在gui中使用时看起来像这样。

View of Gui Table

所以真正的问题不是gui本身,而是sql ...显示在下面的sql中: View of SQuirrle Table

那么我该如何更改该函数返回的精度。

2 个答案:

答案 0 :(得分:2)

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

Results

|    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

Results

|    INPUT |         DT |                                        dump |
|----------|------------|---------------------------------------------|
| 20180818 | 18.08.2018 | Typ=1 Len=10: 49,56,46,48,56,46,50,48,49,56 |

答案 1 :(得分:0)

函数仅定义其返回值的基本类型(在这种情况下为VARCHAR2)。它无法定义更具体的长度来影响GUI使用的显示格式。

应用程序显示字符串的方式将有所不同。例如,PL / SQL Developer将以您期望的紧凑形式显示输出,Oracle Live SQL也将显示。

  

应该看起来像这样
  ...
  但是在gui中使用时看起来像这样。
  ...
  所以真正的问题不是gui本身,而是sql

我看不出您是如何得出结论的,因为似乎问题出在GUI(SQuirreL SQL Client?)中。也许您可以在其他工具中进行尝试。