Voici une liste des blogues concernant l'outil d'oracle APEX (Oracle application Express):
http://www.absodia.com/A257-liste-des-blogs-oracle-apex-application-express-html-db.html
Un autre lien pour les actions dynamiques:
http://st-curriculum.oracle.com/obe/db/apex/r40/apexdynactions/apexdynactions_ll.htm#top
Un blogue pour contribuer à la communauté francophone d'Oracle sur les thèmes suivants:Oracle Developper (SQL-PL/SQL, Oracle Forms 10g/11g, APEX 4, Administration Oracle ,OBIEE 10&11g (BI Publisher), Oracle E-Business Suite R12, BI Publisher 12c, Oracle 12c.
vendredi 18 février 2011
samedi 4 décembre 2010
Exporter des données Oracle vers Excel 2007.
Avec PL/SQL Developer 7, on pourrait exporter des données Oracle vers Excel, dont voici les étapes:
- Faites une requête en SQL avec un SELECT (exemple SELECT * From S_ITEM)
- Ramener tous les enregistrements de la table afin de les exporter (fetch avec PL/SQL Developer).
- Cliquer sur le bouton droit de la souris pour afficher le menu contextuel suivant (Export Results - CSV file).
- Une boite de dialogue s'ouvre pour sauvegarder le fichier CSV qui va utiliser dans Excel.
- Dernière étape à ouvrir le fichier CSV avec Excel 2007.
mardi 14 septembre 2010
Créer un utilisateur sous SQL Plus.
Voici la méthode complète et paramétrable pour créer un utilisateur sous SQL Plus :
SET VERIFY OFF
ACCEPT passwd PROMPT 'Entrer le mot de passe pour l'utilisateur SYSTEM : ' hide
ACCEPT nom_bd PROMPT 'Entrer le nom de la BD ou la chaine de connexion . Default is [LOCAL] : '
REM Connect
connect SYSTEM/&passwd@&nom_bd
ACCEPT username PROMPT 'Entrer le nouveau utilisateur : '
ACCEPT passwd_user PROMPT 'Entrer le mot de passe : ' HIDE
PROMPT ' Tablespaces de votre BD :'
SELECT TABLESPACE_NAME FROM DBA_TABLESPACES;
ACCEPT def_tbs PROMPT 'Entrer tablespace par défaut: '
ACCEPT tmp_tbs PROMPT 'Entrer tablespace temporaire: '
ACCEPT u_quota PROMPT 'Entrer quota (exemple 100K, ou 1M, ou UNLIMITED): '
ACCEPT quota_tbs PROMPT ' Tablespace: '
CREATE USER &username
IDENTIFIED BY &passwd_user
DEFAULT TABLESPACE &def_tbs
TEMPORARY TABLESPACE &tmp_tbs
QUOTA &u_quota ON "a_tbs;
GRANT CONNECT, RESOURCE TO &username;
Si vous travaillez avec l'interface graphique de TOAD ou PL/SQL Developer, ça serait très facile de créer un utilisateur.
Abed
SET VERIFY OFF
ACCEPT passwd PROMPT 'Entrer le mot de passe pour l'utilisateur SYSTEM : ' hide
ACCEPT nom_bd PROMPT 'Entrer le nom de la BD ou la chaine de connexion . Default is [LOCAL] : '
REM Connect
connect SYSTEM/&passwd@&nom_bd
ACCEPT username PROMPT 'Entrer le nouveau utilisateur : '
ACCEPT passwd_user PROMPT 'Entrer le mot de passe : ' HIDE
PROMPT ' Tablespaces de votre BD :'
SELECT TABLESPACE_NAME FROM DBA_TABLESPACES;
ACCEPT def_tbs PROMPT 'Entrer tablespace par défaut: '
ACCEPT tmp_tbs PROMPT 'Entrer tablespace temporaire: '
ACCEPT u_quota PROMPT 'Entrer quota (exemple 100K, ou 1M, ou UNLIMITED): '
ACCEPT quota_tbs PROMPT ' Tablespace: '
CREATE USER &username
IDENTIFIED BY &passwd_user
DEFAULT TABLESPACE &def_tbs
TEMPORARY TABLESPACE &tmp_tbs
QUOTA &u_quota ON "a_tbs;
GRANT CONNECT, RESOURCE TO &username;
Si vous travaillez avec l'interface graphique de TOAD ou PL/SQL Developer, ça serait très facile de créer un utilisateur.
Abed
jeudi 2 septembre 2010
Extraire la définition des objets depuis une BD.
Il existe un moyen pour extraire toutes les définitions des objets de la BD (stucture des tables, index, tablespaces, contraintes, etc...) en utilisant un package DBMS_METADATA ainsi qu'une méthode GET_DDL qui permet d'envoyer les données formatées en SQL ou XML, dont voici la syntaxe:
Sous SQL Plus ou PL/SQL Developer, faites ceci:
SET HEAD OFF
SET LONG 1000
SET PAGES 0
SELECT DBMS_METADATA.GET_DDL('TABLE','EMPLOYES') From DUAL;
Pour extraire les données avec le format XML, il suffit de changer GET_DDL par GET_XML.
Abed
Sous SQL Plus ou PL/SQL Developer, faites ceci:
SET HEAD OFF
SET LONG 1000
SET PAGES 0
SELECT DBMS_METADATA.GET_DDL('TABLE','EMPLOYES') From DUAL;
Pour extraire les données avec le format XML, il suffit de changer GET_DDL par GET_XML.
Abed
lundi 16 août 2010
Sécuriser une table.
Il est possible qu'on crée une procédure ainsi qu'un déclencheur pour pouvoir sécuriser une table (exemple la table employees du schéma SCOTT ou HR).
Voici le code de la procédure:
CREATE OR REPLACE PROCEDURE secure_dml
IS
BEGIN
IF TO_CHAR (SYSDATE, 'HH24:MI') NOT BETWEEN '08:00' AND '18:00'
OR TO_CHAR (SYSDATE, 'DY') IN ('SAT', 'SUN') THEN
RAISE_APPLICATION_ERROR (-20205,
'Vous avez le droit de manipuler la table EMPLOYE entre les heures du travail ');
END IF;
END secure_dml;
/
Et le déclencheur pour la procédure:
CREATE OR REPLACE TRIGGER secure_employees
BEFORE INSERT OR UPDATE OR DELETE ON employees
BEGIN
-- Appel de la procédure
secure_dml;
END secure_employees;
Exemple: On veut faire la mise à jour du salaire pour un employé numéro 204:
UPDATE EMPLOYEES
SET SALARY = SALARY * 1.2
WHERE EMPLOYEE_ID=204;
Voici le message d'erreur de PL/SQL Developer:

Abed
Voici le code de la procédure:
CREATE OR REPLACE PROCEDURE secure_dml
IS
BEGIN
IF TO_CHAR (SYSDATE, 'HH24:MI') NOT BETWEEN '08:00' AND '18:00'
OR TO_CHAR (SYSDATE, 'DY') IN ('SAT', 'SUN') THEN
RAISE_APPLICATION_ERROR (-20205,
'Vous avez le droit de manipuler la table EMPLOYE entre les heures du travail ');
END IF;
END secure_dml;
/
Et le déclencheur pour la procédure:
CREATE OR REPLACE TRIGGER secure_employees
BEFORE INSERT OR UPDATE OR DELETE ON employees
BEGIN
-- Appel de la procédure
secure_dml;
END secure_employees;
Exemple: On veut faire la mise à jour du salaire pour un employé numéro 204:
UPDATE EMPLOYEES
SET SALARY = SALARY * 1.2
WHERE EMPLOYEE_ID=204;
Voici le message d'erreur de PL/SQL Developer:

Abed
dimanche 8 août 2010
Mise en place d'un JavaBean dans Forms 10g.
Pour pouvoir utiliser des javabeans dans Oracle Forms 10g, on doit y aller au site http://forms.pjc.bean.over-blog.com/10-index.html pour télécharger un JavaBean qu'on va l'utiliser dans notre application (module Forms), c'est à dire qu'il faudrait télécharger le fichier JAR (showmessage.jar).
Donc, on va mettre en place un JavaBean de type SHOWMESSAGE à la manière du Java (voir l'image).
Après le téléchargement du fichier JAR, vous devez le placer dans le répertoire approprié de Forms (C:\DevSuiteHome_1\forms\server\formsweb.cfg).
Voici les étapes pas à pas pour la mise en place de ce JavaBean dans Oracle FORMS 10g.
Et pour le bouton et le Bean sur le canevas, voici l'image
On voit ici la flèche qui représente le bean qu'on a placé sur le canevas avec les positions 1 (fenêtre propriété de bean - voir l'image).
(
PC$Bean IN Varchar2,
PC$Text IN Varchar2,
PC$Title IN Varchar2 DEFAULT NULL,
PC$Icon IN Varchar2 DEFAULT 'P',
PN$Max IN NUMBER DEFAULT 150
) IS
LN$Slices Pls_Integer := 1 ;
LN$Rest Pls_Integer ;
LN$Pos Pls_Integer := 1 ;
BEGIN
-- Clear text --
Set_Custom_Property( PC$Bean, 1, 'CLEAR', '' ) ;
-- Set Title --
If PC$Title IS NOT NULL Then
Set_Custom_Property( PC$Bean, 1, 'SETTITLE', PC$Title ) ;
End if ;
-- Set icon --
If Upper( PC$Icon ) IN ('I','E','P','W') Then
Set_Custom_Property( PC$Bean, 1, 'SETICON', Upper( PC$Icon ) ) ;
End if ;
-- Set max line size --
If PN$Max IS NOT NULL Then
Set_Custom_Property( PC$Bean, 1, 'SETLINESIZE', To_Char( PN$Max ) ) ;
End if ;
-- Set text --
If PC$Text IS NOT NULL Then
If LENGTH( PC$Text ) > 1000 Then
LN$Slices := LENGTH( PC$Text ) / 1000 ;
LN$Rest := MOD( LENGTH( PC$Text ), 1000 ) ;
IF LN$Rest > 0 THEN LN$Slices := LN$Slices + 1 ; END IF ;
End if ;
FOR i IN 1..LN$Slices LOOP
message('.', no_acknowledge);
Set_Custom_Property( PC$Bean, 1, 'SETTEXT', SUBSTR( PC$Text, LN$Pos, 1000 ) ) ;
LN$Pos := LN$Pos + 1000 ;
END LOOP ;
End if ;
-- Show text --
If PC$Text IS NOT NULL Then
Set_Custom_Property( PC$Bean, 1, 'SHOW', '' ) ;
End if ;
END;
Abed
Donc, on va mettre en place un JavaBean de type SHOWMESSAGE à la manière du Java (voir l'image).
Après le téléchargement du fichier JAR, vous devez le placer dans le répertoire approprié de Forms (C:\DevSuiteHome_1\forms\server\formsweb.cfg).
Voici les étapes pas à pas pour la mise en place de ce JavaBean dans Oracle FORMS 10g.
- Créer un module (donner un nom quelconque).
- Créer un canevas (nommer-le CVSM).
- Créer un block de contrôle (on va le nommer CTRL).
- Créer un bouton sur le canevas et changer le Label à 'Afficher un message de type Java).
- Créer un Bean sur le canevas et changer les positions (mettre 1 partout pour qu'il ne sera pas visible sur le canevas) et nommer-le SHOW
Et pour le bouton et le Bean sur le canevas, voici l'image
On voit ici la flèche qui représente le bean qu'on a placé sur le canevas avec les positions 1 (fenêtre propriété de bean - voir l'image).
- Mettre la classe du BEAN en allant à la propriété de ce dernier (oracle.forms.fd.ShowMessage- voir l'image)
- Créer une unité de programme SHOWMESSAGE.
- Cliquer sur ok pour taper le code suivant:
(
PC$Bean IN Varchar2,
PC$Text IN Varchar2,
PC$Title IN Varchar2 DEFAULT NULL,
PC$Icon IN Varchar2 DEFAULT 'P',
PN$Max IN NUMBER DEFAULT 150
) IS
LN$Slices Pls_Integer := 1 ;
LN$Rest Pls_Integer ;
LN$Pos Pls_Integer := 1 ;
BEGIN
-- Clear text --
Set_Custom_Property( PC$Bean, 1, 'CLEAR', '' ) ;
-- Set Title --
If PC$Title IS NOT NULL Then
Set_Custom_Property( PC$Bean, 1, 'SETTITLE', PC$Title ) ;
End if ;
-- Set icon --
If Upper( PC$Icon ) IN ('I','E','P','W') Then
Set_Custom_Property( PC$Bean, 1, 'SETICON', Upper( PC$Icon ) ) ;
End if ;
-- Set max line size --
If PN$Max IS NOT NULL Then
Set_Custom_Property( PC$Bean, 1, 'SETLINESIZE', To_Char( PN$Max ) ) ;
End if ;
-- Set text --
If PC$Text IS NOT NULL Then
If LENGTH( PC$Text ) > 1000 Then
LN$Slices := LENGTH( PC$Text ) / 1000 ;
LN$Rest := MOD( LENGTH( PC$Text ), 1000 ) ;
IF LN$Rest > 0 THEN LN$Slices := LN$Slices + 1 ; END IF ;
End if ;
FOR i IN 1..LN$Slices LOOP
message('.', no_acknowledge);
Set_Custom_Property( PC$Bean, 1, 'SETTEXT', SUBSTR( PC$Text, LN$Pos, 1000 ) ) ;
LN$Pos := LN$Pos + 1000 ;
END LOOP ;
End if ;
-- Show text --
If PC$Text IS NOT NULL Then
Set_Custom_Property( PC$Bean, 1, 'SHOW', '' ) ;
End if ;
END;
- Compiler la procédure.
- Créer un SmartTriggers pour le bouton en cliquant sur le bouton droit de la souris (trigger WHEN-BUTTON_PRESSED)
- Mettre ce code : ShowMessage('CTRL.SHOW',' Suppression effectuée avec succès...','Message','I');
- Ceci est un appel de la procédure SHOWMESSAGE en utilisant le Bean qui est placé sur le canevas.
- Compiler le code PL/SQL.
- Compiler le module et il va vous donner ce résultat en cliquant sur le bouton:
Abed
lundi 2 août 2010
Utiliser une bibliothèque d'objets dans Oracle Forms 10g.
Pour utiliser les mêmes alertes dans les modules sans être recrée les mêmes objets, on doit créer une bibliothèque d'objets qui regroupe tous les objets qu'on a besoin.
Exemple, si on veut utiliser la même alerte dans plusieurs modules, on doit procéder les étapes suivantes:





notre bibliothèque LIBRARY est maintenant disponible et on peut l’appeler dans les autres modules.
Exemple, si on veut utiliser la même alerte dans plusieurs modules, on doit procéder les étapes suivantes:
- Créer une bibliothèque d'objet en allant dans Forms en créant un nouveau module, puis positionner sur le noeud Bibliothèque d'objets, ensuite cliquer sur (+) en haut pour créer l'objet.

- Renommer l'objet (exemple LIBRARY)

- Cliquer sur le menu Outils - Bibliothèque d’objets. Vous allez voir apparaître 2 onglets par défaut:

- En utilisant les propriétés (F4) de chaque onglet au niveau du navigateur (noeud bibliothèque), renommer les onglets vers des noms plus descriptifs:

- On fait la même chose pour le deuxième onglet (exemple Attributs visuels, mais dans notre cas, on va utiliser uniquement l'objet ALERTE).
- Il nous reste maintenant qu'a remplir l'onglet avec l'objet.
- Créer l'objet ALERTE

- Créer un groupe d'objets et nommer-le GRP_ALERTE
- Transférer l'alerte déjà créée vers le groupe d’objet GRP_ALERTE en sélectionnant puis glisser l'alerte.
- L'objet en question contient maintenant une alerte de type STOP.
- Ajouter le groupe d'objet dans la bibliothèque en sélectionnant le groupe GRP_ALERTE et en étant sur que la bibliothèque est visible avec l’onglet destination (dans ce cas l’onglet des objets de type ALERTES), glisser et déposer l’objet GRP_ALERTE dans l’onglet
- On voit bien que l'objet GRP_ALERTE est dans la bibliothèque.
- On va sauvegarder la bibliothèque pour la réutiliser dans notre application.
- Se positionner sur la bibliothèque au niveau du noeud BIBLIOTHEQUE
- Cliquer sur le menu FICHIER puis SAUVEGARDER SOUS…
- Sélectionner le type Bibliothèque d’objets (*.olb) et taper le nom de votre bibliothèque. Dans notre cas, le nom est déjà choisi comme LIBRARY.
notre bibliothèque LIBRARY est maintenant disponible et on peut l’appeler dans les autres modules.
- On va créer un module TEST et on va utiliser notre bibliothèque LIBRARY pour réutiliser une alerte.
- Ouvrir la bibliothèque en cliquant sur Fichier puis ouvrir et sélectionner la bibliothèque.
- On va réutiliser les objets de la bibliothèque : Se positionner sur LIBRARY puis cliquer sur le menu OUTILS-Bibliothèque d’objets. Les onglets sont maintenant visibles.
- On va prendre l'objet et on va glisser dans le noeud Groupe d'objet.
- Forms va afficher cette fenêtre afin de choisir le transfert
- Référence : L’objet dans ce module fait toujours référence à l’objet de la bibliothèque. Donc, si l’objet ou groupe d’objets est modifié dans la bibliothèque, les changements sont automatiquement repercutés sur tous les modules dans lesquels on a mis cet objet ou ce groupe d’objets.
- Copie : L’objet de la bibliothèque est copié au niveau de module. Ceci peut ne pas être intéressant, car toute future modification de l’Objet dans la bibliothèque ne sera pas répercuté au niveau de ce module.
- Dans le cas de l’exemple, on va choisir transfert par référence.
- Remarquez que l'objet est maintenant disponible dans notre module TEST. Il y’a une
flèche ROUGE devant, car elle indique que l’on a fait un transfert par référence.
samedi 17 juillet 2010
Utilisation de 'EXECUTE IMMEDIATE'.
Il est possible qu'on paramètre la création d'une table dans un bloc PL/SQL en utilisant la commande SQL Dynamique EXECUTE IMMEDIATE.
CREATE OR REPLACE PROCEDURE TESTSTRING (String IN Varchar2) AS
Begin
EXECUTE IMMEDIATE String;
end;
On va compiler la procédure et l'exécuter comme suit:
EXEC TESTSTRING(' CREATE TABLE TEST(ID NUMBER, NOM VARCHAR2(30))');
On peut utiliser de la même façon pour supprimer une ou plusieurs lignes. Voici le code:
create or replace procedure EFFACER_ENREG
(Table_Nom in VARCHAR2,
Condition IN VARCHAR2 default NULL)
AS
Clause_Where VARCHAR2(100) := ' WHERE ' || Condition;
Begin
-- Si aucune condition donnée au paramètre, il renvoie la valeur NULL
-- Et il va supprimer tous les enregistrements de la table
IF Condition is NULL then Clause_Where := NULL;
END IF;
EXECUTE IMMEDIATE ' DELETE FROM ' || Table_Nom || Clause_Where;
end;
Pour l'exécuter sans paramètre de condition:
EXEC EFFACER_ENREG('TEST');
Avec un paramètre (une fois que la table soit remplie avec des INSERT INTO):
EXEC EFFACER_ENREG('TEST','ID=1');
Abed
CREATE OR REPLACE PROCEDURE TESTSTRING (String IN Varchar2) AS
Begin
EXECUTE IMMEDIATE String;
end;
On va compiler la procédure et l'exécuter comme suit:
EXEC TESTSTRING(' CREATE TABLE TEST(ID NUMBER, NOM VARCHAR2(30))');
On peut utiliser de la même façon pour supprimer une ou plusieurs lignes. Voici le code:
create or replace procedure EFFACER_ENREG
(Table_Nom in VARCHAR2,
Condition IN VARCHAR2 default NULL)
AS
Clause_Where VARCHAR2(100) := ' WHERE ' || Condition;
Begin
-- Si aucune condition donnée au paramètre, il renvoie la valeur NULL
-- Et il va supprimer tous les enregistrements de la table
IF Condition is NULL then Clause_Where := NULL;
END IF;
EXECUTE IMMEDIATE ' DELETE FROM ' || Table_Nom || Clause_Where;
end;
Pour l'exécuter sans paramètre de condition:
EXEC EFFACER_ENREG('TEST');
Avec un paramètre (une fois que la table soit remplie avec des INSERT INTO):
EXEC EFFACER_ENREG('TEST','ID=1');
Abed
mardi 13 juillet 2010
Certifications ORACLE (OCP).
OCP(Oracle Certified Professional) est une liste des certifications d'ORACLE classées par des catégories, à savoir:
Voici la liste de quelques examens proposés par Oracle:
1Z0-001, 1Z0-047, 1Z0-147, etc....
Pour plus de détails concernant toutes les certifications, démo, etc,.... visitez cette adresse:
http://www.ucertify.com/vendors/Oracle.html
Abed
- Oracle Database Administrator (DBA)
- Oracle Application Developer (Forms, SQL, PL/SQL).
- Oracle Database Operator
- Oracle Java Developer
- Oracle Financial Applications Consultant
Voici la liste de quelques examens proposés par Oracle:
1Z0-001, 1Z0-047, 1Z0-147, etc....
Pour plus de détails concernant toutes les certifications, démo, etc,.... visitez cette adresse:
http://www.ucertify.com/vendors/Oracle.html
Abed
lundi 12 juillet 2010
Dates en ORACLE.
J'ai constaté que la plupart des schémas d'Oracle ont été crées avec un format date AMERCIAN. Parfois, on trouve des difficultés pour faire des INSERT dans une table avec le format suivant (12-FEB-03). Pour remédier à ce problème, voici les étapes:
- Vérifier les paramètres de la session (NLS) avec la syntaxe: SELECT * FROM NLS_SESSION_PARAMETERS;
- Faites la syntaxe suivante:
- ALTER SESSION SET NLS_LANGUAGE = AMERICAN;
- Exécuter cette commande:
SELECT VALUE From NLS_SESSION_PARAMETERS
WHERE PARAMETER='NLS_DATE_FORMAT';
WHERE PARAMETER='NLS_DATE_FORMAT';
- Si le format de la date est incorrect, on peut le changer avec la syntaxe ALTER SESSION SET NLS_DATE_FORMAT='DD-MM-YYYY';
- À ce moment là, on pourrait faire des INSERT dans une table sans problème.
Inscription à :
Articles (Atom)