Объявление курсора в Amazon Redshift - PullRequest
0 голосов
/ 02 мая 2018

Моя цель - проанализировать первую таблицу, проверить, существует ли идентификатор во второй таблице, а затем выполнить некоторые обновления.

Первая таблица выполняется в цикле и анализирует каждую строку во второй таблице для обновления или выдачи выходных данных.

Вот код, который я использовал:

DECLARE
CURSOR c1 FOR (SELECT pnr,agrnumber,pnrcreatedate FROM test2_view_table);
r1 c1%ROWTYPE;
CURSOR c2 FOR (SELECT pnr,ano,pcdt FROM sdh_ticket_test2_update);
r2 c2%ROWTYPE;
BEGIN
 FOR r1 IN c1
 LOOP
  FOR r2 IN c2
  LOOP
   IF (r1.pnr = r2.pnr and r2.pnrcreatedate is null  and 
r1.agrnumber=r2.ano)
   THEN
     c++
   else if (r1.pnr = r2.pnr and r2.agrnumber is null and  
r1.pcdt=r2.pnrcreatedate)
  THEN
      a++   -- continue to the next iteration of the outer loop
    -- as we have a match
    GOTO continue;
   END IF;
  END LOOP;
  -- we can only reach that point if there was no match
  DBMS_OUTPUT.PUT_LINE(TO_CHAR(c));
  <<continue>>
  NULL;

 END LOOP;
END; 

Для объявления курсора в красном смещении, как указано выше. это выдает мне следующую ошибку.

[Amazon](500310) Invalid operation: syntax error at or near "c1" 

Пожалуйста, дайте мне знать, если есть какое-либо решение.

1 Ответ

0 голосов
/ 04 мая 2018

Этот тип построчной обработки не подходит для любой современной базы данных. Просто определите логику в SQL-запросе (или запросах) и дайте БД понять, как выполнять реальную работу.

В этом случае вы можете выполнить полное сравнение за один шаг. Вы могли бы переписать это как один UPDATE.

BEGIN

UPDATE sdh_ticket_test2_update
SET    pnrcreatedate = c1.pcdt
FROM      test2_view_table c1
LEFT JOIN sdh_ticket_test2_update c2
       ON c1.pnr = c2.pnr 
      AND c1.agrnumber = c2.ano
WHERE c2.pnrcreatedate IS NULL 
;

UPDATE sdh_ticket_test2_update
SET    ano = c1.agrnumber
FROM      test2_view_table c1
LEFT JOIN sdh_ticket_test2_update c2
       ON c1.pnr = c2.pnr 
      AND c1.pcdt = c2.pnrcreatedate
WHERE c2.agrnumber IS NULL 
;

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