jeudi 30 mai 2013

WEB.SHOW_DOCUMENT Oracle Forms.

Voici la méthode pour lancer un fichier sur disque avec la fonction WEB.SHOW_DOCUMENT.
  • Créer un module avec Oracle Forms 10g.
  • Créer un canevas.
  • Créer un bouton sur le canevas (Tester Rapport).
  • Dans le block PL SQL du bouton (WHEN_BUTTON_PRESSED), mettez ce code:
Declare
    url_file  varchar2(100) := 'C:\TEMP\forms.pdf';
BEGIN
     WEB.SHOW_DOCUMENT('File://'||url_file,'_blank');
END; 

















Quand on va cliquer sur le bouton, il va ouvrir le fichier pdf sur le disque (C:\temp).

mercredi 22 mai 2013

Apercu des transactions autonomes (PRAGMA AUTONOMOUS_TRANSACTION).

On sait qu'une des règles fondamentales d'un SGBD est d'apporter une cohérence complète lors de transactions (atomicité de la transaction) ; cependant, il arrive que certaines transactions doivent être exécutées indépendamment de celle qui l'appelle. C'est ce qu'on nomme les transactions autonomes.

Oracle a mis en place un mécanisme permettant cette exception : la clause PRAGMA AUTONOMOUS_TRANSACTION. Cette clause se place à la déclaration de la procédure / fonction / trigger et précise ainsi que celle-ci sera autonome.

Ainsi, le commit et le rollback à l'intérieur de la transaction autonome n'auront aucun effet sur les procédures appelantes.
La meilleure façon de comprendre les transactions autonomes est de les voir en action (exemple détaillé). Pour ce faire,on va créer une table TEST et de la remplir avec deux rangées sans faire le commit;












SQL> insert into test values (1,' Ceci est un test numéro 1 ');
 1 row inserted

SQL> insert into test values (2,' Ceci est un test numéro 2 ');
 1 row inserted

ORA-04091: Table en mutation.

Dans un premier temps, on va essayer de créer un déclencheur (trigger) sur la table EMP du schéma SCOTT.















Voici le code:
create or replace trigger TR_EMP_COUNT
AFTER DELETE ON EMP

FOR EACH ROW
  DECLARE
  num  number;
  BEGIN
      SELECT COUNT(*) INTO NUM
      FROM EMP;
      DBMS_OUTPUT.PUT_LINE(' Nbre d''employés' ||num);
  END;


Ensuite, on essaye de faire un DELETE sur cette table:
DELETE FROM EMP
WHERE DEPTNO=30;

À ce moment là, le trigger se déclenche et Oracle génére une erreur de type table en mutation (ORA-04091).








Pour résoudre ce problème, il y a deux possibilités:















Maintenant, l'opération de DELETE fonctionne parfaitement:

SQL> delete from emp
  2  where deptno=30;

6 rows deleted

mardi 21 mai 2013

Debug avec Oracle Forms 10g.

Voici une astuce pour faire exécuter une form étape par étape - DEBUG -  (il passe par tous les déclencheurs de la form) avec Oracle Forms 10g.

Url (exécution avec Java 7)
http://hostmachine:8889/forms/frmservlet?config=jpi&debug_messages=yes&form=d:\summit.fmx

Vous devez configurer le chemin des fichiers exécutables de forms (*.fmx). d:\summit.fmx, celui-ci est un exemple... 


lundi 20 mai 2013

ORA-01000: maximum open cursors exceeded

Si vous avez cette erreur, cela veut dire que le nombre maximum des curseurs ouverts par un utilisateur est atteint. Pour savoir plus le nombre de curseurs ouverts, exécuter cette requête (compte sys as sysdba):


select max(a.value) as open_cur, p.value as max_open_cur
from v$sesstat a, v$statname b, v$parameter p
where a.statistic# = b.statistic#
and b.name = 'opened cursors current'
and p.name= 'open_cursors'
group by p.value


Dans mon cas:

 OPEN_CUR MAX_OPEN_CUR
---------- -----------------------------
        77                 300

Pour régler ce problème de ORA-01000, il faudrait tout d'abord vérifier la valeur de la configuration du paramètre en exécutant cette requête et changer la valeur de ce dernier.

SQL> select name, value from v$parameter where name ='open_cursors'

NAME                                                                             VALUE
---------------------------------------------------------------------------
open_cursors                                                                     300

Pour modifier cette valeur, il faudrait exécuter ceci:
SQL> ALTER SYSTEM SET OPEN_CURSORS=350 SCOPE=MEMORY;

System altered

ATTENTION: SI VOUS VOULEZ CHANGER CE PARAMÈTRE POUR LE PROCHAIN DÉMARRAGE DE L'INSTANCE, IL FAUDRAIT REMPLACER MEMORY PAR SPFILE.
 
SQL> select name, value from v$parameter where name ='open_cursors' ;

NAME                                                                             VALUE
--------------------------------------------------------------------------------
open_cursors                                                                     350

mardi 14 mai 2013

Oracle Forms 10g avec Java 7 Update 21.

Après avoir modifier le fichier de configuration de " Oracle Forms 10g " formsweb.cfg et faire toutes les étapes, j'ai constaté que le problème est revenu pour Jinitiator et quand j'exécute la Form avec le browser (Firefox v21), j'ai eu le fameux message d'erreur à l'écran:


FRM-92095: Oracle Jnitiator version too low
 













Après une recherche fructueuse sur le net, j'ai vu sur le blogue d'Oracle qu'il faudrait télécharger le patch (mise à jour) dont le numéro est 14614795. 

Pour plus de détails concernant l'application de la patch, veuillez me contacter à cette adresse: aabed@oraweb.ca
Maintenant, mon problème est résolu et Forms 10g fonctionne à 100% avec Java 7 UP 21.
Testé avec Firefox 21, Windows 7 32 bits et Oracle Forms 10g.