大数跨境
0
0

SQLShift:一款异构数据库存储过程迁移工具

SQLShift:一款异构数据库存储过程迁移工具 SQL编程思想
2025-07-18
0

 

SQLShift 是一款专注于解决企业级数据库迁移难题的智能 SQL 方言转换平台,尤其擅长异构数据库存储过程的自动化迁移。

SQLShift 工具深度融合了 AI 与 SQL 语法专家模型,可以大幅提升迁移效率并降低人工适配风险。

功能特性

  • • 多源多目标:目前支持 Oracle 迁移 PostgreSQL、Oracle 迁移 OceanBase、SQL Server 迁移 GaussDB,其他迁移路径正在开发中。
  • • 智能语法转换:深度集成 AI 以及 SQL 语法专家模型,动态学习源端和目标端数据库语法规则,支持自动重构源端存储过程、触发器、函数、包等对象为目标端语法,降低人工改写成本。
  • • 推理路径追踪:拆解存储过程、触发器等复杂对象中的转换步骤,提供转换原理说明,降低用户理解成本。
  • • 批量并发处理:支持同时上传上百个复杂对象,自动分发处理转换任务,大幅提升转换效率。
  • • 风险预判机制:对于无法自动转换的语法,生成专家级修复介入建议。

版本比较

SQLShift 目前提供了个人免费在线体验、支持订阅的标准版以及可定制化的企业版,它们的功能差异如下:

免费试用

SQLShift 提供了免费的在线试用额度,输入以下网址进行注册登录:

https://sqlshift.cn/app/login/

登录之后,点击页面左下角“领取额度”:

输入兑换码“83103ce2-9167-439c-a03c-532c911fb516”领取有效期为 30 天的 10 次免费额度,数量有限,先到先得。

接下来我们创建一个新的迁移项目,点击页面左侧“新建项目”按钮:

选择源端数据库(例如 Oracle)以及目标端数据库(例如 PostgreSQL),设置项目名称之后点击“确认”按钮。

然后选择这个新项目,点击“新建转换任务”按钮:

在“源端SQL”中输入以下 PL/SQL 代码:

CREATE OR REPLACE PROCEDURE cs_parse_url(
    v_url IN VARCHAR2,
    v_host OUT VARCHAR2,  -- This will be passed back
    v_path OUT VARCHAR2,  -- This one too
    v_query OUT VARCHAR2) -- And this one
IS
    a_pos1 INTEGER;
    a_pos2 INTEGER;
BEGIN
    v_host :=NULL;
    v_path :=NULL;
    v_query :=NULL;
    a_pos1 := instr(v_url, '//');

    IF a_pos1 =0THEN
        RETURN;
    END IF;
    a_pos2 := instr(v_url, '/', a_pos1 +2);
    IF a_pos2 =0THEN
        v_host := substr(v_url, a_pos1 +2);
        v_path :='/';
        RETURN;
    END IF;

    v_host := substr(v_url, a_pos1 +2, a_pos2 - a_pos1 -2);
    a_pos1 := instr(v_url, '?', a_pos2 +1);

    IF a_pos1 =0THEN
        v_path := substr(v_url, a_pos2);
        RETURN;
    END IF;

    v_path := substr(v_url, a_pos2, a_pos1 - a_pos2);
    v_query := substr(v_url, a_pos1 +1);
END;
/

点击“确认”开始转换过程,转换完成后可以看到对应的 PL/pgSQL 代码,以及相关说明。

对于上面的示例,转换后的 PL/pgSQL 代码如下:

CREATE OR REPLACE FUNCTION cs_parse_url(
    v_url varchar,
    v_host OUTvarchar,  -- This will be passed back
    v_path OUTvarchar,  -- This one too
    v_query OUTvarchar   -- And this one
)
LANGUAGE plpgsql
AS $$
DECLARE
    a_pos1 integer;
    a_pos2 integer;
    next_slash_pos integer;
    relative_query_pos integer;
BEGIN
    v_host :=NULL;
    v_path :=NULL;
    v_query :=NULL;
    a_pos1 :=position('//'in v_url);
    IF a_pos1 =0THEN
        RETURN;
    END IF;
    next_slash_pos :=position('/'insubstring(v_url from a_pos1 +2));
    IF next_slash_pos =0THEN
        v_host :=substring(v_url from a_pos1 +2);
        v_path :='/';
        RETURN;
    END IF;
    a_pos2 := a_pos1 +1+ next_slash_pos;
    v_host :=substring(v_url from a_pos1 +2for a_pos2 - a_pos1 -2);
    relative_query_pos :=position('?'insubstring(v_url from a_pos2 +1));
    IF relative_query_pos =0THEN
        v_path :=substring(v_url from a_pos2);
        RETURN;
    END IF;
    a_pos1 := a_pos2 + relative_query_pos;
    v_path :=substring(v_url from a_pos2 for a_pos1 - a_pos2);
    v_query :=substring(v_url from a_pos1 +1);
END;
$$;

 


【声明】内容源于网络
0
0
SQL编程思想
数据库、AI、BI、大数据、云计算等知识分享,承诺更新到2050年。
内容 471
粉丝 0
SQL编程思想 数据库、AI、BI、大数据、云计算等知识分享,承诺更新到2050年。
总阅读391
粉丝0
内容471