@ince

Почему не могу создать процедуру?

Создаю процедуру
CREATE OR REPLACE PROCEDURE UNPIVOT_TEMP_CRE AS 
BEGIN
    INSERT INTO test( DATETIME, QUARTER, "YEAR", ID_LOCATION, ID_TYPE, PRICE ) 
    Select
        p.DATETIME	
      , p.QUARTER	
      , p."YEAR"	
      , p.ID_LOCATION
      , t."ID"
      , p.PRICE 
      
    FROM
         ( SELECT DATETIME	
                , QUARTER	
                , "YEAR"	
                , ID_LOCATION
                , "TYPE"
                , PRICE          
          FROM TEMP
          UNPIVOT (
          PRICE FOR "TYPE" IN (OFFICES_BUSINESS_CENTER,
              OFFICES_OTHER,
              RETAIL_SHOPPING_CENTER,
              RETAIL_STREET,
              RETAIL_OTHER,
              WAREHOUSE_COMPLEX,
              WAREHOUSE_OTHER,
              LAND_LIVING,
              LAND_COMMERCIAL,
              LAND_INDUSTRIAL)
              )
          ) p
    JOIN  TYPES_RE t
      ON  LOWER(SUBSTR(p."TYPE", 1, INSTR(p."TYPE", '_')-1)) = LOWER(t.subtype1)
      AND LOWER(SUBSTR(p."TYPE", INSTR(p."TYPE", '_')+1))    = LOWER(t.subtype2);      
    --
    execute immediate 'DROP TABLE TEMP';
    --NULL;
END UNPIVOT_TEMP_CRE;


Возникает ошибка на строке
INSERT INTO AVG_PRICE_HISTORY ( DATETIME, QUARTER, "YEAR", ID_LOCATION, ID_TYPE, PRICE )
и на строке LAND_INDUSTRIAL)

Ошибки:
Error(3,5): PL/SQL: SQL Statement ignored
Error(30,15): PL/SQL: ORA-00904: "LAND_INDUSTRIAL": недопустимый идентификатор


В чем проблема?
  • Вопрос задан
  • 47 просмотров
Пригласить эксперта
Ответы на вопрос 1
Vapaamies
@Vapaamies
Разработчик будущей ОС для ПК размером 250 МБ
Походу в unpivot нужно указывать строковые значения через as, которые заменят поля (а поля, в свою очередь, должны присутствовать в разворачиваемой таблице):
unpivot price for "TYPE" in (
  OFFICES_BUSINESS_CENTER as 'OFFICES_BUSINESS',
  OFFICES_OTHER as 'OFFICES_OTHER',
  ...
  LAND_INDUSTRIAL as 'INDUSTRIAL'
)

Oracle разбирает SQL-выражения с конца, поэтому ошибки выдаются тоже с конца.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы