Я пытаюсь запустить запрос в DB2, который проходит по каждому идентификатору пользователя, полученному из столбца, и вставляет его в другую таблицу со всеми другими уникальными значениями. Я продолжаю получать проблемы, пытаясь вставить. Ниже приведен код ошибки.

Может кто-нибудь помочь, пожалуйста, что не так с приведенным ниже запросом.

FOR v_row AS  
SELECT Test.USR_ID FROM (SELECT usr_id 
FROM   dbo.usr_cust_xref ucx 
       JOIN dbo.custid_acct_xref cax 
         ON ucx.cust_id = cax.cust_id 
       JOIN dbo.acct_brdng_xref abx 
         ON cax.acct_nbr = abx.acct_nbr 
WHERE  abx.brdng_cd = 'PN' 
UNION 
SELECT uax.usr_id 
FROM   dbo.usr_acct_xref uax 
       JOIN dbo.acct_brdng_xref abx 
         ON uax.acct_nbr = abx.acct_nbr 
WHERE  abx.brdng_cd = 'PN' ) as Test


    DO           

EXECUTE IMMEDIATE 'insert into cxxcow.USERS_RESOURCES(RSRC_ID,USER_ID,UR_INSERT_FG,UR_INQUIRY_FG,UR_UPDTE_FG,UR_DELETE_FG,UR_BROWSE_FG,UR_OPENCLOSE_FG,
UR_UPT_DTE,UR_UPT_USR,UR_ACCESS_DTE,UR_ACCESS_USR,UR_CODE_WORD)
values('WEB-ICD-RPBD',' || v_row.usr_id || ','N','N','Y','N','N','O',CURRENT TIMESTAMP,'AMARENDAR',CURRENT TIMESTAMP,'AMARENDAR',' ')'



END FOR

- Ошибка: Ошибка DB2 SQL: SQLCODE = -199, SQLSTATE = 42601, SQLERRMC = FOR; GET SQL SAVEPOINT HOLD FREE ASSOCIATE, DRIVER = 3.53.70 SQLState: 42601 ErrorCode: -199

-1
amar 24 Апр 2017 в 17:45

2 ответа

Лучший ответ

Нет необходимости в вашем случае использовать для цикла, вы можете сделать это напрямую (лучше в производительности и ответственности)

insert into cxxcow.USERS_RESOURCES
(
RSRC_ID, USER_ID, UR_INSERT_FG, UR_INQUIRY_FG, UR_UPDTE_FG, UR_DELETE_FG, UR_BROWSE_FG,
UR_OPENCLOSE_FG, UR_UPT_DTE, UR_UPT_USR, UR_ACCESS_DTE, UR_ACCESS_USR, UR_CODE_WORD
)
SELECT 'WEB-ICD-RPBD', f0.USR_ID, 'N', 'N', 'Y', 'N', 'N',
'O', CURRENT TIMESTAMP, 'AMARENDAR', CURRENT TIMESTAMP, 'AMARENDAR', ' ' 
FROM 
(
SELECT usr_id 
FROM   dbo.usr_cust_xref ucx 
       JOIN dbo.custid_acct_xref cax 
         ON ucx.cust_id = cax.cust_id 
       JOIN dbo.acct_brdng_xref abx 
         ON cax.acct_nbr = abx.acct_nbr 
WHERE  abx.brdng_cd = 'PN' 
UNION 
SELECT uax.usr_id 
FROM   dbo.usr_acct_xref uax 
       JOIN dbo.acct_brdng_xref abx 
         ON uax.acct_nbr = abx.acct_nbr 
WHERE  abx.brdng_cd = 'PN' 
) as f0
where not exists 
(
    select * from cxxcow.USERS_RESOURCES f1
    where f0.USR_ID=f1.USER_ID

)
0
Esperento57 25 Апр 2017 в 20:39

Я рекомендую этот подход:

insert into table2
(field1, field2, etc)
select 
field1, field2, etc
from other tables

Это логически эквивалентно и намного проще.

0
Dan Bracuk 24 Апр 2017 в 14:51