我正在开发一种方法,用户可以根据现有表动态生成新表。我正在使用Java,myBatis和spring,并且需要在映射器xml中包含sql。如下所示:
<update id="createTable" parameterType="list" >
CREATE TABLE PERSON_GENOTYPE
( ID NUMBER(10) NOT NULL,
ID_CARD_NO VARCHAR2(50) NOT NULL,
GENOTYPE VARCHAR2(50),
CREATE_DATETIME DATE,
ETHNICITY VARCHAR2(5),
<foreach collection="list" item="locus" separator="," close="," >
#{locus} VARCHAR2(50)
</foreach>
CONSTRAINT PERSON_GENOTYPE_PK PRIMARY KEY (ID)
)
</update>
我确定参数列表不为空,并且具有正确的值。它以某种方式给了我ORA-00904:
> SQL:
CREATE TABLE PERSON_GENOTYPE
(
ID NUMBER(10) NOT NULL,
ID_CARD_NO VARCHAR2(50) NOT NULL,
GENOTYPE VARCHAR2(50),
CREATE_DATETIME DATE,
ETHNICITY VARCHAR2(5),
? VARCHAR2(50) ,
? VARCHAR2(50) ,
CONSTRAINT PERSON_GENOTYPE_PK PRIMARY KEY (ID)
)
我用Oracle中的实际值替换了?
,它工作正常。映射器不起作用,我也不知道为什么。
更新:我删除了它,并且它起作用了,所以我怀疑问题与有关。该列表是字符串btw的arrayList。