ITPub博客

首页 > 数据库 > Oracle > insert all的用法

insert all的用法

原创 Oracle 作者:gss99999 时间:2007-08-21 16:13:41 0 删除 编辑
Oracle从9i开始有一个新的语法:insert all可以用一条语句同时插入几个表,提高了程序开发的效率.下面举例如下:[@more@]

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/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    14
  • 访问量
    41505