注册

sqlServer函数变成DM函数

海侨 2023/09/04 692 5

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:8
【操作系统】:win11
【CPU】:
【问题描述】*:在把sqlServer函数变成DM函数的时候,已经设置了返回表类型,但是后面在插入的报错不存在这个表。
这是原函数

 returns @t 
table(
ID varchar(255),
ParentID varchar(255),
Level int,
name varchar(255),
huiZong	varchar(255),
nature varchar(255),
sort decimal(10)
 )
 as 
 begin 
 declare @i int   ---定义一个int变量
    set @i = 1    ---设置变量值
		-- insert into @t select @ID,@ID,0 --当前级,本级,如果不要的话可以注释掉或再加个参数来选择操作 
		insert into @t select ID,Parent_ID, 0 ,name,a.huiZong,a.nature,a.sort  from sys_office a 	where id = @ID and del_flag = '0'
    insert into @t select ID,Parent_ID, @i ,name,a.huiZong,a.nature,a.sort  from sys_office a where huiZong = @ID   and del_flag = '0'
  
    while @@rowcount<>0    --循环条件
    begin  
        set @i = @i + 1   --自增 
        insert into @t    ---插入到哦变量中
        select  
            a.ID,a.Parent_ID,@i,a.name,a.huiZong,a.nature,a.sort
        from  
            sys_office a,@t b   
        where a.del_flag='0' 
				and  a.huiZong=b.ID and b.Level = @i-1   
				and a.huiZong is not null
    end  
    return  
end
go

这是更改为dm后的函数

RETURN IAAUDIT.TYPE_TABLE_FINDOFFICE
AUTHID DEFINER

AS 
    i INT:=1;
BEGIN
	INSERT INTO TYPE_TABLE_FINDOFFICE SELECT ID, PARENT_ID, 0, NAME,HUIZONG,NATURE,SORT FROM SYS_OFFICE a WHERE ID = "ID" and DEL_FLAG = '0';
	INSERT INTO TYPE_TABLE_FINDOFFICE SELECT ID, PARENT_ID, i, NAME,HUIZONG,NATURE,SORT FROM SYS_OFFICE a WHERE HUIZONG = "ID" and DEL_FLAG = '0';

LOOP
i := i + 1;

        EXIT WHEN SQL%ROWCOUNT = 0;

SELECT a.ID, a.PARENT_ID, i, a.NAME,a.HUIZONG,a.NATURE,a.SORT
FROM SYS_OFFICE a, TYPE_TABLE_FINDOFFICE b
WHERE a.DEL_FLAG = '0' AND a.HUIZONG = b.ID AND b.LEVEL = i-1 and a.HUIZONG IS NOT NULL;

END LOOP;

    RETURN;
END;

报错信息为第8行,TYPE_TABLE_FINDOFFICE不存在
小白第一次用dm,希望大佬给解答一下。感谢!

回答 0
暂无回答
扫一扫
联系客服