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...

¿Fue útil?

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
.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a dba.stackexchange
scroll top