请检查以下程序是否正确?插入没有发生。
我想在第一列中生成序列号。请告诉我它是否正确。
create or replace PROCEDURE SP_JCP_SET_DET_BND_LST(
p_channel IN VARCHAR2,
p_deptBrandListName IN VARCHAR2,
p_groupNo IN NUMBER,
p_userID IN VARCHAR2
)
AS
SequenceId NUMBER;
BEGIN
SELECT seqid1+1 into SequenceId from(SELECT CHANNEL_DEPT_BRAND_LIST_ID as seqid1
FROM GMPPFC.CHANNEL_DEPT_BRAND_LIST
ORDER BY CHANNEL_DEPT_BRAND_LIST_ID DESC) where rownum=1;
INSERT INTO GMPPFC.CHANNEL_DEPT_BRAND_LIST
(
CHANNEL_DEPT_BRAND_LIST_ID,
CHANNEL_NM,
DEPT_BRAND_LIST_NM,
GROUP_NO,
CREATE_USER_ID,
CREATE_TS,
CHANGE_USER_ID,
CHANGE_TS)
VALUES
(
SequenceId,
p_channel,
p_deptBrandListName,
p_groupNo,
p_UserID,
sysdate,
null,
null
);
COMMIT;
NULL;
END SP_JCP_SET_DET_BND_LST;
答案 0 :(得分:2)
原则上,如果Maxx评论你的表不为空,它将起作用。
但是,正确的实现方法是使用序列,并且对于这种普通情况考虑触发器。
就是这个:
CREATE SEQUENCE CHANNEL_DEPT_BRAND_SEQ START WITH 1 NOMAXVALUE MINVALUE 1 NOCYCLE;
CREATE OR REPLACE TRIGGER BIR_CHANNEL_DEPT_BRAND_LIST
BEFORE INSERT ON CHANNEL_DEPT_BRAND_LIST
FOR EACH ROW
BEGIN
:NEW.CHANNEL_DEPT_BRAND_LIST_ID := CHANNEL_DEPT_BRAND_SEQ.NEXTVAL;
:NEW.CREATE_TS := SYSDATE;
END;
/
当多个会话同时调用您的过程时,您的解决方案将在多用户环境中产生问题。