0

我在 PeopleSoft 中有一个页面,其中包含许多类似的字段。每个人都使用一个设置为动态视图的提示表。当一个字段被更改时,它会填充另外两个字段的 SQLText 属性,并结合刚刚选择的值。由于这个 SQL 语句每次基本上都是一样的,我希望我能做这样的事情:

/* UM_SUBPLAN_SQL contains something to the effect of:
   SELECT DISTINCT a.acad_sub_plan 
      , a.descr 
   FROM ps_acad_subpln_tbl a 
   WHERE a.institution =:1 
      AND a.acad_plan =:2 
*/
&loSQL = GetSQL(SQL.UM_SUBPLAN_SQLTEXT, "UMS04", "ENT-BS");
&lcSQLText = &loSQL.Value;
&loSQL.Close();
RECORD.FIELD.SqlText = &lcSQLText;

不幸的是,SQL.Value 属性返回包含绑定变量 :1 和 :2 的字符串,而不是被绑定的值。有没有什么方法可以让那个字符串被替换为值,而不是做我试图离开这里的相同类型的字符串连接?谢谢。

编辑:嗯,这不是我想要的,但我选择了以下内容。它有效,如果比我希望的更冗长的话。

&loSQL = GetSQL(SQL.UM_SUBPLAN_SQLTEXT, "X", "X");
&lcSQLText = Substitute(&loSQL.Value, ":1", "'" | RECORD.FIELD1.Value | "'")
&lcSQLText = Substitute(&lcSQLText, ":2", "'" | RECORD.FIELD2.Value | "'");
&loSQL.Close();

如果您有更清洁的解决方案,我很想听听。再次感谢!

再次编辑:下面彼得的评论让我清理了很多。谢谢!

&loSQL = GetSQL(SQL.UM_SUBPLAN_SQLTEXT, "X", "X");
&lcSQLText = ExpandSqlBinds(&loSQL.Value, RECORD.FIELD1.Value, RECORD.FIELD2.Value);
&loSQL.Close();
4

1 回答 1

1

尝试ExpandSqlBindsExpandBindVar

于 2018-11-19T10:34:39.133 回答