Stored procedures 选中复选框并在oracle PL/SQL中单击“保存”按钮时,保存oracle表中的所有行

Stored procedures 选中复选框并在oracle PL/SQL中单击“保存”按钮时,保存oracle表中的所有行,stored-procedures,plsql,insert,save,rows,Stored Procedures,Plsql,Insert,Save,Rows,我需要在Oracle PLSQL中编写一个存储过程,以便在一个表中同时保存多行 在下面的UI中,每行有4个字段,其中一个字段有一个复选框。选中复选框并单击“保存”按钮后,必须将特定行保存在Oracle表“授权”中。可以选择不同行中的多个复选框并单击“保存”按钮,所有这些行都需要保存在表中 用户界面屏幕: 包括|航班|位置|状态 1) 在UI屏幕中,我们可以看到选择了两行。单击“保存”按钮后,根据选中的复选框,需要将这些记录保存在下表中 表授权: 航班|位置|状态|包括在内 联合|伯班克|晚|

我需要在Oracle PLSQL中编写一个存储过程,以便在一个表中同时保存多行

在下面的UI中,每行有4个字段,其中一个字段有一个复选框。选中复选框并单击“保存”按钮后,必须将特定行保存在Oracle表“授权”中。可以选择不同行中的多个复选框并单击“保存”按钮,所有这些行都需要保存在表中

用户界面屏幕:

包括|航班|位置|状态

1) 在UI屏幕中,我们可以看到选择了两行。单击“保存”按钮后,根据选中的复选框,需要将这些记录保存在下表中

表授权:

航班|位置|状态|包括在内
联合|伯班克|晚| Y
荷兰皇家航空公司|布法罗|晚| Y

function insertProcedure(isSelect in varchar2 ) return varchar2 is
BEGIN
if isSelect is not null then
FOR r IN
  (SELECT AUT.Flight,AUT.Location,AUT.Status,AUT.INCLUDED 
FROM AUTHORIZATION AUT) 
 LOOP 
  BEGIN
   IF r.somecol = 0  -- SOME IF conditions .
    INSERT INTO yourInsertTable(col1,col2,col3,col4)
    VALUES (r.col1,r.col2,r.col3,r.col4);
   END IF;
   EXCEPTION 
  WHEN OTHERS THEN
  --block_to_log_error;
  END; 
 END;
 END LOOP;
 else 
  //what do you want
 end if;
  exception
  when others then null;
   return 'xxx';
END;
您需要这样的过程,这可能会工作或可能有一些语法错误。让我知道,如果你让它工作或得到错误


您需要这样的过程,这可能会工作或可能有一些语法错误。如果您让它工作或出错,请告诉我。

通过PL/SQL过程向表中插入大量行是没有问题的。最好的方法可能是传递一个集合,然后使用FORALL以最少的上下文切换和最大的性能将它们推入

技巧是在任何前端环境中加载集合,以允许用户在屏幕上选择特定行

下面是一些代码,让您了解如何操作:

CREATE TABLE trees
(
   tree_id     NUMBER,
   tree_name   VARCHAR2 (100)
)
/

CREATE OR REPLACE PACKAGE tree_mgr
   AUTHID DEFINER
IS
   TYPE trees_t IS TABLE OF trees%ROWTYPE;

   PROCEDURE ins_trees (trees_in IN trees_t);
END;
/


CREATE OR REPLACE PACKAGE BODY tree_mgr
IS
   PROCEDURE ins_trees (trees_in IN trees_t)
   IS
   BEGIN
      FORALL indx IN INDICES OF trees_in
         INSERT INTO trees (tree_id, tree_name)
              VALUES (trees_in (indx).tree_id, trees_in (indx).tree_name);
   END;
END;
/

DECLARE
   l_trees   tree_mgr.trees_t := tree_mgr.trees_t ();
BEGIN
   l_trees.EXTEND (2);
   l_trees (1).tree_id := 100;
   l_trees (1).tree_name := 'Oak';
   l_trees (2).tree_id := 101;
   l_trees (2).tree_name := 'Elm';
   tree_mgr.ins_trees (l_trees);
END;
/

通过PL/SQL过程向表中插入许多行是没有问题的。最好的方法可能是传递一个集合,然后使用FORALL以最少的上下文切换和最大的性能将它们推入

技巧是在任何前端环境中加载集合,以允许用户在屏幕上选择特定行

下面是一些代码,让您了解如何操作:

CREATE TABLE trees
(
   tree_id     NUMBER,
   tree_name   VARCHAR2 (100)
)
/

CREATE OR REPLACE PACKAGE tree_mgr
   AUTHID DEFINER
IS
   TYPE trees_t IS TABLE OF trees%ROWTYPE;

   PROCEDURE ins_trees (trees_in IN trees_t);
END;
/


CREATE OR REPLACE PACKAGE BODY tree_mgr
IS
   PROCEDURE ins_trees (trees_in IN trees_t)
   IS
   BEGIN
      FORALL indx IN INDICES OF trees_in
         INSERT INTO trees (tree_id, tree_name)
              VALUES (trees_in (indx).tree_id, trees_in (indx).tree_name);
   END;
END;
/

DECLARE
   l_trees   tree_mgr.trees_t := tree_mgr.trees_t ();
BEGIN
   l_trees.EXTEND (2);
   l_trees (1).tree_id := 100;
   l_trees (1).tree_name := 'Oak';
   l_trees (2).tree_id := 101;
   l_trees (2).tree_name := 'Elm';
   tree_mgr.ins_trees (l_trees);
END;
/