我有Oracle DB 10g,我创建了一个包含我的应用程序函数和每个函数变量的安装表。
我需要在运行时将变量值插入到调试表中,所以我在第一个表中定义了我需要在调试表中插入它们的变量名。
例如,我需要插入名为L_sEmpSalary
的变量值。
问题是我从一个名为L_sVarName
的变量中的setup表中获取变量名。
变量L_sVarName
现在包含我想在DB中插入它的值的变量L_sEmpSalary
所以我需要获得存储在变量L_sEmpSalary
中的变量L_sVarName
的值。
下面是示例代码:
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,但没有运气,任何想法?
先谢谢
答案 0 :(得分:0)
我想我理解你的问题,你不能在select子句中使用bind variable
你可以使用concatination:
execute immediate 'select ' || l_svarname || ' from dual' into l_svarvalue;
当然,您要查询的表中的L_sEmpSalary列中的值必须为500(我假设在您的实际代码中它不是双重的)
例如:
Sql_Statment := 'with t as (select 500 L_sEmpSalary from dual) ' ||
'select l_sVarName || ' from t' into l_sVarValue;
虽然我可能仍然不明白你想要做什么......