在 PLSQL 的 Sum 函数中传递变量

Passing Variable in Sum Function in PLSQL

这是计算 table 中一列总和的简单代码。但是,每次更改时列名都是动态的。为此,我尝试执行以下代码,但在函数中传递变量时它不起作用,但如果我传递硬编码值则它起作用。

DECLARE
v_col varchar2(100);
v_sum varchar2(100);
begin
v_col:='"15-JAN-2012"';
dbms_output.put_line(v_col);
SELECT SUM(v_col) INTO v_sum from BAL_HISTORY;
dbms_output.put_line(v_sum);
end;

这是错误: ORA-01722: 号码无效 ORA-06512: 在第 7 行

您需要使用动态 sql:

DECLARE
v_col varchar2(100);
v_sum varchar2(100);
begin
v_col:='"15-JAN-2012"';
dbms_output.put_line(v_col);
EXECUTE IMMEDIATE 'SELECT SUM('||v_col||')  from BAL_HISTORY' INTO v_sum;
dbms_output.put_line(v_sum);
end;

顺便说一句:以这种方式设计的数据库对我来说看起来很奇怪,但上面的代码可以工作...