2009-10-15 4 views
7

J'ai récemment commencé un nouveau poste de développeur et j'ai un peu de mal avec PL/SQL. J'ai utilisé MS SQL pendant un certain nombre d'années mais je trouve PL/SQL un peu plus compliqué. L'une des choses que j'avais l'habitude de faire en écrivant des fonctions et des procédures stockées dans MS SQL était de mettre des ensembles de résultats réapparus dans une variable de table ainsi je n'aurais pas besoin de les rafraîchir tout au long de ma procédure.Variables de table dans Oracle PL/SQL?

Quelque chose comme ceci:

declare @badPeople table(recordPointer int) 
insert into @badPeople 
select BP_Record_Pointer 
from People 
where BP_Bad = 1 

Je regarde faire quelque chose de similaire dans PL/SQL, mais je ne suis pas tout à fait sûr de savoir comment commencer. Des idées si c'est même possible?

+0

Voici une question similaire qui pourrait aider peut-être un dupe [http://stackoverflow.com/questions/670461/does-oracle-have-an-equivalent-of-mssqls-table-variables](http:// stackoverflow.com/questions/670461/does-oracle-have-an-equivalent-of-mssqls-table-variables) – Gratzy

Répondre

5

Dans Oracle contrairement à MS SQL, les curseurs ne sont pas considérés comme le diable et quelque chose à éviter. Donc typiquement dans Oracle, vous utiliserez des curseurs beaucoup plus souvent que vous le feriez dans MS SQL. Bien sûr, si vous pouvez le faire avec seulement SQL et aucun curseur qui est le meilleur, mais n'ayez pas peur de tester et d'utiliser des curseurs dans Oracle. Obtenez un bon livre sur PL/SQL, c'est un bon livre http://www.amazon.com/Oracle-PL-SQL-Programming-4th/dp/0596009771. Le message de Gratzy est une autre option que vous pouvez utiliser. Alors, prenez un bon livre que vous pouvez utiliser pour déterminer quand utiliser quoi. PL/SQL est un environnement très riche comparé à T-SQL. Alors qu'il a plus d'une courbe d'apprentissage une fois que vous obtenez sur la courbe initiale, c'est un langage très facile et puissant. Et en plus, c'est très amusant.

10
declare 
    type t_number is table of number; 
    v_numbers t_number; 
begin 
    select BP_Record_Pointer 
    bulk collect into v_numbers 
    from People 
    where BP_Bad = 1; 
end; 

Cela va créer une table imbriquée contenant les valeurs de votre table. Il est important de noter que la table sera hors-champ à la fin du bloc anonyme, donc tout ce que vous voulez faire avec elle doit être fait à l'intérieur de ce bloc.

+1

+1 pour l'exemple sql –

Questions connexes