请问两个oracle数据库,用insert into 学生 select * from 学生 @dblink。发现学生表里面的有一个字段。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请问两个oracle数据库,用insert into 学生 select * from 学生 @dblink。发现学生表里面的有一个字段。相关的知识,希望对你有一定的参考价值。

请问两个oracle数据库,用insert into 学生 select * from 学生 @dblink。发现学生表里面的有一个字段【该字段是hugeblog 类型,是图片】就是同步不过来,请问是怎么回事?有谁知道?该怎么解决?

这是我搜索到的,你自己试试:

Oracle如何通过dataLink复制远程数据库的CLOB\BLOB字段数据到本地数据库

我们都知道,Oracle不支持直接通过Database Link复制远程数据库表的CLOB/BLOB字段数据到本地数据库。
像如下的SQL是不能执行的。(ipop_topic表有一个CLOB的字段)
insert into ipop_topic
select * from ipop_topic@prod.us.oracle.com where application_id=1000
但是,我们可以借助全局临时表,先把数据复制到临时表,再从临时表转移到你的目的表。
create global temporary table ipop_topic_temp
as select * from ipop_topic@prod.us.oracle.com where rownum=1
insert into ipop_topic_temp
select * from ipop_topic@prod.us.oracle.com where application_id=1000
insert into ipop_topic
select * from ipop_topic_temp
commit
参考技术A 你这个要求2个数据库中的“学生”表中的那个字段都要求是 hugeblog 才行。

MyBatis 返回insert操作主键

    应用场景 在向数据库插入数据时,需要保留插入数据的id,以便进行后续的update操作或者将id存入其他表作为外键。但是,在默认情况下,insert操作返回的是一个int值,它并非表示主键id,而是表示当前SQL语句影响的行数。

   接下来,我们依次从options注解和SQL两个方面,了解MyBatis如何在使用MySQL和Oracle做insert插入操作时将返回的id绑定到对象中。

Mybatis的@Options注解

    mybatis的@Options注解能够拿到对象自增的id的值,能够设置缓存时间,首先,创建一张用于测试的表instance。

技术图片
CREATE TABLE instance (
  instance_id BIGINT NOT NULL AUTO_INCREMENT COMMENT 主键id,
  infos VARCHAR(2048) NOT NULL DEFAULT ‘‘ COMMENT 消息,
  create_time datetime COMMENT 创建时间,
  update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 更新时间,
  PRIMARY KEY (instance_id)
)ENGINE=INNODB DEFAULT CHARSET=utf8 COMMENT 实例表;
技术图片

    其中的instance_id是自增的主键。我希望通过dao层的接口插入的数据能够返回主键的id。接口代码如下:

技术图片
@Insert("insert into instance (infos)"
                    + " ("
                    + " @infos,"
                    + " NOW()"
                    + ")")
    @Options(useGeneratedKeys = true, keyProperty = "instanceId", keyColumn = "instance_id")
    int addInstance(Instance instanceDto);
技术图片

    @Options注解中默认设置的主键对应的字段名为id,而在instance表中,主键为instance_id,因此需要将keyProperty和keyColumn设置成我们想要的字段。这个示例的意思就是,从instance_id这个字段把数据放到传入对象instanceDto的instanceId成员变量里面。

    在调用了插入方法之后,@Options注解会自动为表的主键字段设置自增的值,并把它赋值给作为入参的DTO,进而可以直接从这个对象中获取新生成记录的主键。接下来看下@Option注解的源码:

技术图片
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Options 
    boolean useCache() default true;
    boolean flushCache() default false;
    ResultSetType resultSetType() default ResultSetType.FORWARD_ONLY;
    StatementType statementType() default StatementType.PREPARED;
    int fetchSize() default -1;
    int timeout() default -1;
    boolean useGeneratedKeys() default false;
    String keyProperty() default "id";
    String keyColumn() default "";
技术图片

    注解中的useCache还可以设置缓存相关的选项,useCache = true表示本次查询结果被缓存以提高下次查询速度,flushCache = false表示下次查询时不刷新缓存,timeout = 10000表示查询结果缓存10000秒。

    在文献[2]中,Java API àMapper Annotations中可以找到英文原版介绍。

从执行insert SQL时返回主键ID

    MySQL用法:

<insert id="insert" parameterType="com.test.Instance"  keyProperty=" instanceId" useGeneratedKeys="true" >

    上面配置中,“keyProperty”表示返回的instance_id要保存到对象的那个属性中,“useGeneratedKeys”表示主键为自增长模式。

    MySQL中做以上配置就OK了,较为简单,不再赘述。下面分享Oracle中的用法。

技术图片
<insert id="insert" parameterType="com.test.Instance ">
   <selectKey resultType="Long" order="BEFORE" keyProperty="instanceId">  
       SELECT SEQ_USER.NEXTVAL as instanceId from DUAL
   </selectKey> 
    insert into instance (instance_id, infos, create_time)
    values (#instanceId, #infos, now())
</insert>
技术图片

    Oracle用法中,需要注意的是:由于Oracle没有自增长一说法,只有序列这种模仿自增的形式,所以不能再使用“useGeneratedKeys”属性,而是使用<selectKey>将ID获取并赋值到对象的属性中,insert插入操作时正常插入id。

参考文献

[1] https://www.cnblogs.com/sonofelice/p/6250203.html.

[2] http://www.mybatis.org/mybatis-3/index.html.

原文地址:https://www.cnblogs.com/east7/p/10200872.html

以上是关于请问两个oracle数据库,用insert into 学生 select * from 学生 @dblink。发现学生表里面的有一个字段。的主要内容,如果未能解决你的问题,请参考以下文章

insert to一条记录到access中,数据库会自动产生一个自增长的ID,我想插入之后返回这个ID,请问如何做?

SQL插入语句

请问sql2005 有for循环语句吗? 比如我想写这样的语句 for(int i=1 ;i<=10;i++) insert into #t

oracle安装,我用了两个目录,Oracle和grid用户,请问我如果用g01,u01官方默认的是这么设置

DB2若何将数据导出为insert语句?

oracle sql判断一个数大于2000 如果大于减1500