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