我对 Oracle APEX 比较陌生,目前使用版本 22.2.1。我的数据库设置中有三个表:
我的目标是为操作员创建一个表格来计划他们的定期库存。该过程涉及操作员指定下一次库存的日期并选择与该库存相关的商品。
为了实现此目的,我使用以下 SQL 查询基于上述表格创建了一个表单:
SELECT
i.idInventaire,
i.Inv_date,
idArticle,
ar.code_article
FROM
Inventaire i
JOIN
Article_has_Inventaire ai ON i.idInventaire = ai.Inventaire_idInventaire
JOIN
Article ar ON ai.Article_idArticle = ar.idArticle;
idInventaire
和 idArticle
列被隐藏,因为我设置了一个触发器来自动增加它们。 Inv_date
配置为日期选择器,Code_Article
配置为弹出 LOV,显示 ARTICLE 表中的所有 Code_Article
选项。
我还添加了一个“保存”按钮。单击时,应将一条新记录插入到具有指定
INV_DATE
的 INVENTAIRE 表中,并且对于每个选定的 Code_Article
,应将新记录插入到 ARTICLE_HAS_INVENTAIRE 表中。
这是我在按钮的动态操作中使用的服务器端代码:
BEGIN
-- Insert a new inventory with the specified date
INSERT INTO Inventaire (Inv_Date)
VALUES (:P_DATE_PICKER);
-- Retrieve the ID of the newly inserted inventory
DECLARE
v_idInventaire NUMBER;
BEGIN
SELECT MAX(idInventaire) INTO v_idInventaire FROM Inventaire;
-- Insert selected articles into Article_has_Inventaire
FOR rec IN (SELECT Code_Article FROM ARTICLE WHERE Code_Article IN (:P_POPUP_LOV))
LOOP
INSERT INTO Article_has_Inventaire (Article_idArticle, Inventaire_idInventaire)
VALUES (rec.Code_Article, v_idInventaire);
END LOOP;
END;
END;
当我检查我的表时,新记录添加到我的表 INVENTAIRE 中,但没有记录插入到 ARTICLE_HAS_INVENTAIRE 表中,有人能找出原因吗?
如果您能提供有关改进此设置或解决我的方法中任何潜在问题的指导或建议,我将不胜感激。谢谢!
“Article_has_Inventaire”中未插入任何内容的原因是语句
WHERE Code_Article IN (:P_POPUP_LOV)
不返回任何行。假设所选值为 1,2 和 3,则 :P_POPUP_LOV 的值为 1:2:3,where 子句将被解析为 WHERE Code_Article IN ('1:2:3')
。你不想要这样,你需要 WHERE Code_Article IN ('1','2','3')
来代替。
解决方案:使用 APEX_STRING
api 将冒号分隔的字符串转换为包含各个选定值的嵌套表
SELECT Code_Article
FROM ARTICLE
WHERE Code_Article IN (SELECT column_value FROM table(apex_string.split(: P_POPUP_LOV,':'))
既然您说您是 APEX 新手,请注意几点。