BLOB-объект в запросе с объединениями для создания представления - PullRequest
0 голосов
/ 27 апреля 2018

Я борюсь с столбцом типа blob, чтобы присоединить его к представлению с несколькими объединениями в нем. Тип BLOB-объекта MAINAPL.GRAPHICS.GRAF и выделен ниже в моем запросе. Я получаю следующую ошибку из базы данных Oracle:

ORA-00932 и ведет именно к этому столбцу.

Есть ли возможность в любом случае присоединиться к блоб-типу? Мне нужно это как обычный столбец в этом сложном представлении.

Мой основной запрос:

    CREATE OR REPLACE FORCE VIEW SECAPL.VIEW_DATAFEED2 AS
SELECT
MIN(CASE WHEN MAINAPL.ARTCOPY.SPRID = 'EN' AND MAINAPL.ARTCOPY.ARTCOPYNUM = 1 THEN MAINAPL.ARTCOPY.ART-COPY-1 ELSE NULL END ) COPY1-EN, 
MAX(CASE WHEN MAINAPL.CONT.TONGID = 'EN' AND MAINAPL.CLASS1.CLASSTFRLE1 = '1' THEN MAINAPL.CONT.COPY-ONLY END) AS TYPE-EN,
MAINAPL.ARTICLEGRAPHICS.GRAPHID,
**MAINAPL.GRAPHICS.GRAF**,
MAINAPL.GRAPHICS.GRAFFORMAT
FROM
MAINAPL.ARTICLE
LEFT JOIN MAINAPL.ARTCOPY ON MAINAPL.ARTICLE.ARTID = MAINAPL.ARTCOPY.ARTID
INNER JOIN MAINAPL.ARTICLEGRAPHICS ON MAINAPL.ARTICLE.ARTID = MAINAPL.ARTICLEGRAPHICS.ARTID
INNER JOIN MAINAPL.GRAPHICS ON MAINAPL.GRAPHICS.GRAPHICSID = MAINAPL.ARTICLEGRAPHICS.GRAPHICSID

GROUP BY MAINAPL.ARTICLE.ARTID,
MAINAPL.ARTICLEGRAPHICS.GRAPHID,
**MAINAPL.GRAPHICS.GRAF**,
MAINAPL.GRAPHICS.GRAFFORMAT

1 Ответ

0 голосов
/ 27 апреля 2018

Я думаю, проблема в том, что вы пытаетесь группировать по столбцу BLOB-объектов. Вы можете обойти это легко. Используйте два выбора. Первый выбор в основном то, что у вас есть, но без большого двоичного объекта (и, возможно, без других столбцов, которые можно получить позже). Вы все еще получаете графид. Второй внешний выбор соединяет внутренний выбор с таблицей mainapl.grapics в Graphid и возвращает все, включая BLOB-объекты. Надеюсь, это имело смысл?

EDIT:

CREATE OR REPLACE FORCE VIEW SECAPL.VIEW_DATAFEED2 AS
  select sub.copy1-en, sub.type-en, sub.graphicsid,
     graph.graf, graph.grafformat
  from (SELECT
          MIN(CASE WHEN MAINAPL.ARTCOPY.SPRID = 'EN' AND MAINAPL.ARTCOPY.ARTCOPYNUM = 1 THEN MAINAPL.ARTCOPY.ART-COPY-1 ELSE NULL END ) COPY1-EN, 
          MAX(CASE WHEN MAINAPL.CONT.TONGID = 'EN' AND MAINAPL.CLASS1.CLASSTFRLE1 = '1' THEN MAINAPL.CONT.COPY-ONLY END) AS TYPE-EN,
          MAINAPL.ARTICLEGRAPHICS.GRAPHICSID
        FROM MAINAPL.ARTICLE
        LEFT JOIN MAINAPL.ARTCOPY ON MAINAPL.ARTICLE.ARTID = MAINAPL.ARTCOPY.ARTID
        INNER JOIN MAINAPL.ARTICLEGRAPHICS ON MAINAPL.ARTICLE.ARTID = MAINAPL.ARTICLEGRAPHICS.ARTID
        INNER JOIN MAINAPL.GRAPHICS ON MAINAPL.GRAPHICS.GRAPHICSID = MAINAPL.ARTICLEGRAPHICS.GRAPHICSID
        GROUP BY MAINAPL.ARTICLEGRAPHICS.GRAPHICSID
        ) sub
  join MAINAPL.GRAPHICS ON MAINAPL.GRAPHICS.GRAPHICSID = sub.GRAPHICSID

Это может не сработать, но должно проиллюстрировать это. Я немного переписал внутренний SQL, поскольку вы, казалось, слишком много группировали, я не уверен, хорошо это или плохо. Я также исправил возможную ошибку с именем столбца graphicsid.

В любом случае, суть должна быть ясной - найдите нужные записи с внутренним SQL, который включает в себя идентификатор, необходимый для извлечения большого двоичного объекта из внешнего SQL.

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