我有Oracle DB 10g,我创建了一个包含应用程序函数和每个函数变量的设置表。
我需要在运行时将变量值插入到调试表中,因此我在第一个表中定义了在调试表中插入它们所需的变量名。
例如,我需要插入名为L_sEmpSalary的变量的值。
问题是,我正在从设置表的一个名为L_sVarName的变量中获取变量名。现在,变量L_sVarName包含了变量L_sEmpSalary,我想把它的值插入到DB中
因此,我需要获取存储在变量L_sVarName中的变量L_sEmpSalary的值。
以下是示例代码:
declare
L_sEmpSalary Number :=500;
Sql_Statment Varchar2(500);
Begin
For Rec In GetVars Loop
L_sVarName:=Rec.Var_Name;
/* L_sVarname is Holding now variable 'L_sEmpSalary' which i need to get it's value which is 500*/
Sql_Statment:= ' select :var from dual ';
EXECUTE IMMEDIATE Sql_Statment into L_sVarValue using L_sVarName;
DBMS_OUTPUT.PUT_LINE ( 'Var value = '||L_sVarValue);
End Loop;
end;我试过DBMS_SQL,但是没有成功,你知道吗?
提前感谢
发布于 2012-06-17 23:22:16
我想我理解你的问题,你不能在select子句中使用bind variable。
您可以使用拼接:
execute immediate 'select ' || l_svarname || ' from dual' into l_svarvalue;当然,在查询的表的L_sEmpSalary列中必须有值500 (我假设在实际代码中它不是dual)
例如:
Sql_Statment := 'with t as (select 500 L_sEmpSalary from dual) ' ||
'select l_sVarName || ' from t' into l_sVarValue;不过,我可能还是不太明白你到底想做什么。
https://stackoverflow.com/questions/11068555
复制相似问题