2010-11-10 1 views
2

Je suis relativement nouveau dans Oracle SQL (même si j'ai écrit un peu de SQL) et j'ai de la difficulté à incorporer une simple instruction SELECT dans une fonction. Il se sent comme ABC SQL, mais je ne peux pas sembler obtenir :(Ecriture d'une instruction select dans une fonction définie par l'utilisateur Oracle

Je pense J'utilise PL-SQL

Voici ce que j'ai jusqu'à présent:

create or replace FUNCTION GET_GROUP_BY_ID RETURN VARCHAR2 
AS my_result 
BEGIN 

    SELECT fav_group.name 
    INTO my_result 
    FROM fav_group 
    WHERE fav_group.id = 12345 

    RETURN my_result; 

END GET_GROUP_BY_ID; 

Comme je l'ai dit, je l'ai essayé beaucoup de variations sur le code ci-dessus en regardant des exemples de code sur Google mais ne peut pas sembler obtenir droit

Répondre

11

utilisation:.

CREATE OR REPLACE FUNCTION GET_GROUP_BY_ID 
RETURN VARCHAR2 AS 

    my_result FAV_GROUP.NAME%TYPE; 

BEGIN 

    SELECT fav_group.name 
    INTO my_result 
    FROM fav_group 
    WHERE fav_group.id = 12345; 

    RETURN my_result; 

END GET_GROUP_BY_ID; 

Le problème était que my_result était utilisé en tant que variable, mais jamais déclaré.

J'ai utilisé la notation %TYPE pour déclarer la variable afin qu'elle utilise le même type de données que la colonne utilisée pour le remplir. Si le type de données de la colonne change, la variable change automatiquement pour convenir - pas de problèmes avec les problèmes de type de données après les modifications de la table, sauf si vous supprimez entièrement la colonne.

+0

Merci pour votre réponse. Lorsque j'essaie ce code, j'obtiens les messages d'erreur suivants: Erreur (4,1): PLS-00103: rencontré le symbole "DECLARE" lors de l'une des actions suivantes: begin package de fonctions pragma procédure sous-type type use forme le curseur courant langue externe Le symbole "begin" a été remplacé par "DECLARE" pour continuer. –

+0

Erreur (15,3): PLS-00103: rencontré le symbole "RETURN" lors de l'attente de l'un des éléments suivants: * & - + ;/at pour mod reste rest et ou groupe ayant l'intersection moins ordre début union où se connecter || multiset –

+0

Erreur (17,21): PLS-00103: Le symbole "fin de fichier" a été rencontré lors de l'une des actions suivantes: begin package de fonctions pragma procédure sous-type type use forme le curseur actuel –

0

En réponse à mon dernier commentaire de OMG Poneys réponse ci-dessus:

Pour obtenir un plus d'un résultat de retour d'une fonction, utilisez la REF CURSOR

create or replace 
PACKAGE BODY REPORTING AS 

    FUNCTION GET_GROUP_BY_GID RETURN REF_CURSOR AS 

    RESULT_SET REF_CURSOR; 

    BEGIN 
     OPEN RESULT_SET FOR 
     SELECT favorite_group.name 
     FROM favorite_group 
     WHERE favorite_group.creator_gid = 450160; 

     RETURN RESULT_SET; 

     EXCEPTION WHEN OTHERS THEN 
     RAISE; 


    END GET_GROUP_BY_GID; 
Questions connexes