尝试将值插入表中,其中某些值将是select语句,而其他值将被硬编码

问题描述

我的选择查询将像这样开始:

插入camrule(HCHARGECODE,htenant,dtfrom,dtto,IESTIMATETYPE,destimated,imaxpermo)

我的hchargecode的硬编码值为174,我的htenant将基于select语句(例如,从tableX中选择htenant),依此类推。我该如何对列进行硬编码,并将选择语句中的其他值添加到camrule表中?

此外,这是用于多行,而不仅仅是要插入的一行。

我尝试用硬编码值创建一个临时表,但出现错误。我希望可以将这个临时表中的列插入到camrule表中。

error message

解决方法

您可以执行以下操作:

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语句中。