2010-01-27 4 views
1

je dois exécuter quelque chose comme:Passant SQL à un Oracle lier la variable

select 
[very big SQL] 
where phone_number in(:SQL2) 

Est-il possible d'utiliser la variable bind pour SQL2?
Je veux enregistrer le plan d'exécution du SQL principal.

Merci.

Répondre

2

Créer une table temporaire et sauvegardez.y avant d'exécuter SQL1 s » Résultats SQL2:

CREATE GLOBAL TEMPORARY TABLE mytemptable (id INT NOT NULL) 

CREATE OUTLINE ol_sql1 
ON 
SELECT * 
FROM sql1 
WHERE id IN 
     (
     SELECT id 
     FROM mytemptable 
     ) 

INSERT 
INTO mytemptable 
SELECT * 
FROM sql2 

SELECT * 
FROM sql1 
WHERE id IN 
     (
     SELECT id 
     FROM mytemptable 
     ) 
+0

Mais le problème est que de nombreux utilisateurs peuvent exécuter ce SQL en même temps –

+0

@Hec: quel 'SQL'? 'SQL1',' SQL2', les deux? – Quassnoi

+0

OK, je vais le décrire un peu plus. Voici un SQL simple (le vrai sql principal dans beaucoup plus compliqué ofcourse): [sélectionnez * des téléphones où phone_number dans (sélectionnez column1 de temp_table1)]. de nombreux utilisateurs exécutent l'ensemble du SQL, mais pour chaque exécution, le système crée une nouvelle table temporaire (de sorte que le SQL interne a changé). –

0

De plus à point de Quassanoi. Il semble que vous ne soyez pas familier avec les tables temporaires. This est une bonne introduction.

Vous créez uniquement la table une fois. Puis, à une session donnée vous d'abord:

  1. remplir la table temporaire
  2. exécuter votre requête tirer de la table temporaire rollback
  3. .

Il n'y a pas de risque de conflit/chevauchement avec les données d'une autre session.

+0

également: l'étape (3) peut être COMMIT ou ROLLBACK. –

0

Si cette requête est exécutée plusieurs fois, je n'utiliserais pas de table temporaire pour cela.

Il y a un « truc » pour lier un inlist, que Tom Kyte décrit sur son blog:

http://tkyte.blogspot.com/2006/06/varying-in-lists.html

Je serais prêt à parier sur que d'être beaucoup plus efficace. Il devrait être facile à prouver avec une trace SQL.

Questions connexes