gpt4 book ai didi

PL SQL,执行存储在表中的公式

转载 作者:行者123 更新时间:2023-12-04 06:18:36 25 4
gpt4 key购买 nike

我是 PLSQL 的新手。我只是想知道是否可以将我的公式作为字符串保存到表格中并在我的函数中使用它来计算一些值。

下面是一个例子:

ID         NAME          FORMULA
1 test prm_testval*prm_percent/18
2 test2 (prm_testval +20)*prm_percent

我想要做的是从表中选择公式列并在我的函数中使用字符串
select t.* from table t where id=1

prm_calculated_value = t.formula

我不想要公式的字符串值,只想要公式本身。

任何想法,如果我可以使用它或不?

最佳答案

起点是execute immediate -陈述。这是 PL/SQL 的 eval() .

create table formulas (
id number,
name varchar2(20),
formula varchar2(50)
);

insert into formulas values (1, 'test 1', 'prm_testval*prm_percent/18');
insert into formulas values (2, 'test 2', '(prm_testval +20)*prm_percent');

/* eval from: http://www.adp-gmbh.ch/blog/2005/may/5.html */
create or replace function eval (
expr in varchar2
) return varchar2 as
ret varchar2(32767);
begin
execute immediate 'begin :result := ' || expr || '; end;' using out ret;
return ret;
end;
/

create or replace function eval2 (
vars in varchar2,
expr in varchar2
) return varchar2 as
ret varchar2(32767);
begin
execute immediate vars || ' begin :result := ' || expr || '; end;' using out ret;
return ret;
end;
/

create or replace function calc_prm (
id_ in number,
prm_testval in varchar2,
prm_percent in varchar2
) return number as
formula_ formulas.formula%type;
vars constant varchar2(32767) :=
'declare prm_testval constant number := to_number(' || prm_testval ||
'); prm_percent constant number := to_number(' || prm_percent || ');';
begin
select formula into formula_ from formulas where id = id_;
return eval2(vars, formula_);
end;
/

/* call from SQL */
select eval('3*4') from dual;
select calc_prm(1, 97, 10) from dual;
select calc_prm(2, 97, 10) from dual;

/* call from PL/SQL block */
begin
dbms_output.put_line(eval('3*4'));
dbms_output.put_line(calc_prm(1, 97, 10));
dbms_output.put_line(calc_prm(2, 97, 10));
end;
/

基于此示例,您可以开始构建自己的方式来将符号值(prm_testval 和 prm_percent)映射到实际值。接下来你可能想看看 DBMS_SQL .

当心 SQL injection使用客户端提供的数据时! 另见例如 Bobby Tables: A guide to preventing SQL injection .

关于PL SQL,执行存储在表中的公式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6900300/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com