我正在尝试在Oracle中自动化一些度量计算。我确实有大约50个指标,需要计算的基础上一些低层次的信息。每个指标都有不同的计算逻辑,尽管它们可以共享基础数据点。我有一个字段中捕获的所有计算文本沿着表中的基础数据点。
我试图写一个使用动态SQL的函数来完成这项工作。下面只是我所遵循的方法中的一个代码块。当然,我没有以正确的方式做,因此它会提示错误:
DECLARE
A NUMBER :=10;
B NUMBER :=20;
C NUMBER :=40;
D NUMBER :=35;
OUTPUT_VAR NUMBER;
SQL_TEXT VARCHAR2(50);
BEGIN
-- SQL_TEXT:='OUTPUT_VAR:=A+B;';
-- SQL_TEXT:='OUTPUT_VAR:=A+B+C;';
-- SQL_TEXT:='OUTPUT_VAR:=A/D;';
-- SQL_TEXT:='OUTPUT_VAR:=A*B;';
-- SQL_TEXT:='OUTPUT_VAR:=B+C;';
-- SQL_TEXT:='OUTPUT_VAR:=C/D;';
-- SQL_TEXT:='OUTPUT_VAR:=B/C;';
SQL_TEXT:='OUTPUT_VAR:=A+D;';
EXECUTE IMMEDIATE SQL_TEXT;
DBMS_OUTPUT.PUT(OUTPUT_VAR);
END;
下面是我得到的错误:
Error starting at line : 1 in command -
DECLARE
A NUMBER :=10;
B NUMBER :=20;
C NUMBER :=40;
D NUMBER :=35;
OUTPUT_VAR NUMBER;
SQL_TEXT VARCHAR2(50);
BEGIN
-- SQL_TEXT:='OUTPUT_VAR:=A+B;';
-- SQL_TEXT:='OUTPUT_VAR:=A+B+C;';
-- SQL_TEXT:='OUTPUT_VAR:=A/D;';
-- SQL_TEXT:='OUTPUT_VAR:=A*B;';
-- SQL_TEXT:='OUTPUT_VAR:=B+C;';
-- SQL_TEXT:='OUTPUT_VAR:=C/D;';
-- SQL_TEXT:='OUTPUT_VAR:=B/C;';
SQL_TEXT:='OUTPUT_VAR:=A+D;';
EXECUTE IMMEDIATE SQL_TEXT;
DBMS_OUTPUT.PUT(OUTPUT_VAR);
END;
Error report -
ORA-00900: invalid SQL statement
ORA-06512: at line 18
00900. 00000 - "invalid SQL statement"
*Cause:
*Action:
请求帮助使这项工作。感谢您的回复,谢谢!
3条答案
按热度按时间wfsdck301#
igetnqfo2#
另一种在SQL中不使用PL/SQL的方法是使用XMLTABLE或XMLQUERY。XQUERY允许您非常轻松地进行简单计算,例如:
所以你可以很容易地进行动态计算,你只需要在变量名中添加'$':
PS注意,你需要在'-'符号前加一个空格,否则它会被认为是'B-'变量:
wz8daaqr3#
我们可以在这些表达式中使用聚合函数吗?例如$A + $B*GREATEST(5,6)。