更新时间:2025-10-22 GMT+08:00

U0100071:动态SQL语句不支持自动转换

描述

对于Oracle PLSQL中的动态SQL语句,UGO无法自动转换,生成错误提示。

数据库类型与版本

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

语法示例

create or replace function test(p1  int,p2  int,p3 int) return int
as
begin
return p1 + p2 + p3;
end;
/
DECLARE
  v_return_value NUMBER;
  v_input1 NUMBER := 10;
  v_input2 NUMBER := 10;
  v_input3 NUMBER := 10;
BEGIN
  EXECUTE IMMEDIATE 
    'BEGIN 
      :1:= test(:2, :3, :4); 
     END;'
 USING  out v_return_value , v_input1, v_input2, v_input3;
   DBMS_OUTPUT.PUT_LINE('返回值: ' || v_return_value);
END;
/

 

改造建议

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

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

GaussDB修改后SQL:

create or replace function test(p1  int,p2  int,p3 int) return int
as
begin
return p1+p2+p3;
end;
/
DECLARE
  v_return_value NUMBER;
  v_input1 NUMBER := 10;
  v_input2 NUMBER := 10;
  v_input3 NUMBER := 10;
BEGIN
  EXECUTE IMMEDIATE 
    'BEGIN 
      select test(:2, :3, :4) into :v_return_value; 
     END;'
 USING  out v_return_value , v_input1, v_input2, v_input3;
  DBE_OUTPUT.PRINT_LINE('返回值: ' || v_return_value);
END;
/