2009-10-15 39 views
7

Recientemente comencé una nueva posición como desarrollador y estoy teniendo problemas con PL/SQL. He usado MS SQL durante varios años, pero estoy descubriendo que PL/SQL es un poco más complicado.Variables de tabla en Oracle PL/SQL?

Una de las cosas que solía hacer al escribir funciones y procedimientos almacenados en MS SQL era poner conjuntos de resultados recurrentes en una variable de tabla para no tener que volver a consultarlos durante mi procedimiento.

Algo como esto:

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

estoy buscando en hacer algo similar en PL/SQL, pero no estoy muy seguro de cómo empezar. Alguna idea si esto es posible?

+0

Aquí es una pregunta similar que podría ayudar tal vez una víctima [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

Respuesta

5

En Oracle a diferencia de los cursores de MS SQL no se consideran el demonio y algo para evitar. Por lo general, en Oracle utilizará los cursores con mucha más frecuencia que en MS SQL. Por supuesto, si puede hacerlo solo con SQL y sin un cursor que sea el mejor, pero no tenga miedo de probar y usar cursores en Oracle. Obtenga un buen libro sobre PL/SQL, este es uno bueno http://www.amazon.com/Oracle-PL-SQL-Programming-4th/dp/0596009771. La publicación de Gratzy es otra opción que puedes usar. Así que obtenga un buen libro que pueda usar para averiguar cuándo usar qué. PL/SQL es un entorno muy rico en comparación con T-SQL. Si bien tiene más de una curva de aprendizaje una vez que superas la curva inicial, es un lenguaje realmente fácil y potente. Y además de eso, es muy divertido.

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; 

Esto creará una tabla anidada que contiene los valores de su tabla. Es importante tener en cuenta que la tabla quedará fuera del alcance al final del bloque anónimo, por lo que todo lo que quiera hacer con él debe hacerse dentro de ese bloque.

+1

+1 para el ejemplo sql –

Cuestiones relacionadas