Oracle apex oracle apex值列表-在下一字段中选择值并在SQL查询中使用
我正在使用Apex 4.0.2和Oracle XE 11 我有一个表单,其中一个字段,Oracle apex oracle apex值列表-在下一字段中选择值并在SQL查询中使用,oracle-apex,Oracle Apex,我正在使用Apex 4.0.2和Oracle XE 11 我有一个表单,其中一个字段,P200\u CARD\u TYPE,是从值列表中设置的。我希望使用我在设置“仅显示”字段的查询中选择的值,P200\u DESC 在P200_DESC的源代码部分,我将“源代码类型”设置为“SQL查询”: 我的问题是让Apex这样做。 对于P200\u CARD\u TYPE,如果我将“值更改时的页面操作”设置为“重定向并设置值”,则P200\u CARD\u TYPE变量似乎已设置,(我将其写入表中),但
P200\u CARD\u TYPE
,是从值列表中设置的。我希望使用我在设置“仅显示”字段的查询中选择的值,P200\u DESC
在P200_DESC
的源代码部分,我将“源代码类型”设置为“SQL查询”:
我的问题是让Apex这样做。
对于P200\u CARD\u TYPE
,如果我将“值更改时的页面操作”设置为“重定向并设置值”,则P200\u CARD\u TYPE
变量似乎已设置,(我将其写入表中),但
P200\u DESC
无法识别P200\u卡类型
bind变量P200_CARD_TYPE
上,我的“值更改时的页面操作”设置为“无”,我的选择将保留在屏幕上,但我无法保留到表中,P200_DESC
似乎仍然无法识别它
我会想,一旦我从LOV中做出选择,
P200卡类型设置好了,我可以在其他地方使用它。您似乎还没有正确理解会话状态。这类问题经常出现在这里和OTN apex论坛上
HTTP是HTML页面最常用的传输协议
无状态协议。web浏览器仅连接到服务器
只要下载一个完整的页面。此外,每个
服务器将页面请求视为独立事件,
与以前发生的或可能发生的任何页面请求无关
发生在将来。访问在一个页面上输入的表单值的步骤
在后续页面中,这些值必须存储为会话状态。神谕
Application Express透明地维护会话状态并提供
能够从中获取和设置会话状态值的开发人员
应用程序中的任何页面
在您的例子中,这意味着您认为从LOV中选择一个值会改变该项的会话状态。事实并非如此。您在客户端选择一个值,该值只有在以某种方式推送到服务器之前才可用
这对于理解apex至关重要!在继续之前,你需要了解这一点,因为你会再次遇到类似的情况
现在我们已经把它抛在脑后了,让我们来看看你是如何补救的
将值推送到服务器的最基本方式是什么?执行页面提交。所有项目的会话状态都将使用它们在客户端保存的值进行设置(例外情况适用,但我们暂时忽略它)。
下面是您在选择列表操作中出错的地方:您执行了重定向。重定向不是页面提交,而是重定向。通过设置目标项目的值,您只需更改该项目的会话状态。
因此,不是SQL没有识别变量,而是它没有值,因此无法呈现任何内容。
当然,提交页面可能不只是为了设置字段的值。提交可能会引发验证、分支或进程
这就是Tony Andrews的建议:使用动态操作动态检索值。例如,您可以将其设置为:
- 将“选择”列表设置为在值更改时不执行任何操作
- 右键单击树状视图中的选择列表,然后选择“创建动态操作”
- 作为事件选择“更改”事件
- 对于真实动作,选择“设置值”
- “集合类型”应为“sql语句”
- 使用您也定义为描述项源的sql:
SELECT CARD_DESC
FROM CARDTYPE
WHERE card_type = :P200_CARD_TYPE;
- 最后也是非常重要的一点:在“要提交的页面项目”字段中,添加
P200\u卡片类型
。这将导致将P200\u CARD\u TYPE
的当前值提交到服务器,从而设置其会话状态,从而使查询工作李>
现在,当选择列表上的值更改时,将调用服务器/数据库,并返回一个值并在描述项中进行设置。
还有很多,但这会让你朝着正确的方向前进。你考虑过用动态动作来代替吗?重新加载页面更容易、更高效。我遇到的问题实际上是无法使用我为P200\U CARD\U TYPE为P200\U DESC选择的值。对于我的P200\U DESC源,我已从CARDTYPE中选择CARD\U DESC,其中CARD\U TYPE=:P200\U CARD\U TYPE;我的问题是,实际上能够使用我为P200_描述的P200_CARD_TYPE选择的值。对于P200_DESC的源,我已经从CARDTYPE中选择了CARD_DESC,其中CARD_TYPE=:P200_CARD_TYPE;我觉得应该没问题。我已将P200_DESC的源设置为“始终,替换会话状态中的任何现有值”,源类型为“SQL查询”。我提到重新加载页面的唯一原因是,我似乎能够通过这种方式访问值,但我认为这是一种误导
SELECT CARD_DESC
FROM CARDTYPE
WHERE card_type = :P200_CARD_TYPE;