Я работаю над полем (v5r4) iSeries DB2, это - специальная разновидность DB2.
, Если Вы идете или соединяющийся с iSeries (AS/400), ссылка, упомянутая Anton, является самой превосходной (извините, еще не может голосовать!)
Описывают, не работает над iSeries, но будет работать с DB2 на других платформах.
Ошибка ORA-00933 связана с неверно отформатированным оператором SELECT:
SELECT desp_id_seq.nextval,
dbms_random.string('U',5),
TRUNC(dbms_random.value(0000,9999)),
prod_id from dba_xy.product
prod_name from dba_xy.product;
... когда это должно быть:
SELECT DESP_ID_SEQ.nextval,
DBMS_RANDOM.string('U',5),
TRUNC(DBMS_RANDOM.value(0000,9999)),
t.prod_id,
t.prod_name
FROM dba_xy.product t;
Вам не хватало запятой для разделения prod_id
и prod_name
столбцы, и, кроме того, имели избыточное объявление FROM dba_xy.product в неправильном месте.
При этом таблица dba_xy.despatch
должна содержать только prod_id . Если вам нужно предоставить удобочитаемую версию данных, я рекомендую вам создать представление . Пример:
CREATE VIEW despatch_vw AS
SELECT t.prod_id,
p.prod_name
FROM dba_xy.despatch t
JOIN dba_xy.product p ON p.prod_id = t.prod_id
Может быть, вы получаете нарушение ограничения уникальности, потому что вы дважды вставляете одни и те же строки? Предполагается, что "i" должно использоваться в предложении where оператора insert, или вы действительно хотите, чтобы строки вставлялись дважды?
В вашем первом операторе есть два предложения FROM, поэтому вы получаете синтаксическую ошибку.
select desp_id_seq.nextval,
dbms_random.string('U',5),
trunc(dbms_random.value(0000,9999)),
prod_id, --from dba_xy.product
prod_name from dba_xy.product;