在PeopleCode中为提示表重用SQL语句

时间:2018-11-05 16:57:17

标签: peoplesoft peoplecode

我在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();

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

再次编辑:以下Peter的评论使我对此做了一些整理。谢谢!

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

1 个答案:

答案 0 :(得分:1)