【问题标题】:Variable names are retrieved from DB从数据库中检索变量名
【发布时间】:2012-06-17 02:45:17
【问题描述】:

我有 Oracle DB 10g,我创建了一个设置表,其中包含我的应用程序函数和每个函数变量。

我需要在运行时将变量值插入到调试表中,因此我在第一个表中定义了我需要将它们插入到调试表中的变量名称。

例如,我需要插入名为L_sEmpSalary 的变量的值。

问题是我从设置表中的一个变量中获取变量名,例如L_sVarName。 变量L_sVarName 现在包括变量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 但没有运气,有什么想法吗?

提前致谢

【问题讨论】:

  • 让我们明白这一点:变量L_sVarName 包含变量L_sEmpSalary(即“L_sEmpSalary”)的名称,并且您想构建一些通用函数将L_sEmpSalary's value 插入到调试表中,对吧?
  • L_sEmpSalary的值保存在哪里?
  • 是的,亲爱的,你在右边提到的。
  • L_sEmpSalary 持有员工工资,我需要将其插入调试表中,下面是示例代码 L_sEmpSalary Number :=500; Sql_Statment Varchar2(500);在 GetVars 循环中开始 Rec L_sVarName:=Rec.Var_Name; /* L_sVarname 现在持有变量 'L_sEmpSalary' 我需要得到它的值 500*/ Sql_Statment:= ' select :var from dual ';使用 L_sVarName 立即执行 Sql_Statment 到 L_sVarValue; DBMS_OUTPUT.PUT_LINE('Var 值 = '||L_sVarValue);结束循环;
  • 1.最好更新您的问题并添加代码示例(这次我为您做了)。 2. 你得到的错误代码是什么?为什么它不起作用?

标签: oracle plsql oracle10g


【解决方案1】:

我想我理解您的问题,您不能在 select 子句中使用 bind variable
您可以使用连接:

 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;

虽然我可能还是不太明白你想做什么......

【讨论】:

  • DBMS 将“L_sEmpSalary”打印为字符串的问题,而不是我需要打印的变量 L_sEmpSalary 的值 500。
  • 嗯,当然会,您希望它从哪里获得500 值?它不是双...
  • 看看 SYS.DBMS_DEBUG 包。
  • 亲爱的,在上面的代码示例中,L_sEmpSalary 的初始值是 500。 (L_sEmpSalary Number :=500;),所以我想办法通过变量 L_sVarName 打印这 500。
猜你喜欢
  • 1970-01-01
  • 2016-06-02
  • 2020-07-09
  • 1970-01-01
  • 2014-09-11
  • 1970-01-01
  • 2014-10-22
  • 1970-01-01
  • 2017-06-19
相关资源
最近更新 更多