我试图使用动态PL / SQL为多个参数生成乘法算法。我同意有多种方法可以做到这一点,但这个乘法问题是我需要做的其他事情的PoC。
所以这是代码
declare
var1 number := 1;
var2 number := 2;
output number := 1;
varname varchar2(10);
begin
for counter in 1..2
loop
execute immediate q'[select var]'||counter||' * :val1 from dual' into output using output;
end loop;
dbms_output.put_line(output);
end;
所以我试图做的是在运行时生成参数名称,然后评估该参数名称。
这可行吗?在内心深处,我不这么认为......但是如果这不起作用,我希望避免巨大的痛苦。 :)。顺便说一句,我在Oracle 11GR2上。
以下是我运行代码时发生的事情。
Error starting at line : 1 in command -
declare
var1 number := 1;
var2 number := 2;
output number := 1;
varname varchar2(10);
begin
for counter in 1..2
loop
execute immediate q'[select var]'||counter||' * :val1 from dual' into output using output;
end loop;
dbms_output.put_line(output);
end;
Error report -
ORA-00904: "VAR1": invalid identifier
ORA-06512: at line 9
00904. 00000 - "%s: invalid identifier"
*Cause:
*Action:
Elapsed: 00:00:00.082
谢谢和问候。
答案 0 :(得分:1)
你可以这样做:
declare
var1 number := 1;
var2 number := 2;
output number := 1;
varname varchar2(10);
begin
for counter in 1..2 loop
EXECUTE IMMEDIATE 'BEGIN :ret := var'||counter ||'; END;' USING OUT output;
dbms_output.put_line(output);
end loop;
end;
答案 1 :(得分:0)
这是你想要达到的目标吗?
DECLARE
var1 NUMBER := 1;
var2 NUMBER := 2;
output NUMBER := 1;
varname VARCHAR2 (10);
BEGIN
FOR counter IN 1 .. 2 LOOP
EXECUTE IMMEDIATE 'select ''var''||:val1*:counter from dual'
INTO varname
USING var1, counter;
DBMS_OUTPUT.put_line (varname);
END LOOP;
END;
结果:
var1
var2