金蝶云星辰SQL脚本制作原创
金蝶云社区-小微生态何惠珍
小微生态何惠珍
6人赞赏了该文章 3,603次浏览 未经作者许可,禁止转载编辑于2023年12月22日 11:10:58
summary-icon摘要由AI智能服务提供

本文介绍了DDL(数据定义语言)和DML(数据操纵语言)的基本概念及其在SQL脚本制作中的应用。DDL包括alter、create、drop、truncate等命令,用于定义或修改表结构;DML包括select、update、delete、insert等命令,用于操作数据库中的数据。文中详细说明了如何从数据库导出SQL脚本(DDL和DML),如何修改这些脚本以符合星辰系统执行要求,并介绍了如何保存和管理这些脚本文件,包括文件命名规则、脚本放置位置以及如何通过XML文件配置脚本的发布顺序和注意事项。此外,还简述了SQL脚本发布的原理和流程。

 

名称

描述

DDL

DDL是英文data definition language的缩写,意思是:数据定义语言,主要的命令有altercreatedroptruncateddl主要用在定义或者改变表的结构。

DML

DML是英文data manipulation language的缩写,意思是:数据操纵语言,主要的命令有selectupdatedeleteinsertdml主要用来操作数据库中的数据。

 

1、制作SQL脚本

1.1、从数据库导出SQL脚本

DDL一般包含:增加单据使用到的表、索引新增语句,扩展单据增加的字段添加语句

DML包括菜单、编码规则、系统参数

菜单表:t_bas_homepage_menu

编码规则: t_cr_coderule  t_cr_coderule_l  t_cr_coderuleentry

系统参数:t_bas_sysparaconsole  t_bas_sysparameter

 

可根据开发使用的情况选择性导出自己的数据制作sql脚本。

例如:

有扩展单据并增加字段,那需要导出增加字段的DDL

有增加新单据的,需要导出新单据相关的表DDL

有在首页新增自己的应用菜单的,则需要从菜单表中导出该应用对应的insert SQL

有新建了编码规则的,则需要导出自己新建的编码规则insert sql

有使用到系统参数,则需要导出自己新增的那条系统参数insert sql

1.1.1、导出DDL

上传图片

1.1.2、导出DML

上传图片

上传图片

上传图片

1.2、修改SQL脚本为星辰可执行脚本

sql语句必须可重复执行,每句sql结束必须加【;

1.2.1、修改DML SQL

将导出的sql做成可重复执行sql,插入前先删除。

例如:

导出来的Insert类sql:





  INSERT INTO     kd_1620359504142044323.t_bas_homepage_menu (fid, fseq, fnumber, fvisible,     fpermission, fvectorvalue, fappid, fisv, fname, fappname, fsourceappid,     fforkref) VALUES(1221608250227602432, 85, 'wfyx_001', '1', ' ', 'kdfont     kdfont-tongyongzijin', '1LAJXX6CV9TV', ' ', '工资管理', '工资管理', ' ', '0'); 


改造后:





  DELETE FROM t_bas_homepage_menu  where      fid=1221608250227602432;INSERT INTO t_bas_homepage_menu     (fid, fseq, fnumber, fvisible, fpermission, fvectorvalue, fappid, fisv,     fname, fappname, fsourceappid, fforkref) VALUES(1221608250227602432, 85,     'wfyx_001', '1', ' ', 'kdfont kdfont-tongyongzijin', '1LAJXX6CV9TV', ' ', '工资管理', '工资管理', ' ', '0'); 

 

1.2.2、修改DDL SQL

在导出的sql中, Sql语句添加固定头:/#dialect-simple#/  ,表名前添加固定#SCHEMANAME#.表名,字段名必须小写

例如:

导出来的建表sql:





  CREATE TABLE wfyx_shangpingongxu     (fid int8 NOT NULL,fentryid int8 NOT NULL,fseq int4 NOT NULL DEFAULT 0,fbasedatafield int8 NOT NULL DEFAULT 0,fpricefield numeric(23,10) NOT NULL DEFAULT 0,CONSTRAINT pk_yx_shangpingongxu PRIMARY KEY     (fentryid));  

 


改造后:





  /#dialect-simple#/CREATE     TABLE IF NOT EXISTS #SCHEMANAME#.wfyx_shangpingongxu (fid int8 NOT NULL,fentryid int8 NOT NULL,fseq int4 NOT NULL DEFAULT 0,fbasedatafield int8 NOT NULL DEFAULT 0,fpricefield numeric(23,10) NOT NULL DEFAULT 0,CONSTRAINT pk_yx_shangpingongxu PRIMARY KEY     (fentryid));  

 

导出来的建索引sql:





  CREATE INDEX idx_yx_shangpingongxu_fk     ON kd_wfyx_shangpingongxu USING btree (fid);  

 

改造后:





  /#dialect-simple#/CREATE     INDEX  IF NOT EXISTS  idx_yx_shangpingongxu_fk ON     #SCHEMANAME#.wfyx_shangpingongxu USING btree (fid);  

 

导出来的增加字段sql:





  ALTER TABLE     kd_1618065434286742045.t_sal_invbillentry ADD wfyx_fileda  citext NOT NULL DEFAULT ' '::citext; 


改造后





  /#dialect-simple#/ALTER     TABLE IF EXISTS ONLY #SCHEMANAME#.t_sal_invbillentry  ADD COLUMN IF NOT EXISTS wfyx_fileda citext     NOT NULL DEFAULT ' '::citext;   


2、保存SQL脚本

脚本文件编码为UTF-8

文件命名格式为:#{伙伴isv标识}_${版本号}_${应用编码}_${脚本说明关键字}_${SQLTYPE后缀}.sql

例如:isvnumber _1.0 _sal_createorder_table.sql

 

伙伴isv标识:扩展或者新建应用时,应用编码自动生成的前缀字符串,例如 销售管理 sal 扩展后编码为 xxxx_sal_fork_0001,xxxx就是isv标识

 

脚本说明关键字:描述脚本的作用,例如是销售订单的脚本 则可描述为 salbill

DDL脚本(包括表创建、字段修改、索引增删等脚本)的后缀: _table.sql

例如:isvnumber _1.0 _sal_outbound_table.sql

DML脚本(包括与插入的菜单、编码规则等脚本)的后缀: _data.sql

例如:isvnumber _1.0 _sal_outbound_data.sql

2.1、拉下git xcmaster分支

查看git仓库地址:

上传图片

将xcmaster分支拉到本地、文件结构大概如下:

上传图片

若是需增加要dbschema sql或者 preinsdata sql则增加dbschema、preinsdata这两个文件夹,凡是增加了文件则必须增加 {应用编码}.xml 文件,如上图中的 bgp_sal_fork.xml,xml文件名称必须问应用编码,否则发布无效。

 

2.2、DML脚本放到${应用}/preinsdata文件夹下

上传图片

2.3、DDL脚本放到${应用}/dbschema文件夹下

上传图片

2.4、把脚本添加到配置文件中

上传图片

2.5、新增sql

注意:若是sql发布成功,则不语允许修改已经发布成功的sql文件。

新增的sql应该新增加一个sql文件,将新的sql放入文件中并将文件路径和名称配置到xml文件中。

 

Sql发布原理:

1、发布时解析xml中配置的文件,按xml配置顺序执行,所以创建表的文件需要保证放在修改该表sql文件的前面。

2、每个sql文件发布成功后,系统记录sql文件名,发布失败则不记录。

下次发布更新,系统检查该sql文件名是否在系统中,存在则跳过不执行,不存在则执行文件中的sql。

3、提交SQL脚本

将修改完成的脚本提交到git 仓库xcmaster分支


图标赞 6
6人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!