首页 > 数据库 > Oracle > insert all的用法
1.首先因为insert all语句不允许使用序列,需要创建2个函数来插入序列.
CREATE OR REPLACE FUNCTION F_GETSEQ RETURN varchar2 DETERMINISTIC AS
v_ID varchar2(50);
BEGIN
SELECT 'V'||to_char(sysdate,'yyyymmdd')||lpad(seq_voucher.nextval,6,0)
INTO v_ID FROM DUAL;
RETURN v_ID;
END;
CREATE OR REPLACE FUNCTION F_g_id RETURN varchar2 DETERMINISTIC AS
g_ID varchar2(50);
BEGIN
SELECT seq_general.nextval
INTO g_ID FROM DUAL;
RETURN g_ID;
END;
2.
insert all
into voucher(fdate,fyear,accountingperiod,fgroup,VoucherId,fentryid,moneytype,changerate,
lmoneynum,debitnum,accountid,creditnum,balancenum,voucherdesc,producer,assessor,accountantid,
postflag,adjunctnum,balanceflag,voucherdescseq)
values(trunc(sysdate),to_char(sysdate,'yyyy'),p_accountingperiod,p_FGROUP,v_id,
' ','RMB',' ',' ',p_DebitNum, p_accountId,p_CriditNum,p_BalanceNum,p_voucherDesc,
p_producer,p_assessor, p_accountantId,' ',p_adjunctnum,0,p_voucherDescSeq)
into generalledger(serialid,columnid,voucherid,accountdate,accountingperiod,accountantid,accountid,
ledgerdesc,debit,lender)
values(g_id,1,v_id,trunc(sysdate),p_accountingperiod,p_accountantId,p_accountId,p_voucherDesc,p_DebitNum,p_CriditNum)
with s as (
SELECT F_GETSEQ v_ID, F_g_id g_id FROM dual
) select * from s;
commit;
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/62484/viewspace-964748/ ,如需转载,请注明出处,否则将追究法律责任。