Varias operaciones CON el uso de
Pregunta
Es allí una manera de ejecutar múltiples operaciones mediante el WITH
declaración?
Algo como
WITH T AS
(
SELECT * FROM Tbl
)
BEGIN
OPEN P_OUTCURSOR FOR
SELECT * FROM T;
SELECT COUNT(*) INTO P_OUTCOUNT FROM T;
END;
Quiero seleccionar algunos de los datos y el número de...
Solución
Sólo puede tener una declaración después de la CTE.Sin embargo, puede definir posterior Cte basado en un anterior:
WITH t1 AS (
SELECT a, b, c
FROM table1
)
, t2 AS (
SELECT b
FROM t1
WHERE a = 5
)
SELECT *
FROM t2;
Dado que usted está tratando de contar las filas y rellenar un ref cursor a partir del mismo conjunto de resultados, puede ser más adecuado realizar una de las siguientes:
- crear una vista
- el escenario temporal de los resultados en una tabla temporal
Por último, si la consulta es bastante sencilla, sólo tienes que escribir de una vez por el conde, y de nuevo por el cursor.Sencillez y legibilidad triunfo el SECO principio en este caso.
Otros consejos
No, un CTE o with
Se define la cláusula dentro del alcance de una sola declaración
Sin embargo, a veces puede hacer más de lo que cabría esperar con una sola declaración, por ejemplo:
with w as (select v from t3)
insert all into t1(v) values(v)
into t2(v) values(v)
select v from w;
La forma 'normal' oracle de almacenar conjuntos de resultados temporales (si es necesario) es usar un GTT:
GLOBAL TEMPORARY
mesa.