IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PL/SQL Oracle Discussion :

Retour d'une fonction


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Par défaut Retour d'une fonction
    bonjour

    est ce que c'est possible de concevoir une fonction/procédure plsql qui fourni un résultat comme si on avait lancé un banal sélect ? ( ie sans passer par DBMS output !!)

    si oui comment fait-on ?

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 955
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 955

  3. #3
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Il y a aussi les procédures pipelined, genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Select col1, col2, ... From table(proc(param1, param2, ...))

  4. #4
    Membre Expert
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Par défaut
    est ce que je peux faire en sorte que le résultat retourné soit completement construit ? que ce soit une donnée calculée et non quelque chose qui "dévie" d'un tableau.

  5. #5
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 955
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 955
    Par défaut
    Je ne comprends pas, qu'entends tu par une "donnée calculée" ?

  6. #6
    Membre Expert
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Par défaut
    contexte: je dois faire un redressement de donnee sur une base de donnée "plate" avec un shema que je ne connais pas bref.

    du coup j'ai écris un ptit PL/SQL qui cherche un motif dans la "base" c'est le cas de le dire. maintenant que ça fonctionne assez bien, je souhaite "améliorer" la sortie de la fonction en utilisant quelque chose qui se comporte comme un select => du coup c'est compatible avec les outils qui ne gèrent pas le server output et c'est facile à exporter...

    pour info, le package est ci dessous et c'est la version qui compile, ie c'est encore une procédure qui fait des dbms_output

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    create or replace
    Package Body Ppn As 
     
    -- private procedure to check a table against a pattern 
    Procedure Fulltext_Search_Onetable( Pattern In Varchar2, Table_Name In Varchar2, Condition In Varchar2 )
    iS
       statement      Varchar2(2080);
       cursor_Id      Integer;
       Row_Found      Integer;
    Begin
            -- open cursor
            Cursor_Id := Dbms_Sql.Open_Cursor;
            -- create cursor's query
            statement:= 'SELECT 1 found FROM DUAL WHERE EXISTS( SELECT * FROM '||table_name||' WHERE '||condition||' 1=0 )';
            --dbms_output.put_line (statement);
            -- parse cursor
            dbms_sql.parse(cursor_id, statement, dbms_sql.native);
            -- supply binds, this is the only way i found to bind multiple binds with just one value.
            dbms_sql.bind_variable(cursor_id, ':pattern', pattern);
            -- execute cursor and get result
            -- there is a trick, no result records => not found !!!
            row_found:=dbms_sql.execute_and_fetch(cursor_id, false );
            If  Row_Found > 0  Then 
              Dbms_Output.Put_Line (table_name);
            --Else 
            --  dbms_output.put_line (' not ok');    
            END IF;
            -- correctly close cursor
            Dbms_Sql.Close_Cursor(Cursor_Id);
    End Fulltext_Search_Onetable;
     
      Procedure Fulltext_Search( pattern IN Varchar2, SM_SHEMA_OWNER In Varchar2 Default '****', SM_SUFFIX In Varchar2 Default '%M1')
       IS
       condition      VARCHAR2(2000);
       column_found   BOOLEAN;
       BEGIN
     
      -- rechercher parmis les tables de l'utilisateur ****.
        FOR c_table IN(
          SELECT table_name  
          From All_Tables 
          Where Dropped ='NO' And Owner = Sm_Shema_Owner And Table_Name Like SM_SUFFIX )
        LOOP
      -- creer la requete de recherche ( en construisant trouvant et construisant les colonnes sur d )
          condition:= '';
          Column_Found:= False;
          --dbms_output.put(c_table.table_name);
     
          FOR c_column IN(
            SELECT column_name 
            FROM all_tab_columns 
            WHERE 
              low_value <> high_value AND
              ( high_value IS NOT NULL OR low_value IS NOT NULL) AND
              data_type = 'VARCHAR2' AND
              table_name = c_table.table_name )
          LOOP
              -- dbms_output.put_line( c_column.column_name );
              condition:= condition||'"'||c_column.column_name||'" like :pattern OR ';
              column_found:=TRUE;
          END LOOP;
     
      --  maintenant on a la condition on l'affiche...
          If Column_Found Then  
            Fulltext_Search_Onetable( Pattern, c_table.table_name, condition);
          --ELSE
          --    dbms_output.put_line (' not columns');
          END IF;
        END LOOP; --c_table cursor loop.
       End;
     
    End Ppn; -- end of pakage def
    quand je dis "résultat construit" c'est que la liste de table que je souhaite obtenir, je ne comptais la recreer à partir de rien (et non faire une requete compliquée sur all_table pour juste filtrer les tables qui m'interessent )

    et si en prime je peux avoir quelque chose qui affiche les résultats au fur et à mesure que ça trouve, c'est mieux parce que ya environs 550 tables et jusqu'à 300 champs par tables...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. retour d'une fonction
    Par papy_tergnier dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 15/05/2006, 18h21
  2. [XML][XSLT][debutant]retour d'une fonction
    Par maxvador dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 30/03/2006, 15h12
  3. recuperer en php le retour d'une fonction plsql
    Par gismoblue dans le forum Langage SQL
    Réponses: 1
    Dernier message: 14/03/2006, 17h39
  4. PL/SQL retour d'une fonction
    Par aaronw dans le forum PL/SQL
    Réponses: 2
    Dernier message: 13/12/2005, 14h25
  5. [Oracle 9.1] Types de retour d'une fonction PL/SQL
    Par ftrifiro dans le forum PL/SQL
    Réponses: 8
    Dernier message: 12/10/2005, 17h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo