Exercism : Gigasecond

Étiquettes

, ,

Gigasecond est un exercice pour calculer la date d’une personne qui a déjà célébré ou il va célébrer son 1 GS anniversaire.

Donc j’ai créé un package comme le site Exercism demande avec une seule ligne de commande PLSQL simple dans une fonction :

CREATE OR REPLACE PACKAGE gigasecond 
IS 
   FUNCTION since ( 
     brt             DATE 
   ) RETURN date; 
END gigasecond; 
/
 
CREATE OR REPLACE PACKAGE BODY gigasecond 
IS 
   FUNCTION since ( 
     brt             DATE 
   ) RETURN date 
   IS  
   BEGIN 
     RETURN brt + power(10,9) / (24 * 60 * 60); 
   END since; 
END gigasecond; 
/

Enfin vous trouverez tous les fichiers de cet exemple ici.

Exercism : Hamming

Étiquettes

, , ,

Aujourd’hui je partage avec vous l’exercice de Hamming, voici le Readme et le Unit Test.

Hamming est un programme qui calcule la différence entre deux brins d’ADN, ci-dessous un exemple de comparaison entre deux brins d’ADN en comptant combien de nucléotides sont différents de leur équivalent dans l’autre chaîne.

GAGCCTACTAACGGGAT
CATCGTAATGACGGCCT
^ ^ ^  ^ ^    ^^

La distance entre ces deux ADN est 7

Package PLSQL :

CREATE OR REPLACE PACKAGE hamming
IS
  FUNCTION distance (
    i_first                                       VARCHAR2
   ,i_second                                      VARCHAR2
  ) RETURN PLS_INTEGER ;

END hamming;
/

CREATE OR REPLACE PACKAGE BODY hamming
IS
  FUNCTION distance (  
    i_first                                       VARCHAR2
   ,i_second                                      VARCHAR2
  ) RETURN PLS_INTEGER 
  IS 
  
    res PLS_INTEGER := 0;
  
  BEGIN
  FOR i IN 1 .. NVL(LENGTH(i_first), 0) LOOP
    IF NVL(SUBSTR(i_first, i, 1), 0) != NVL(SUBSTR(i_second, i, 1), 0) THEN
      res := res + 1;
    END IF;
  END LOOP;
    RETURN res;
  
  END distance;
END hamming;
/

Enfin vous trouverez tous les fichiers de cet exemple ici.

Exercism : Rna Transcription

Étiquettes

, , ,

Voici le Readme et le Unit Test de notre exercice d’aujourd’hui.
la solution est simple j’utilise la fonction Translate d’oracle pour remplacer une chaîne de caractère par une autre.

Ci-dessous le package qui permet de faire ça :

CREATE OR REPLACE PACKAGE complement
IS
    FUNCTION of_dna (
         i_dna            VARCHAR2
    ) RETURN VARCHAR2;

    FUNCTION of_rna (
         i_rna            VARCHAR2
    ) RETURN VARCHAR2;
END complement;
/

CREATE OR REPLACE PACKAGE BODY complement
IS
    g_dna                 VARCHAR2(4) := 'GCAU';
    g_todna               VARCHAR2(4) := 'CGTA';
    g_rna                 VARCHAR2(4) := 'CGTA';
    g_torna               VARCHAR2(4) := 'GCAU';

    FUNCTION of_dna (
         i_dna            VARCHAR2
    ) RETURN VARCHAR2
    IS
    BEGIN
        RETURN translate (i_dna, g_dna, g_todna);
    END of_dna;

    FUNCTION of_rna (
        i_rna             VARCHAR2
    ) RETURN VARCHAR2
    IS
    BEGIN
        RETURN translate (i_rna, g_rna, g_torna);
    END of_rna;
END complement;

Enfin vous trouverez tous les fichiers de cet exemple ici.

Quiz N°06

Étiquettes

, , , , , , , , , , ,

Question 01) Quel différence existe-t-il entre RANK et DENSE_RANK donné un exemple syntaxique :
 

Question 02) Quels sont les déclencheurs qui peuvent être compilés ?

    a)CREATE OR REPLACE TRIGGER T1 BEFORE UPDATE
    ON CATEGORIES
    BEGIN
    :NEW.DESCRIPTION := 'DESCRIPTION';
    END T1;

 

    b)CREATE OR REPLACE TRIGGER T2 AFTER UPDATE
    ON CATEGORIES
    BEGIN
    :NEW.DESCRIPTION := 'DESCRIPTION';
    END T2;

 

    c)CREATE OR REPLACE TRIGGER T3 BEFORE UPDATE
    ON CATEGORIES FOR EACH ROW
    BEGIN
    :NEW.DESCRIPTION := 'DESCRIPTION';
    END T3;

 

    d)CREATE OR REPLACE TRIGGER T4 AFTER UPDATE
    ON CATEGORIES FOR EACH ROW
    BEGIN
    :NEW.DESCRIPTION := 'DESCRIPTION';
    END T4;

 

    e)CREATE OR REPLACE TRIGGER T5 BEFORE INSERT
    ON CATEGORIES FOR EACH ROW
    BEGIN
    :OLD.DESCRIPTION := 'DESCRIPTION';
    END T5;

 

    f)CREATE OR REPLACE TRIGGER T6 AFTER INSERT
    ON CATEGORIES FOR EACH ROW
    BEGIN
    :OLD.DESCRIPTION := 'DESCRIPTION';
    END T6;

 

    g)CREATE OR REPLACE TRIGGER T7 AFTER INSERT
    ON CATEGORIES FOR EACH ROW
    DECLARE a NUMBER;
    BEGIN
    a:= :OLD.DESCRIPTION;
    END T7;

 

Question 03) Que veut dire ce message à la compilation d’une procédure dans le body d’un package :
PLS-00323: subprogram or cursor 'PROCEDURE_TEST' is declared in a package specification and must be defined in the package body ?
 

Question 04) Quelle instruction permet d’effectuer des jointures avec des liens hiérarchiques père – fils ?
 

Question 05) Quelle est la différence entre une vue et une vue matérialisée ?
 

Question 06) Quelle est la différence entre une procédure, une fonction, une séquence et un package ?
 

Question 07) Copier un échantillon d’une TABLE A qui se trouve dans le schema PROD vers la TABLE B qui se trouve dans le schéma DEV avec le critère ACTION DATE > 06/02/2015
 

Question 08) Quelles table accessibles au sein des triggers permettent de manipuler les données en cours d’instruction / modification / suppression ?

    a) OLD et NEW
    b) INSERTED et DELETED
    c) ADDED et DELETED

 

Question 09) Quelle(s) est(sont) la(les) différence(s) entre les triggers en BEFORE et AFTER ?

    a) Le trigger en AFTER ne peut accéder aux tables OLD et NEW
    b) Le trigger en AFTER ne peut annuler l'instruction déclenchante
    C) Le trigger en AFTER ne peut modifier la table NEW

 

Question 10) Quel(s) attribut(s) ne s’applique(nt) pas à un curseur ?

    a) %TYPE
    b) %ROWCOUNT
    c) %ROWTYPE

Quiz N°05

Étiquettes

, , , , , , , , ,

Question 01) Qu’est ce qu’une transaction ?

    a) Un ensemble d’instructions globalement validées ou annulées
    b) Un ensemble d’instructions ne pouvant être annulées
    c) Un ensemble d’instructions exécutées consécutivement au sein d’une même session

 

Question 02) Expliquer comment fonctionne les index et citer les différents types d’index
 

Question 03) Quelles sont les caractéristiques d’un index ?

    a) Il accélére les requêtes SELECT et ralentit les INSERT, UPDATE et DELETE
    b) Il accélére toutes les requêtes
    c) Il permet systématiquement d’éviter la présence de doublons

 

Question 04) Quelles contraintes d’intégrité génèrent automatiquement la création d’un index ?

    a) Les clé primaires
    b) Les clé étrangères
    c) Les champs uniques

 

Question 05) Quelle est la meilleure définition d’une vue ?

    a) Une table dans laquelle sont recopiées un ensemble de données liées à une requête
    b) Une requête pré-compilée stockée en base
    c) Un alias pointant vers un autre objet de la base

 

Question 06) Pour une mise à jour, quel est l’intérêt d’un update massif ou d’un curseur ?
 

Question 07) Nous disposons de 2 tables (clients et commandes), écrire la requête permettant de récupérer tous les clients n’ayant pas de commande.
 

Question 08) A quoi sert l’instruction MERGE?
 

Question 09) Comment améliorer cette requête :

SELECT champA, champB, SUM(champC)
FROM TABLE1
GROUP BY champA, champB
UNION ALL
SELECT champA, NULL, SUM(champC)
FROM TABLE1
GROUP BY champA
UNION ALL
SELECT NULL, NULL, SUM(champC)
FROM TABLE1

 

Question 10) Que signifie TABLESPACE BIGFILE?