Как можно перебрать переменную? Я получаю ОШИБКУ PLS-00103 - PullRequest
0 голосов
/ 26 октября 2018

Я хочу перебрать переменную с именем C_ESTACION_ID, но я получил ОШИБКУ PLS-00103

Я безуспешно попробовал предложенные решения -> Переменная в SQL -> ОШИБКА PLS-00103: Обнаружен символ «ВЫБОР»

SELECT         
to_char (NVL(100*TOTAL_TAX_AMB1/(SELECT COUNT(*) FROM ITV2_INSPECCIONES WHERE N_ANNO=2018 AND C_ESTACION_ID=28 AND N_FASE=1),0),'fm990.00') AS TAXIS_Y_AMBULANCIAS_PRIMERA
FROM(
     SELECT      
     SUM(CASE WHEN TIPO_USO_VEHICULO='Taxi' THEN 1 ELSE 0 END + CASE WHEN TIPO_USO_VEHICULO='Ambulancia' THEN 1 ELSE 0 END ) AS TOTAL_TAX_AMB1
     FROM(
          SELECT 
          INSP.C_ESTACION_ID AS ESTACION,
          -- -----------
          FROM 
          -- --------
          WHERE 
          INSP.N_ANNO=2016
          AND INSP.C_ESTACION_ID=28
          -- -----------
          GROUP BY 
          -- ------------
          ))

Я хочу, чтобы переменная C_ESTACION_ID имела значения 28 и выполняла запрос, 29 и выполняла запрос, 30 и выполняла запрос ...

1 Ответ

0 голосов
/ 26 октября 2018

Я хочу, чтобы переменная C_ESTACION_ID имела значения 28 и выполняла запрос, 29 и выполняла запрос, 30 и выполняла запрос

Не знаю точно, чего вы пытаетесь достичь, но я думаю, вам нужно заменить эту строку ...

INSP.C_ESTACION_ID=28

... с

INSP.C_ESTACION_ID in ( 28, 29, 30 )

Однако это не исправит вашу ошибку PLS-00103, вызванную вашими вложенными утверждениями select. Вам нужно переписать ваш запрос, чтобы он получал итоги в обычных запросах - или подзапросах - и передавал эти значения во внешний запрос для выполнения окончательной арифметики. Примерно так:

 SELECT q1.N_ANNO
        , q1.C_ESTACION_ID as ESTACION
        , 100 * q1.TOTAL_TAX_AMB1 / q2.TAXIS_Y_AMBULANCIAS_PRIMERA ) TAXIS_Y_AMBULANCIAS_PRIMERA 
 FROM ( SELECT INSP.C_ESTACION_ID
               , INSP.N_ANNO
               , SUM(CASE WHEN TIPO_USO_VEHICULO='Taxi' THEN 1 ELSE 0 END 
                     + CASE WHEN TIPO_USO_VEHICULO='Ambulancia' THEN 1 ELSE 0 END ) AS TOTAL_TAX_AMB1
        FROM  -- -----------
        WHERE INSP.N_ANNO = 2016
        AND INSP.C_ESTACION_ID in (28, 29, 30)
        GROUP BY INSP.C_ESTACION_ID
               , INSP.N_ANNO
      ) q1
      join (SELECT N_ANNO,  C_ESTACION_ID, COUNT(*) AS TAXIS_Y_AMBULANCIAS_PRIMERA
              FROM ITV2_INSPECCIONES 
              WHERE N_FASE=1) q2
       on q1.N_ANNO = q2.N_ANNO
       and q1.C_ESTACION_ID = q2.C_ESTACION_ID 

Примечание: это может не дать точного ответа, который вам нужен. Также возможно упростить его, объединив два подзапроса q1 и q2 в один подзапрос. Но вы не опубликовали полный запрос и не опубликовали модель данных, примеры данных или объяснения, поэтому мы не можем написать оптимальное рабочее решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...