2009-03-25 9 views
2

J'ai une variable appelée c_kilometers. J'ai un curseur qui saisit un tas de disques qui ont ces kilomètres. J'ai besoin d'exécuter deux instructions SELECT distinctes dans le curseur qui saisissent simplement un kilomètre d'une table en fonction des valeurs du curseur et exécutent un autre SELECT faisant la même chose sur une autre table.SELECT INTO variable, deux instructions, ajouter des variables

SELECT t.kilometers INTO c_kilometers 
FROM table_name WHERE WHERE l.code = cursor_t.code_att 

SELECT g.kilometers INTO c_kilometers 
FROM table_name WHERE l.code = cursor_t.code_aff 

Ma question est ce que je peux ajouter les c_kilometers ensemble sans créer une variable temporaire pour tenir des valeurs? Je n'ai pas utilisé PL/SQL depuis un moment, et je ne me souviens pas d'avoir jamais fait ça, donc c'est plus une question d'apprentissage que n'importe quoi.

+0

Il est pas clair ce que votre essaient de faire. Dans votre exemple, c_kilometers sera remplacé par la deuxième requête. Veuillez fournir quelques exemples de données et le résultat que vous souhaitez obtenir. – Quassnoi

+0

C'est exactement ce que je demande. Je ne veux pas écraser c_kilometers. Je veux les ajouter ensemble. Est-ce que créer une variable temporaire est la pratique standard, et placer le second SELECT dans le temporaire, puis faire c_kilometers = c_kilometers + c_temporary? – jlrolin

Répondre

6

A condition que vos deux requêtes renvoient toujours exactement une ligne, vous pouvez faire une des opérations suivantes:

/* Variant 1 */ 


SELECT t.kilometers + g.kilometers 
INTO c_kilometers 
FROM table_name t, table_name2 g 
WHERE etc1 
     AND etc2 

/* Variant 2 */ 

SELECT t.kilometers 
INTO c_kilometers 
FROM table_name 
WHERE etc; 

SELECT c_kilometers + g.kilometers 
INTO c_kilometers 
FROM table_name2 
WHERE etc; 

S'ils sont dans la même table que vous avez publié, vous pouvez utiliser:

SELECT COALESCE(SUM(kilometers), 0) 
INTO c_kilometers 
FROM table_name 
WHERE l.code IN (cursor_t.code_aff, cursor_t.code_att) 

Il semble qu'il sera plus efficace de mettre table_name dans votre requête SELECT qui produit le curseur.

Si vous publiez cette requête, je vais probablement pouvoir vous aider à le faire.

+0

Je suis désolé, j'ai mal placé les sélections. Ils sont en fait sur la même table, mais en utilisant différentes clauses WHERE. – jlrolin

+0

Je pense que votre deuxième script fonctionne bien. Merci d'avoir répondu. – jlrolin

1

Rejoignez Selects comme ceci: SELECT a.kilometers + b.kilometers FROM (SELECT code, kilometers FROM table_name WHERE ...) a JOIN (SELECT code, kilometers FROM table_name WHERE ...) b ON a.code = b.code

Questions connexes