Как добавить два параметра и получить значение в SQL (преобразовать код PL / SQL в SQL) - PullRequest
0 голосов
/ 20 декабря 2018
function CF_TOTAL_AMTFormula return Number is
begin
  RETURN NVL(:AMOUNT,0)+ NVL(:CF_TAX,0);
end;

Эта функция создана в PL / SQL, и я хочу создать эту функцию в SQL.

Ответы [ 4 ]

0 голосов
/ 21 декабря 2018

выберите количество, cf_tax, nvl (сумма, 0) + nvl (cf_tax, 0) из - встроенного представления для предоставления демонстрационных данных: (выберите 123 как количество, .2 как cf_tax из двойного объединения, все выберите 123, ноль издвойное объединение все выберите ноль, .2 из двойного)

0 голосов
/ 20 декабря 2018

Ну, SQL допускает встроенные функции, но они реализованы в PL / SQL, поэтому я не уверен, отвечают ли они вашим требованиям:

with function cf_total_amtformula
    ( amount number, cf_tax number ) 
    return number
as
begin
    return nvl(amount,0) + nvl(cf_tax,0);
end;
select amount, cf_tax
     , cf_total_amtformula(amount, cf_tax) as formula_result
from   -- inline view to provide demo data:
       ( select 123 as amount, .2 as cf_tax from dual
         union all
         select 123, null from dual
         union all
         select null, .2 from dual )

(требуется Oracle 12.1 или более поздняя версия).

Очевидно, что вы можете просто использовать nvl(amount,0) + nvl(cf_tax,0) напрямую, без определения какой-либо функции, или определить столбец в представлении и т. Д.

0 голосов
/ 21 декабря 2018

Помещение параметров привязки в определение функции не работает и приводит к ошибке PLS-00049: bad bind variable.Я думаю, что вы ищете это:

function CF_TOTAL_AMTFormula(AMOUNT number, CF_TAX number) return Number is
begin
  RETURN NVL(AMOUNT,0)+ NVL(CF_TAX,0);
end;

Обратите внимание, что и у AMOUNT и CF_TAX удалены первые двоеточия :, и они были перемещены до сигнатуры функции.

После компиляции с create or replace ... вы можете вызвать функцию в SQL следующим образом:

select CF_TOTAL_AMTFormula(121, 12.1) from dual;
0 голосов
/ 20 декабря 2018

Как упомянул OldProgrammer выше, «SQL не имеет пользовательских функций».Может быть, вы просто хотите добавить два параметра вместе в SQL?Это довольно просто ...

select NVL(:AMOUNT,0) + NVL(:CF_TAX,0) as CF_TOTAL_AMT from dual;
...