文档首页/ 数据库和应用迁移 UGO/ 用户指南/ 语法转换指南/ 转换错误码/ 通用转换错误码/ U0000010: 动态SQL包含不支持项: [target database does not support INCREMENT for alter sequence.]
更新时间:2026-03-19 GMT+08:00
分享

U0000010: 动态SQL包含不支持项: [target database does not support INCREMENT for alter sequence.]

描述

对于Oracle PLSQL中的动态SQL语句,由于动态SQL包含不支持语法点,因此生成错误提示。

数据库类型与版本

  • 源库类型与版本:UGO 支持的 Oracle 版本。
  • 目标库类型与版本:UGO 支持的 GaussDB 版本。

语法示例

CREATE OR REPLACE PROCEDURE SEQ_PRO(v_sequence_name VARCHAR2,v_new_increment NUMBER ) AS
BEGIN
  -- 直接修改序列步长
  EXECUTE IMMEDIATE 'ALTER SEQUENCE ' || v_sequence_name || 
                   ' INCREMENT BY ' || v_new_increment;
  DBMS_OUTPUT.PUT_LINE('序列 ' || v_sequence_name || ' 步长已改为 ' || v_new_increment);
  END;
  /

改造建议

无自动转换方案,可使用SQL语句转换功能转换动态SQL中的内容。

如果“SQL语句转换”功能依然无法自动转换,需要人工修改动态SQL。

GaussDB修改后SQL:

--首先构造修改步长的函数
CREATE OR REPLACE FUNCTION alter_sequence_increment(seqname text, newincrement int)
RETURN void AS
    currentval bigint;
    v_sql text;
BEGIN
     v_sql :='SELECT nextval(''' || seqname || ''') - 1';
     execute immediate v_sql into currentval;    
     execute immediate 'drop sequence '||seqname;
     execute immediate 'create sequence '|| seqname || ' increment by ' || newincrement || ' start with '|| currentval + newincrement ;
    return ;
END;
/
---修改步长的procedure
CREATE OR REPLACE PROCEDURE SEQ_PRO(v_sequence_name VARCHAR2,v_new_increment NUMBER ) AS
BEGIN
  -- 直接修改序列步长
  --EXECUTE IMMEDIATE 'ALTER SEQUENCE ' || v_sequence_name || 
                  -- ' INCREMENT BY ' || v_new_increment;
    PERFORM  alter_sequence_increment(v_sequence_name,v_new_increment);       
  DBE_OUTPUT.PRINT_LINE('序列 ' || v_sequence_name || ' 步长已改为 ' || v_new_increment);
  END;
  /

相关文档