问题
志辉 陈 · 七月 14, 2022

如何快速备份一张码表?

在更新医保码库前,我们想对旧码库做个备份,以防更新过程失败,还可以还原。
oracle支持 CREATE TABLE AS ..... 的语法快速备份一张表,cache 似乎不支持这个语法,
大家平时是怎么备份一张码表的呢?

 

最好是像 oracle 那样一条命令搞定的那种。

产品版本: Caché 2016.1
$ZV: Cache for Windows (x86-64) 2016.2.3 (Build 907_11_20753U) Mon Apr 5 2021 19:51:59 EDT
0
0 100
讨论 (10)2
登录或注册以继续

CREATE TABLE Sample.YoungPeople

AS SELECT Name,Age

FROM Sample.People

WHERE Age < 21

或者

DO $SYSTEM.SQL.Schema.QueryToTable("SELECT Name,Age,AVG(Age) AS AvgInit FROM Sample.Person WHERE Age < 21","Sample.Youth",1,.errors)

如果您是2016版本,可以使用$SYSTEM.SQL.QueryToTable()
但是这个方法只复制查询中指定的字段的定义,包括数据类型、最大长度和最小值/最大值,但不复制字段的数据约束,如默认值、要求值或唯一值
 

CREATE TABLE Sample.YoungPeople

AS SELECT Name,Age

FROM Sample.People

WHERE Age < 21

首先,你这个方法是行不通的,报错如下:

 

>>$SYSTEM.SQL.QueryToTable()

使用这个方法也不方便,要先建表,然后才能把旧表的中数据DUMP过去。

 

不好意思,是我的问题。

您的 $SYSTEM.SQL.QueryToTable() 这个方法是可行的!它可以将一个表中的数据复制到另外一个新建的表中。谢谢您 !

前一条回复估计卡住了,不好意思

我不知道你的使用场景,但是面对此需求我一般是先建一张和之前表名字不一样的表,然后通过

insert into 表名 select * from 表名。由于cache在往表插入的时候数据的时候不能插入ID,所以正确的写法是把除了ID之外的字段排列一下,如下所示的写法,希望可以帮到你。

INSERT INTO BKIP_SOAV2_ESB.SERVICE
(DELETEFLAG, boWsdlUrl, createDate, esbWsdlUrl)
SELECT DELETEFLAG, boWsdlUrl, createDate, esbWsdlUrl
FROM BKIP_SOA_ESB.SERVICE; 

要先建表、再 INSERT 数据,步骤没有 Oracle 一条命令搞定方便。

谢谢您。

m 我建议直接备份global。如果有问题,重新导入导入global。然后抛下索引。

对于Cache,我还没有很好的理解到 Global。还不太明白它与表之间的对应有关系。有没有相关的学习文章?

我是从 Oracle 转过来的。