SQL Server 数据类型
|
Oracle 数据类型
|
bigint
|
NUMBER(19,0)
|
binary(1-2000)
|
RAW(1-2000)
|
binary(2001-8000)
|
BLOB
|
bit
|
NUMBER(1)
|
char(1-2000)
|
CHAR(1-2000)
|
char(2001-4000)
|
VARCHAR2(2001-4000)
|
char(4001-8000)
|
CLOB
|
date
|
DATE
|
datetime
|
DATE
|
datetime2(0-7)
|
TIMESTAMP(7)(对于 Oracle 9 和 Oracle 10);VARCHAR(27)(对于 Oracle 8)
|
datetimeoffset(0-7)
|
TIMESTAMP(7) WITH TIME ZONE(对于 Oracle 9 和 Oracle 10);VARCHAR(34)(对于 Oracle 8)
|
decimal(1-38, 0-38)
|
NUMBER(1-38, 0-38)
|
float(53)
|
FLOAT
|
float
|
FLOAT
|
地理
|
BLOB
|
geometry
|
BLOB
|
hierarchyid
|
BLOB
|
图像
|
BLOB
|
int
|
NUMBER(10,0)
|
money
|
NUMBER(19,4)
|
nchar(1-1000)
|
CHAR(1-1000)
|
nchar(1001-4000)
|
NCLOB
|
ntext
|
NCLOB
|
numeric(1-38, 0-38)
|
NUMBER(1-38, 0-38)
|
nvarchar(1-1000)
|
VARCHAR2(1-2000)
|
nvarchar(1001-4000)
|
NCLOB
|
nvarchar(max)
|
NCLOB
|
real
|
real
|
smalldatetime
|
DATE
|
int
|
NUMBER(5,0)
|
smallmoney
|
NUMBER(10,4)
|
sql_variant
|
N/A
|
sysname
|
VARCHAR2(128)
|
text
|
CLOB
|
time(0-7)
|
VARCHAR(16)
|
timestamp
|
RAW(8)
|
tinyint
|
NUMBER(3,0)
|
uniqueidentifier
|
CHAR(38)
|
varbinary(1-2000)
|
RAW(1-2000)
|
varbinary(2001-8000)
|
BLOB
|
varchar(1-4000)
|
VARCHAR2(1-4000)
|
varchar(4001-8000)
|
CLOB
|
varbinary(max)
|
BLOB
|
varchar(max)
|
CLOB
|
xml
|
NCLOB
|
SQL Server 数据类型 Oracle 数据类型 bigint NUMBER(19,0) binary(1-2000) RAW(1-2000) binary(2001-8000) BLOB bit NUMBER(1) char(1-2000) CHAR(1-2000) char(2001-4000) VARCHAR2(2001...
oracle
的blob类型
对应
sqlserver
中的p_w_picpath类型/***@paramsourceConn源数据库连接*@paramtargetConn目标数据库连接*/publicvoidcopyFile{ConnectionsourceConn=getOraclCon();Statements=null;Connectiontarget..
转载于:...
1. 使用Druid解析
SQL
,获取
SQL
语句中的表名和字段名。
2. 使用Feign调用元数据服务,获取表的元数据信息,包括表的字段名、类型等。
3. 解析
SQL
语句,找到包含LEFT JOIN的SELECT语句,并将其中的*替换为具体的字段名。
4. 根据不同的数据库类型,生成
对应
的
SQL
语句。
下面是一个大致的实现过程:
```java
// 1. 使用Druid解析
SQL
,获取
SQL
语句中的表名和字段名
String
sql
= "SELECT t1.*, t2.name FROM table1 t1 LEFT JOIN table2 t2 ON t1.id = t2.id";
List<
SQL
TableSource> tableSources =
SQL
Utils.getTables(
sql
, JdbcConstants.MY
SQL
);
List<
SQL
SelectItem> selectItems =
SQL
Utils.getSelectItems(
sql
, JdbcConstants.MY
SQL
);
// 2. 使用Feign调用元数据服务,获取表的元数据信息
TableMetadata metadata = metadataService.getTableMetadata(tableSources.get(0).getName());
// 3. 解析
SQL
语句,找到包含LEFT JOIN的SELECT语句,并将其中的*替换为具体的字段名
for (
SQL
SelectItem item : selectItems) {
if (item.getExpr() instanceof
SQL
AllColumnExpr) {
SQL
AllColumnExpr allColumnExpr = (
SQL
AllColumnExpr) item.getExpr();
if (allColumnExpr.getOwner() instanceof
SQL
IdentifierExpr) {
String tableName = ((
SQL
IdentifierExpr) allColumnExpr.getOwner()).getName();
if ("t1".equals(tableName)) {
List<String> columnNames = metadata.getColumnNames(tableName);
SQL
SelectItem newItem = new
SQL
SelectItem();
newItem.setExpr(new
SQL
IdentifierExpr(columnNames.get(0)));
item.getParent().set(item.getParent().indexOf(item), newItem);
// 4. 根据不同的数据库类型,生成
对应
的
SQL
语句
String new
Sql
=
SQL
Utils.to
SQL
String(stmt, JdbcConstants.MY
SQL
);
需要注意的是,这只是一个简单的示例代码,实际应用中还需要处理很多细节问题,比如
SQL
语句中可能包含多个表,需要进行关联查询,还需要处理各种可能出现的异常情况。
彻底解决:SunCertPathBuilderException: unable to find valid certification path to requested target错误的方法
WEBnoob:
JAVA Delphi HMAC_SHA256位实现及SHA256哈希散列BASE64签名Key互通生成算法
Android RecyclerView实现选中Item变色的最精简高效实现(绝不会出现点击时其它item偶尔也被选中现象)
craiklee:
SQL建索引提示:联机索引操作只能在 SQL Server Enterprise Edition 中执行 解决方法
2301_77754679:
Android重写Activity的dispatchTouchEvent方法,记录每一次点击事件
该换键盘了: