问题描述
我的选择查询将像这样开始:
插入camrule(HCHARGECODE,htenant,dtfrom,dtto,IESTIMATETYPE,destimated,imaxpermo)
我的hchargecode的硬编码值为174,我的htenant将基于select语句(例如,从tableX中选择htenant),依此类推。我该如何对列进行硬编码,并将选择语句中的其他值添加到camrule表中?
此外,这是用于多行,而不仅仅是要插入的一行。
我尝试用硬编码值创建一个临时表,但出现错误。我希望可以将这个临时表中的列插入到camrule表中。
解决方法
您可以执行以下操作:
public class JsonNodeStringJavaDescriptor extends AbstractTypeDescriptor<JsonNode> {
public static final ObjectMapper mapper = new ObjectMapper();
public static final JsonNodeStringJavaDescriptor INSTANCE = new JsonNodeStringJavaDescriptor();
public JsonNodeStringJavaDescriptor() {
super(JsonNode.class,ImmutableMutabilityPlan.INSTANCE);
}
@Override
public String toString(JsonNode value) {
try {
return mapper.writeValueAsString(value);
} catch (JsonProcessingException e) {
throw new IllegalArgumentException("The given JsonNode object value: " + value + " cannot be transformed to a String",e);
}
}
@Override
public JsonNode fromString(String string) {
try {
return mapper.readTree(string);
} catch (JsonProcessingException e) {
throw new IllegalArgumentException("The given string value: " + string + " cannot be transformed to JsonNode object",e);
}
}
@Override
public <X> X unwrap(JsonNode value,Class<X> type,WrapperOptions options) {
if (value == null) {
return null;
}
if (String.class.isAssignableFrom(type)) {
return (X) toString(value);
}
throw unknownUnwrap(type);
}
@Override
public <X> JsonNode wrap(X value,WrapperOptions options) {
if (value == null) {
return null;
}
if (String.class.isInstance(value)) {
return fromString(value.toString());
}
throw unknownWrap(value.getClass());
}
,
使用Values关键字完成此操作...
insert into camrule (HCHARGECODE,htenant,dtfrom,dtto,IESTIMATETYPE,destimated,imaxpermo)
values(174,(select htenant from tableX),and so on...
通过这种方式,您可以从不同的表中选择值,而不仅仅是将硬编码的列添加到单个源表中的Select语句中。