我的问题是:
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)?
应该看起来像这样
但是我在gui中使用时看起来像这样。
所以真正的问题不是gui本身,而是sql ...显示在下面的sql中:
那么我该如何更改该函数返回的精度。
答案 0 :(得分:2)
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?)中。也许您可以在其他工具中进行尝试。