# upro **Repository Path**: wyh5215321/upro ## Basic Information - **Project Name**: upro - **Description**: 通过指定的统一的规范的逻辑结构化语言来转化成不同数据库中的存储过程 1. 实现一对多的场景 2.简化不同数据库存储过程的写法 - **Primary Language**: Java - **License**: GPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-01-14 - **Last Updated**: 2022-02-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: Java, 生成器, 存储过程 ## README # upro #### 介绍 通过指定的统一的规范的逻辑结构化语言来转化成不同数据库中的存储过程 1. 实现大部分通用语句一对多的场景 2. 简化不同数据库存储过程的写法 简而言之:作为存储过程生成器的基础 目前只实现了简单赋值语句,执行sql语句,if语句的规范!!!! 后续实现规范:for循环,while循环,游标处理,异常处理等 #### 使用说明 用于为数据库适配upro提供规范(开发使用),upro工具使用只需要引入不同数据库实现的引擎包和upro程序包即可 - [oracle引擎](https://gitee.com/wyh5215321/oracle-upro-engine) ```xml com.wlzk upro 1.0-SNAPSHOT ``` ```java //解析upro程序写到Procedure中 Parser parser = new Parser(); Procedure procedure= parser.analyze(stringBuffer.toString()); ``` [使用示例](https://gitee.com/wyh5215321/upro-test) #### 语法规范 ##### upro程序结构 ``` funcation 存储过程名 (入参参数){ Uvbegin 预定义参数内容 Uvend Ubbegin 方法体内容 Ubend } ``` ##### 参数类型 - Uvarchar:字符串类型 - Uint:整数型 - Udouble:小数型 - Uchar:字符型 - Ublob:二进制类型 - Uclob:大字符串类型 - Udate:日期类型 - Udatetime:日期时间类型 如果有长度和精度则在后面添加括号,“|”符号作为长度和精度间隔符 例如: Uint(5)、Uchar(1)、Udouble(2|1)、Uvarchar(10) ##### 入参定义 定义形式和java相同,类型在前,标识符在后,用逗号间隔 例如: funcation proName(Uint[2] a,Udouble[3|1] b){ ##### 预定义参数 预定义参数和入参参数定义相同,不过可以赋予初始值,初始值必须用双引号包括,以;分号结尾。 前后需要添加Uvbegin和Uvend 例如: ``` Uvbegin Uint[1] c="3"; Uint a="7"; Uvarchar d="heihei"; Uvend ``` ##### 方法体 方法体为顺序执行语句,以Ubbegin开头,Ubend结尾 ###### 赋值操作 必须以;分号结尾 1. 单个参数赋值 ``` c:=5; ``` 2. 多个参数赋值,用于select into 情况,前面参数以逗号分隔,后面用Usql[]包括。 ``` c,d:=Usql[select c,d from test where col=a]; ``` ###### 执行sql操作 必须以;分号结尾 直接添加Usql[] 包括 ``` Usql[insert into table(a) values(1)]; ``` ###### if的判断操作 if判断语法大致和java一样 Uif代表if语句开头 里面的操作符有 - Ua:并 相当于&& - Uo:或 相当于|| - Ue:相等 相当于== - Une:不相等 相当于!= - Ug: 大于 相当于> - Uge: 大于等于 相当于 >= - Ul: 小于 相当于< - Ule:小于等于 相当于<= - Un:取非 相当于! - Unull:判断空 条件谓词一共分为四种: - 大小谓词:Ue,Une,Ug,Uge,Ul,Ule a Ue 2 - 逻辑谓词:Ua,Uo (a Ue 2) Ua (b Ug 3) - 空谓词:Unull Unull(a) - 取反谓词:Un Un(Unll(a)) 在Uelseif和Uelse前面都要加上; 分号 Uif结束必须加上;Uifend 例如: ``` Uif(a Ue 2){ c:=6; };Uelseif(a Ul 2){ b:=7; };Uelse{ c:=8; };Uifend ```