在 plsql 中构建组-子组下拉列表
Building group-subgroup dropdown list in plsql
我有一个 table,其中包含 ID、GROUP_NAME 和 PARENT_GROUP_ID。我正在尝试创建两个下拉列表:首先将所有具有 parent_group_id 的组名设为 null,在选择第一个 ddl(或仅选择默认值)之后,这些值在第二个 ddl 中,所有 PARENT_GROUP_ID 列都应该等于第一个选定组的 ID。到目前为止,我已经创建了包含 2 个弹出列表的数据块,并且在 'when-new-form-instance' 上,我正在使用
填充第一个 ddl
DECLARE
rg_groups RecordGroup;
rg_group_name VARCHAR2(5) := 'GNAME';
plist_ID Item := Find_Item(':GROUPS.GROUP_NAME');
nDummy NUMBER;
BEGIN
rg_groups := Find_Group(rg_group_name);
-- Delete any existing Group first
IF NOT Id_Null(rg_groups) THEN
Delete_Group(rg_groups);
END IF;
-- Now create a Record Group using a SQL query
-- Your Query must have a Label and a Value (two Columns)
-- and the data types must match your item type
rg_groups := Create_Group_From_Query(rg_group_name,'SELECT group_name,
to_char(ID) FROM GROUPS WHERE PARENT_GROUP_ID IS NULL');
-- Clear the existing List
Clear_List(plist_ID);
-- Populate the Record Group
nDummy := Populate_Group(rg_groups);
-- Populate the List Item
Populate_List(':GROUPS.GROUP_NAME',rg_groups);
END;
并在第一个 poplist 项的 'post-change' 触发器上,填充第二个 ddl:
DECLARE
rg_groups RecordGroup;
rg_group_name VARCHAR2(5) := 'GPARENT_NAME';
plist_ID Item := Find_Item(':GROUPS.PARENT_GROUP_ID');
nDummy NUMBER;
BEGIN
rg_groups := Find_Group(rg_group_name);
-- Delete any existing Group first
IF NOT Id_Null(rg_groups) THEN
Delete_Group(rg_groups);
END IF;
-- Now create a Record Group using a SQL query
-- Your Query must have a Label and a Value (two Columns)
-- and the data types must match your item type
rg_groups := Create_Group_From_Query(rg_group_name,'SELECT group_name, to_char(ID) FROM GROUPS WHERE PARENT_GROUP_ID = ' || :GROUPS.ID);
-- Clear the existing List
Clear_List(plist_ID);
-- Populate the Record Group
nDummy := Populate_Group(rg_groups);
-- Populate the List Item
Populate_List(':GROUPS.PARENT_GROUP_ID',rg_groups);
END;
不过我觉得WHERE PARENT_GROUP_ID = ' || :GROUPS.ID
部分不对,因为我连ID都没填,需要从之前的ddl中提取出来,卡在这里,我不不太了解这在 oracle 形式中是如何工作的。我希望我能得到一些简单易懂的建议,告诉我该走哪条路,谢谢!
弹出列表通常有两列 - 显示的标签和存储到项目的值。
您的第一个弹出列表在 GROUPS.GROUP_NAME
项上,显示群组名称并存储群组 ID。这意味着当用户 select 一个组时,其 ID 存储到 GROUPS.GROUP_NAME
并且您的第二个弹出列表填充了错误的值。
只需从 GROUPS.GROUP_NAME
中删除您的第一个弹出式列表,然后在 GROUPS.ID
项上创建它。
顺便说一句:当您按名称引用项目时,不要使用冒号。 Find_Item(':GROUPS.GROUP_NAME')
不好,Find_Item('GROUPS.GROUP_NAME')
对。
我有一个 table,其中包含 ID、GROUP_NAME 和 PARENT_GROUP_ID。我正在尝试创建两个下拉列表:首先将所有具有 parent_group_id 的组名设为 null,在选择第一个 ddl(或仅选择默认值)之后,这些值在第二个 ddl 中,所有 PARENT_GROUP_ID 列都应该等于第一个选定组的 ID。到目前为止,我已经创建了包含 2 个弹出列表的数据块,并且在 'when-new-form-instance' 上,我正在使用
填充第一个 ddlDECLARE
rg_groups RecordGroup;
rg_group_name VARCHAR2(5) := 'GNAME';
plist_ID Item := Find_Item(':GROUPS.GROUP_NAME');
nDummy NUMBER;
BEGIN
rg_groups := Find_Group(rg_group_name);
-- Delete any existing Group first
IF NOT Id_Null(rg_groups) THEN
Delete_Group(rg_groups);
END IF;
-- Now create a Record Group using a SQL query
-- Your Query must have a Label and a Value (two Columns)
-- and the data types must match your item type
rg_groups := Create_Group_From_Query(rg_group_name,'SELECT group_name,
to_char(ID) FROM GROUPS WHERE PARENT_GROUP_ID IS NULL');
-- Clear the existing List
Clear_List(plist_ID);
-- Populate the Record Group
nDummy := Populate_Group(rg_groups);
-- Populate the List Item
Populate_List(':GROUPS.GROUP_NAME',rg_groups);
END;
并在第一个 poplist 项的 'post-change' 触发器上,填充第二个 ddl:
DECLARE
rg_groups RecordGroup;
rg_group_name VARCHAR2(5) := 'GPARENT_NAME';
plist_ID Item := Find_Item(':GROUPS.PARENT_GROUP_ID');
nDummy NUMBER;
BEGIN
rg_groups := Find_Group(rg_group_name);
-- Delete any existing Group first
IF NOT Id_Null(rg_groups) THEN
Delete_Group(rg_groups);
END IF;
-- Now create a Record Group using a SQL query
-- Your Query must have a Label and a Value (two Columns)
-- and the data types must match your item type
rg_groups := Create_Group_From_Query(rg_group_name,'SELECT group_name, to_char(ID) FROM GROUPS WHERE PARENT_GROUP_ID = ' || :GROUPS.ID);
-- Clear the existing List
Clear_List(plist_ID);
-- Populate the Record Group
nDummy := Populate_Group(rg_groups);
-- Populate the List Item
Populate_List(':GROUPS.PARENT_GROUP_ID',rg_groups);
END;
不过我觉得WHERE PARENT_GROUP_ID = ' || :GROUPS.ID
部分不对,因为我连ID都没填,需要从之前的ddl中提取出来,卡在这里,我不不太了解这在 oracle 形式中是如何工作的。我希望我能得到一些简单易懂的建议,告诉我该走哪条路,谢谢!
弹出列表通常有两列 - 显示的标签和存储到项目的值。
您的第一个弹出列表在 GROUPS.GROUP_NAME
项上,显示群组名称并存储群组 ID。这意味着当用户 select 一个组时,其 ID 存储到 GROUPS.GROUP_NAME
并且您的第二个弹出列表填充了错误的值。
只需从 GROUPS.GROUP_NAME
中删除您的第一个弹出式列表,然后在 GROUPS.ID
项上创建它。
顺便说一句:当您按名称引用项目时,不要使用冒号。 Find_Item(':GROUPS.GROUP_NAME')
不好,Find_Item('GROUPS.GROUP_NAME')
对。