Я хочу обновить столбец с помощью PL / SQL - PullRequest
0 голосов
/ 30 сентября 2019

Вот запрос. Я хочу, чтобы bookdate_to был обновлен.

SELECT
    r.resource_id,
    r.type,
    r.resort_id,
    r.parent_id,
    r.code,
    r.name,
    r.path,
    r.cashflowmanager_id,
    c.bookdate_from,
    c.bookdate_to,
    c.usage_date_from,
    c.usage_date_to
FROM
    resourcebasei18n   r
    JOIN cashflowrule       c ON ( r.cashflowmanager_id = c.cashflowmanager_id )
WHERE
    name = '4-Persoons Ranchtent'
    AND ( c.usage_date_from BETWEEN '01-APR-20' AND '01-MAY-20'
          OR c.usage_date_to BETWEEN '01-APR-20' AND '01-MAY-20' );

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

Ответы [ 2 ]

0 голосов
/ 06 октября 2019

Как уже было отмечено, это легко сделать с помощью одного SQL, но, поскольку вам требуется plsql, вот анонимный блок для него ..

declare 
   cursor c_cashflowrule is 
          select c.bookdate_to
            from cashflowrule c
           where (   c.usage_date_from between date '2019-09-29' and date '2020-05-01' 
                  or c.usage_date_to   between date '2019-09-29' and date '2020-05-01' 
                 )
             and exists (select null 
                           from resourcebasei18n r
                          where c.cashflowmanager_id = r.cashflowmanager_id
                            and r.name = '4-Persoons Ranchtent'
                        ) 
            for update of bookdate_to; 
begin 
    for cflow in c_cashflowrule 
    loop
        update cashflowrule 
           set bookdate_to = date '2019-09-29' 
        where current of c_cashflowrule ;
    end loop;
end ;
0 голосов
/ 30 сентября 2019

Нет необходимости в циклах PL / SQL. Мы можем сделать это простым SQL:

update cashflowrule c 
set    c.bookdate_to = date '2019-09-29'
where  ( c.usage_date_from BETWEEN date '2020-04-01' AND date '2020-05-01'
      OR c.usage_date_to   BETWEEN date '2020-04-01' AND date '2020-05-01' )
and    c.bookdate_to is null -- not sure whether this is a rule, your comments confuse me
and    c.cashflowmanager_id in ( select r.cashflowmanager_id
                                 from   resourcebasei18n r
                                 where  r.name = '4-Persoons Ranchtent' )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...