更新时间: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。
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;
/
  
  