Oracle 拼接 INSERT 语句 结合 java 获取id


创建序列

create sequence A_squence
  minvalue 1 --最小值
  nomaxvalue --不设置最大值(由机器决定),或 根据表字段的值范围设置 maxvalue
  maxvalue 999999999 -- 最大值
  start with 1 --从1开始计数,数值可变
  increment by 1 --每次加1,数值可变
  nocycle --一直累加,不循环;cycle:达到最大值后,将从头开始累加
  nocache; --不建缓冲区。
-- 如果建立cache那么系统将自动读取cache值个seq,这样会加快运行速度;
-- 如果在单机中使用cache,或者oracle死了,那么下次读取的seq值将不连贯,所以不建议使用cache。

-- 创建序列
--创建序列
create sequence A_SEQ
  minvalue 1111
  maxvalue 999999999999
  start with 1111
  increment by 1;

commit;



INSERT 插入语句

-- INSERT
SELECT 'INSERT INTO ' || 'a' || '(' || wm_concat(T.COLUMN_NAME) || ')' || ' values(' ||
       wm_concat('#{' || T.COLUMN_NAME || '.' || T.data_type || '}') || '})'
FROM USER_TAB_COLUMNS T
WHERE T.TABLE_NAME = 'A';
oracle 字段替换 
--
VARCHAR2 = VARCHAR -- NUMBER = NUMERIC
自动生成序列id
@Insert(" INSERT INTO A(ID,ZT,STATUS,CJR,CJSJ,CZR,CZSJ) " +
            "values(A_SEQ.nextval," +
            "#{zt,jdbcType=VARCHAR},#{status,jdbcType=NUMERIC},#{cjr,jdbcType=VARCHAR}," +
            "#{cjsj,jdbcType=DATE},#{czr,jdbcType=VARCHAR},#{czsj,jdbcType=DATE})")
    @Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "ID")
    int insertA(A entity);

xml 中 if 

SELECT wm_concat(
         '' || T.COLUMN_NAME || ' != null and ' || T.COLUMN_NAME || ' != ''''">' || T.COLUMN_NAME || ',')
FROM USER_TAB_COLUMNS T
WHERE T.TABLE_NAME = 'A';
SELECT wm_concat(T.COLUMN_NAME)
FROM USER_TAB_COLUMNS T
WHERE T.TABLE_NAME = 'A';

相关