Объявите длинную строку для использования несколько раз в запросе ORACLE - PullRequest
0 голосов
/ 23 апреля 2019

Привет! Мне нужен запрос buid в oracle и для некоторых материалов, и я хочу разметить эти материалы один раз, и я хочу использовать эту переменную в запросе. Переменная будет представлять собой строку строк.

Это мой запрос, но он неверный. Как я могу написать правильный запрос:

  v_material varchar2(18000) := '2421032060SST','2421040080SST','2421050080SST';

SELECT MARA.MATERIAL,MARA.NAZWA_MATERIALU,MARA.JM,MARA.MAABC
FROM OLAP_DANE.MV_SAP_MARA MARA
Left outer join
(select something
from a
where material in v_material)c
on c.material in mara.material
WHERE MARA.MATERIAL = v_material
;

1 Ответ

0 голосов
/ 23 апреля 2019

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

v_material varchar2(18000) := ',2421032060SST,2421040080SST,2421050080SST,';

и при использовании в запросе

... and instr(','|| MARA.Materials ||',', v_material) > 0

2. Или, во-вторых, и это более правильно с моей точки зрения. объявить тип таблицы уровня схемы строки

create or replace type TStrings as table of varchar2(150);

1010 * объявить *

v_materials TStrings := TStrings('2421032060SST','2421040080SST','2421050080SST');

, а затем использовать в запросе, как

...  select column_value from table(v_material) ...

как то так.

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