3

La concaténation après l'exécution de TZ_OFFSET ne semble pas s'inscrire. Exemple:Oracle ne concatène pas après TZ_OFFSET()

SELECT '[' || TZ_OFFSET('Europe/Amsterdam') || ']' FROM DUAL 

résultats dans:

[+01:00 

Pourquoi ne pas la concaténation après TZ_OFFSET() lieu?

+0

Fonctionne pour moi - http://rextester.com/DMQSU85214 – GurV

+0

C'est étrange, ce n'est pas pour moi - https://snag.gy/wigrFJ.jpg – Koen

+0

Même cela a fonctionné correctement ici - http: // rextester .com/ESB48246 Vous ne savez pas ce qui cause le problème dans votre cas. – GurV

Répondre

3

Cela semble être un bug (1937516, que je ne peux pas voir, aussi 9861391, qui fait référence au bug de base 17291158, que je ne peux pas voir non plus), combiné avec le comportement du client. Dans SQL * Plus ou SQL Developer, cela semble OK - sorte de:

select '[' || tz_offset('Europe/Amsterdam') || ']' from dual; 

'['||TZ_O 
--------- 
[+01:00 ] 

avec ce qui semble être un espace supplémentaire; bien que copier et le coller à partir de la feuille de calcul SQL Developer - où il est affiché comme - perd le support de fermeture trop:

'['||TZ_O 
--------- 
[+01:00 

Dumping la valeur générée montre le problème:

select dump('[' || tz_offset('Europe/Amsterdam') || ']') from dual; 

DUMP('['||TZ_OFFSET('EUROPE/AMSTERDAM')||']') 
--------------------------------------------- 
Typ=1 Len=9: 91,43,48,49,58,48,48,0,93 

Notez que le 0 octet , qui est un caractère nul, et provoquant la confusion.

Comme le format offset est fixe, vous pouvez éviter ce via un substr() simple:

select '[' || substr(tz_offset('Europe/Amsterdam'), 1, 6) || ']' from dual; 

'['||SUB 
-------- 
[+01:00] 

select dump('[' || substr(tz_offset('Europe/Amsterdam'), 1, 6) || ']') from dual; 

DUMP('['||SUBSTR(TZ_OFFSET('EUROPE/AMSTERDAM'),1,6)||']') 
--------------------------------------------------------- 
Typ=1 Len=8: 91,43,48,49,58,48,48,93 

... ou les replace() ou trim() options mentionnées dans les commentaires; ou toute autre chose qui supprime le personnage voyou; pair:

rtrim(tz_offset('Europe/Amsterdam'), chr(0)) 

Comme les bogues ne sont pas visibles dans MoS, je ne sais pas quand (ou si) il a été corrigé. On dirait qu'il existe dans 11.2.0.0, et je vois quelque chose dans 11.2.0.4 - il peut être corrigé dans 12c. Je ne le vois pas en 12.1.0.2.

+1

'replace (chaîne_problème, chr (0), null)' - longueur façon indépendante –

+0

La longueur est toujours 6 (ou 7 y compris l'octet nul) dans ce cas, mais oui ... –

+1

J'utilise 'TRIM (TRAILING CHR (0) FROM TZ_OFFSET ('Europe/Amsterdam')) ' –