从DB检索变量名称

时间:2012-06-17 02:45:17

标签: oracle plsql oracle10g

我有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,但没有运气,任何想法?

先谢谢

1 个答案:

答案 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;

虽然我可能仍然不明白你想要做什么......