Pl sql - чтение математической формулы и замена на число - PullRequest
0 голосов
/ 29 августа 2018

У меня есть следующие таблицы:

TABLE  1                                                         TABLE 2

Col 1        Col2                                              A      $100
 Rpt1     (A + B(1-D))/C                                       B      $200
 Rpt2         -A                                               C      $300
 Rpt3         C+D                                              D      $400

Я хочу написать код PL-SQL, который читает обе таблицы и дает мне динамически следующее.

Rpt 1  =  (100 +200(1-400))/300
Rpt 2  =  - 100
Rpt 3  =  300+400

Таблица 1 может иметь любой тип формулы. Мне нужно прочитать эту формулу и заменить ее количеством, указанным в таблице 2.

Есть мысли?

1 Ответ

0 голосов
/ 29 августа 2018

Поскольку вы запросили PL / SQL, вот решение с вложенным циклом:

create table table1 (col1, col2) as
select 'Rpt1', '(A + B(1-D))/C' from dual union all
select 'Rpt2', '-A' from dual union all
select 'Rpt3', 'C+D' from dual;

create table table2 (col1, col2) as
select 'A', 100 from dual union all
select 'B', 200 from dual union all
select 'C', 300 from dual union all
select 'D', 400 from dual;

set serveroutput on

declare
  result varchar2(100);
begin
  for r1 in (select col1, col2 from table1)
  loop
    result := r1.col2;
    for r2 in (select col1, col2 from table2 where result like '%' || col1 || '%')
    loop
      result := replace(result, r2.col1, r2.col2);
    end loop;
    dbms_output.put_line(r1.col1 || '  =  ' || result);
  end loop;
end;
/

Rpt1  =  (100 + 200(1-400))/300
Rpt2  =  -100
Rpt3  =  300+400


PL/SQL procedure successfully completed.

Я предположил, что знаки доллара на самом деле не присутствуют в table2; если они есть, вам нужно их обрезать, если не хотите, то в выводе.

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