powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Перевод кода
7 сообщений из 7, страница 1 из 1
Перевод кода
    #40105098
Taigan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день всем!
Дико нуждаюсь в помощи вашей, мне нужно из оракла в постгрес перевести код.
Вот собственно код из оракла:
FOR EXD IN (SELECT T.TRANSUMCUR,
T.DATA_LOAD,
T.FLAGDEBCRED,
NVL(T.COMISSUM, 0) AS COMISSUM
FROM FCT_EXD_EXF_ELCARD T
WHERE T.CARDNUM = PCARD
AND T.DATA_LOAD = PDATE) LOOP

IF (EXD.FLAGDEBCRED = 'C') THEN
L_BALANCE := L_BALANCE + EXD.TRANSUMCUR;
ELSIF (EXD.FLAGDEBCRED = 'D') THEN
L_BALANCE := L_BALANCE - EXD.TRANSUMCUR;
-- dbms_output.put_line('Debet = ' || exd.transumcur);
END IF;
L_BALANCE := L_BALANCE - EXD.COMISSUM;
END LOOP;

Подскажите пожалуйста, особенно блок кода IF как его перевести в PostresSQL?....
...
Рейтинг: 0 / 0
Перевод кода
    #40105103
yens_gjytk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Taigan,

В общем случае if переводится один к одному. Покажите, что конкретно сделали и какие ошибки возникают
...
Рейтинг: 0 / 0
Перевод кода
    #40105105
Taigan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Извиняюсь заранее,Один к одному, это как ?...
...
Рейтинг: 0 / 0
Перевод кода
    #40105106
yens_gjytk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Taigan,

Точно так же, как и в Оракле. Идентично
...
Рейтинг: 0 / 0
Перевод кода
    #40105109
Taigan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Окей понял.На данный момент я застрял в вопросе "куда воткнуть этот блок кода IF"?
SELECT f.tran_sum
, f.date_record
, f.flag_deb_cred
, coalesce(f.comis_sum,0) as COMISSUM
FROM staging_files.exd_exfb f
WHERE f.card_num = PCARD
AND f.date_record = PDATE; - > Вот так перевел а теперь, куда селект или после фильтра WHERE ...
...
Рейтинг: 0 / 0
Перевод кода
    #40105110
Taigan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И можно ли вообще в коде создать переменную?потому что даже при вставки блока кода IF


IF (EXD.FLAGDEBCRED = 'C') THEN
L_BALANCE := L_BALANCE + EXD.TRANSUMCUR;
ELSIF (EXD.FLAGDEBCRED = 'D') THEN
L_BALANCE := L_BALANCE - EXD.TRANSUMCUR;
-- dbms_output.put_line('Debet = ' || exd.transumcur);
END IF;
L_BALANCE := L_BALANCE - EXD.COMISSUM;

Ругается из-за того что L_BALANCE = это переменная.А этот IF я взял из процедурки а там создана эта переменная и она имеется хранит в себе изначально 0. L_balance number;
L_balance := 0;...а тут как создать переменную ведь это обычный отчет....
...
Рейтинг: 0 / 0
Перевод кода
    #40105113
yens_gjytk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Taigan,

Вы взяли код из процедуры на Оракле, соответственно похожая процедура должна быть создана и в ПГ, примерно так:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
create or replace function ... returns numeric as
$$
declare
  exd record;
  l_balance numeric := 0;
begin
  for exd in ... -- ваш селект здесь
  loop
    if exd.flagdebcred = 'C' then
      l_balance := l_balance + exd.transumcur;
    elsif exd.flagdebcred = 'D' then
      l_balance := l_balance - exd.transumcur;
    end if;
    l_balance := l_balance - exd.comissum;
  end loop;
  return l_balance;
end;
$$ language plpgsql;
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Перевод кода
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]