在 PeopleCode 中重用 SQL 语句作为提示 table
Reusing SQL statement in PeopleCode for prompt table
我在 PeopleSoft 中有一个页面有许多相似的字段。每个都使用设置为动态视图的提示 table。更改一个字段时,它会填充其他两个字段的 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 属性 returns 字符串包含绑定变量 :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();
尝试ExpandSqlBinds and ExpandBindVar。
我在 PeopleSoft 中有一个页面有许多相似的字段。每个都使用设置为动态视图的提示 table。更改一个字段时,它会填充其他两个字段的 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 属性 returns 字符串包含绑定变量 :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();
尝试ExpandSqlBinds and ExpandBindVar。