如何快速备份一张码表?
在更新医保码库前,我们想对旧码库做个备份,以防更新过程失败,还可以还原。
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
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 转过来的。
社区的这两个板块可以重点看看:
https://cn.community.intersystems.com/tags/globals
https://cn.community.intersystems.com/tags/object-data-model
公司官方产品文档:https://docs.intersystems.com/results.html?docs%5Bquery%5D=Globals, 可以用浏览器的翻译引擎翻译看看。
谢谢您!