【问题标题】:How to update selected rows only in Oracle SQL如何仅在 Oracle SQL 中更新选定的行
【发布时间】:2012-10-18 10:17:35
【问题描述】:

所以基本上我有一个表格形式。其中一列是复选框,另一列称为“隐藏”,将包含值“是”或“否”。

我有一个隐藏行的按钮,因此用户应该能够使用复选框选择某些行,然后单击隐藏按钮,它应该将用户选择的行更改为“隐藏”下的“是”专栏

所以我的 SQL 看起来像这样:

UPDATE nameOfTable
SET hidden = 'Yes'
WHERE hidden = 'No';

显然,对于当前为“否”的所有行,这只会将“隐藏”列更新为“是”,但我如何改为仅更新用户使用复选框选择的行?

【问题讨论】:

    标签: sql oracle-apex multiple-columns tabular-form


    【解决方案1】:

    您将需要使用 HTMLBD_APPLICATION 包来执行此操作。当您创建表格形式时,APEX 会自动为表格中的每个 可编辑 字段分配一个 ID。当您单击提交按钮时,您将需要一个循环遍历表中选定项目的函数。您可以通过检查该表中该字段的 HTML 来找出 APEX 分配给每个字段的名称(它将是 HTML id,并且看起来像 G_FXX,其中 X 是一个数字)。您还必须在表中有一些字段来标识每一行(如主键),以便数据库知道要在后端更新哪一行。

    BEGIN
      FOR i IN 1..HTMLBD_APPLICATION.G_F01.COUNT LOOP
        UPDATE nameoftable SET hidden = 'yes' WHERE
          HTMLDB_APPLICATION.G_FXX(HTMLDB_APPLICATION.G_F01(i)) = row_key;
      END LOOP;
    END;
    

    更新语句中的 XX 将是表中包含行 ID 的字段。这将获得选中框的列表,并通过列表循环更新已选中的每一行。

    【讨论】:

      【解决方案2】:

      只需将用户选择的主键 (id) 的值传递给数据库查询,并将其与主键字段进行比较。显然@SRIRAM 的上述回答肯定会为你工作..!!

      【讨论】:

        【解决方案3】:
        update nameoftable 
          set hidden='yes'
           where id =selectedcheckboxid
        

        这里id是表的主键

        【讨论】:

        • 所以我将 id 更改为表的主键名称...但我收到一条错误消息,说 SELECTEDCHECKBOXID 是无效标识符,因此 SQL 语句将被忽略跨度>
        • 被选中的checkbox的id——被选中的checkbox的主键id
        • @StephenWalsh 希望我的回答对你有所帮助
        • 所以如果我理解正确,你的说法... WHERE name_of_primary_key = primary_key_id(s)_of_the_row(s)_that_the_user_has_checked ???但是我怎么知道用户要选中哪些行呢?因此,我如何知道它们行的主键 ID?对不起,如果我的问题很愚蠢,我只是很困惑
        • 当用户点击复选框时,框中的值与其中一行匹配。获取该行的主键并传递给查询
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-25
        相关资源
        最近更新 更多