Как выполнить итерацию переменной? я получаю error pls-00103.

Я хочу повторить переменную с именем C_ESTACION_ID, но получил сообщение ERROR 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 и выполняла запрос ...

Что вы подразумеваете под «итерацией» переменной? Можете ли вы перефразировать свой вопрос, показав образец ввода таблицы и ожидаемый результат?

Tim Biegeleisen 26.10.2018 08:12

Пожалуйста, разложите свой код более четко. Читаемость - это особенность, особенно когда просите кучу незнакомцев в Интернете помочь вам улучшить ваш код.

APC 26.10.2018 08:34

Также не задавайте один и тот же вопрос более одного раза. В прошлый раз вы не получили удовлетворительного ответа, потому что опубликовали фрагмент кода и не смогли адекватно объяснить свою проблему. Для справки в будущем у вас должен быть отредактировал этот вопрос, чтобы предоставить более подробную информацию и объяснение, а не задавать новый вопрос.

APC 26.10.2018 08:54
0
3
46
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

I want the variable C_ESTACION_ID to have the values 28 and execute the query, 29 and execute the query, 30 and execute the query

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

INSP.C_ESTACION_ID=28

... с участием

INSP.C_ESTACION_ID in ( 28, 29, 30 )

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

 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 в один подзапрос. Но вы не опубликовали полный запрос и не опубликовали модель данных, образцы данных или объяснение, поэтому мы не можем написать оптимальное рабочее решение.

Спасибо APC. Это то, что я хочу. Я не могу редактировать вопрос из-за слишком большого количества кода. Я новичок здесь и в мире sql извините

Raulitus 26.10.2018 09:23

Я почистил код, чтобы попробовать: SELECT q1.N_ANNO,q1.C_ESTACION_ID FROM( SELECT INSP.C_ESTACION_ID , INSP.N_ANNO FROM ITV2_INSPECCIONES INSP WHERE INSP.N_ANNO = 2016 AND INSP.C_ESTACION_ID in (28, 32, 34) GROUP BY INSP.C_ESTACION_ID , INSP.N_ANNO) q1; JOIN (SELECT N_ANNO FROM ITV2_INSPECCIONES ) q2 on q1.N_ANNO = q2.N_ANNO and q1.C_ESTACION_ID = q2.C_ESTACION_ID, но показывает только одну строку

Raulitus 26.10.2018 10:45

Это не сработает, потому что вы не выбрали C_ESTACION_ID из ITV2_INSPECCIONES

APC 26.10.2018 10:47

Другие вопросы по теме