Oracle - 如何使用两个像2D数组一样增长的列创建表?

时间:2016-12-26 18:51:16

标签: oracle plsql oracle11g

我想创建一个用于记录目的的表,当我将插入表时,我有一个执行顺序列,按RequestID方式递增。

CREATE TABLE WSRequestLog
    (
        RequestId NUMBER,
        ExecOrder INTEGER,
        MobileNo VARCHAR2(50),
        CardNo VARCHAR2(50),
        Log_Text VARCHAR2(4000),
        DateTime date
        PRIMARY KEY (RequestId, ExecOrder)
    );


PROCEDURE Generate
.
.
.
    IF first_condition = TRUE THEN

        INSERT INTO WSRequestLog (RequestId, ExecOrder, MobileNo, CardNo, Log_Text, DateTime)
        VALUES (v_req_id, Auto_Incremenet or NextVal, v_mobile_no, v_card_no, 'Performing First Step', SYSDATE);
        --Execute Code
        IF second_condition = TRUE THEN

            INSERT INTO WSRequestLog (RequestId, ExecOrder, MobileNo, CardNo, Log_Text,DateTime)
            VALUES (v_req_id, Auto_Incremenet or NextVal, v_mobile_no, v_card_no, 'First Step executed, checking next step', SYSDATE);  
            --Execute Code
        ELSE 
            INSERT INTO WSRequestLog (RequestId, ExecOrder, MobileNo, CardNo, Log_Text,DateTime)
            VALUES (v_req_id, Auto_Incremenet or NextVal, v_mobile_no, v_card_no, 'Second Step not applicable', SYSDATE);
            --Execute Code
        END IF;

    END IF;

END Generate;

我的问题是如何实现这种插入? 因此,如果我执行存储过程,则日志表将如下所示:

For Demonstration purpose

1 个答案:

答案 0 :(得分:1)

有一个pragma可串行重用的包,它将一个变量设置为null。 在包含核心记录器代码的其他包中,验证变量是否为null然后设置请求id变量值 - 这是一个包变量 - 您将在您的情况下递增此值。对于exec命令,请遵循以下行中的逻辑

程序set_log_sequence(p_log_sequence in number)as  开始    如果p_log_sequence为null则            gv_log_sequence:= gv_log_seq;      gv_log_seq:= gv_log_seq + 1;    其他            gv_log_sequence:= p_log_sequence;    万一;  结束;