Oracle Forms & Reports

ORA-12713 lors de l'exécution d'un rapport dans un environnement Unix

S'APPLIQUE À : Oracle Reports Developer

Oracle Reports Developer - Version 11.1.2.1.0 et ultérieures
Les informations de ce document s'appliquent à toutes les plateformes.
Pertinence vérifiée le 01-FEB-2016

SYMPTÔMES : SQL*ReportWriter, NLS_LANG

Sur SQL*ReportWriter version 11.1.2.1.0 ou ultérieure

Lors de l'exécution d'un rapport particulier dans un environnement Unix avec NLS_LANG défini à CANADIAN FRENCH_CANADA.WE8ISO8859P1 dans reports.sh, l'erreur suivante se produit.

ERREUR
-----------------------
REP-771: Une erreur grave PL/SQL s'est produite dans l'unité de programme afterpform.
ORA-12713: Perte de caractères dans la conversion NCHAR/CHAR



ÉTAPES
-----------------------
Le problème peut être reproduit à volonté en suivant ces étapes :
1. Installez Oracle Reports sous Linux et, dans reports.sh, remplacez la valeur de NLS_LANG par CANADIAN FRENCH_CANADA.WE8ISO8859P1
2. exécutez votre rapport avec

$INSTANCE_HOME/config/reports/bin/rwclient.sh server=rep_custom report=/path/tf5003.rdf userid=$HIDDEN desformat=PDF destype=file desname=/tmp/out.pdf

CHANGEMENTS : valeur de NLS_LANG

La valeur de NLS_LANG a été modifiée dans reports.sh

CAUSE : message d'erreur REP-1401, ORA-12713

Le NLS_LANG de la base de données est défini à CANADIAN FRENCH_CANADA.WE8MSWIN1252 : le jeu de caractères ne correspond donc pas à celui qu'utilise maintenant le Reports Server. Il existe en outre un bogue connu :

Bug 9765970 : REPORTS FAILS WITH REP-1401: AND ORA-12713 AFTER UPGRADE TO 11G MID


-----BUG Excerpt ------
The error message REP-1401: and ORA-12713 occurs on trying to use a function call in the program unit in Developer 11g 
The stored procedure
  =========================
  create or replace function bossard_test_case1_f return string as
  vtest varchar2(20);
  begin
  select c1 into vtest from bossard_test_case1_t;
  return vtest;
  end bossard_test_case1_f;
  /
  
  The code in the reports 
  ========================
  function CF_1Formula return varchar2 is
  begin
  return bossard_test_case1_f;
  end;
  
  Error 
  ========================
  REP-1401: A fatal PL/SQL error occurred in program unit cf_1formula.
  ORA-12713: Character data loss in NCHAR/CHAR conversion
  ....
---- End of Excerpt

SOLUTION : développeurs Oracle Database

Le problème décrit a déjà été signalé comme un BOGUE, mais les développeurs ont déterminé qu'il ne s'agit pas d'un bogue, mais d'un comportement attendu du côté de Reports.

Si vous utilisez des caractères UTF8, la solution consiste à utiliser un jeu de caractères NLS UTF8 ou AL32UTF8 des deux côtés (base de données et client).

*WE8MSWIN1252 peut être utilisé si l'hôte est sous Windows