Как использовать значение столбца в качестве имени столбца или символа вычисления в списке выбора - PullRequest
1 голос
/ 18 апреля 2020

Я пытался преобразовать запрос, работающий на SQLITe, в ORACLE версии 18 C. Но есть проблема.

То, что я хочу, это «Использовать значение столбца (строки) в качестве имени столбца или символа вычисления в списке выбора». На примере SQLITE) таблица со столбцом

  • q1 number
  • q2 number
  • `cal c varchar

и значение образца записи для каждого столбца равно

0.1, 0.2, q1+q2

, тогда, когда я использовал запрос, как показано ниже

select q1, q2, (calc) * 1 from table;

, результирующий набор равен

0.1, 0.2, 0.3

В SQLITE, Строковое значение столбца можно использовать в качестве имени столбца и символа вычисления.

Я пытался найти аналогичный способ с oracle, но не смог. Есть ли возможный способ без использования PL / SQL или динамического c запроса?

Ответы [ 2 ]

0 голосов
/ 18 апреля 2020

Вы можете сделать это в SQL, как показано ниже, используя XMLquery. Скрипт БД здесь

Обновление 1 : - для по модулю операции q1 на q2 используйте q1 mod q2. Для q1 до степени q2 используйте math:pow(q1,q2). Для получения более подробной информации о функции Xquery здесь

  with calc1 as (select q1,q2,replace(replace(calc,'q1',q1),'q2',q2) calc from tt)
  select q1,q2, xmlquery(replace( calc, '/', ' div ' ) 
                        returning content ) .getNumberVal() calc from calc1;
0 голосов
/ 18 апреля 2020

Самый простой вариант:

select q1, q2,
       q1 + q2 as result
from some_table;

Или создайте функцию (если вы настаиваете) и используйте ее впоследствии:

SQL> create or replace function calc (par_1 in number, par_2 in number)
  2  return number
  3  is
  4  begin
  5    return par_1 + par_2;
  6  end;
  7  /

Function created.

SQL> with test (q1, q2) as
  2    (select 1, 8 from dual union all
  3     select -4, 24 from dual
  4    )
  5  select q1, q2, calc(q1, q2) result
  6  from test;

        Q1         Q2     RESULT
---------- ---------- ----------
         1          8          9
        -4         24         20

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