我在Oracle db中有3个表,表结构如下,一旦所有记录都输入,应用程序将在Tnx_tmp表中写入20k行应用程序将通过更新名称和状态为“U”的文件名和标志字段来更新状态表。一旦状态为“U”。所有这些20K行需要复制到Tnx表并将状态表的标志字段更新为“P”。 每行由RNO唯一标识。 另一个应用程序正在读取Tnx表并更新STAT字段 一旦STAT字段为“X”,同样需要在Tnx_tmp表中更新,一旦所有20k行的Tnx_tmp更新为“X”,状态表应该更新为文件名和标志字段,状态为“C”。 / p>
因为我是Oracle新手请告诉我如何继续。我应该使用触发器还是有其他方法。
1)Tnx_tmp
Name Null? Type
----------------------------------------- -------- ----------------------------
PRID VARCHAR2(4)
TYPE VARCHAR2(2)
PRCD VARCHAR2(2)
TCD VARCHAR2(5)
RNO NOT NULL VARCHAR2(25)
FNO VARCHAR2(17)
TNO VARCHAR2(17)
TAMT VARCHAR2(14)
NARRATION VARCHAR2(50)
JNO VARCHAR2(9)
TDT DATE
STAT VARCHAR2(2)
ERRNO VARCHAR2(4)
ERRDESC VARCHAR2(100)
STAT1 CHAR(1)
PACK CHAR(2)
RMSG VARCHAR2(200)
QUPDTIME VARCHAR2(15)
QOUTTIME VARCHAR2(15)
RESPODTTIME VARCHAR2(17)
APPREAD CHAR(1)
OUTQNAME CHAR(1)
FILENAME VARCHAR2(15)
2)状态
FILENAME VARCHAR2(15)
FLAG VARCHAR2(3)
3)TNX
Name Null? Type
----------------------------------------- -------- ----------------------------
PRID VARCHAR2(4)
TYPE VARCHAR2(2)
PRCD VARCHAR2(2)
TCD VARCHAR2(5)
RNO NOT NULL VARCHAR2(25)
FNO VARCHAR2(17)
TNO VARCHAR2(17)
TAMT VARCHAR2(14)
NARRATION VARCHAR2(50)
JNO VARCHAR2(9)
TDT DATE
STAT VARCHAR2(2)
ERRNO VARCHAR2(4)
ERRDESC VARCHAR2(100)
STAT1 CHAR(1)
PACK CHAR(2)
RMSG VARCHAR2(200)
QUPDTIME VARCHAR2(15)
QOUTTIME VARCHAR2(15)
RESPODTTIME VARCHAR2(17)
APPREAD CHAR(1)
OUTQNAME CHAR(1)
答案 0 :(得分:0)
这听起来像是使用PROCEDURE
来解决的完美解决方案。
我会创建一个PACKAGE
,以便您可以将所有PROCEDURE
捆绑到一个易于维护的代码段中。
CREATE OR REPLACE PACKAGE temporary_transactions_pkg
AS
PROCEDURE load_temporary_transaction (
p_PRID TXN_TMP.PRID%TYPE,
p_TYPE TXN_TMP.TYPE%TYPE,
p_PRCD TXN_TMP.PRCD%TYPE,
p_TCD TXN_TMP.TCD%TYPE
-- ..... more variables
);
PROCEDURE update_status_table (
p_FILENAME STATUS.FILENAME%TYPE,
p_FLAG STATUS.FLAG%TYPE
);
END temporary_transactions_pkg;
/
CREATE OR REPLACE PACKAGE BODY temporary_transactions_pkg
AS
PROCEDURE load_temporary_transaction (
p_PRID TXN_TMP.PRID%TYPE,
p_TYPE TXN_TMP.TYPE%TYPE,
p_PRCD TXN_TMP.PRCD%TYPE,
p_TCD TXN_TMP.TCD%TYPE
-- ..... more variables
)
AS
BEGIN
INSERT INTO TXN_TMP
( PRID, TYPE, PRCD, TCD )
VALUES
( p_PRID, p_TYPE, p_PRCD, p_TCD );
EXCEPTION
WHEN others THEN
DBMS_OUTPUT.PUT_LINE( 'TODO - Handle Exception' );
END load_temporary_transaction;
PROCEDURE update_status_table (
p_FILENAME STATUS.FILENAME%TYPE,
p_FLAG STATUS.FLAG%TYPE
)
AS
BEGIN
STATUS Status
SET FILENAME = p_FILENAME,
FLAG = p_FLAG;
INSERT INTO TXN
SELECT * FROM TXN_TMP;
--
-- TODO complete with your business logic.
--
END update_status_table;
END temporary_transactions_pkg;