Как я могу согласовать значения в MySql?

0

Пожалуйста, найдите приведенный ниже код. Код ниже - код сервера sql [Сохраненная процедура]. Я конвертирую sql в mysql в этой ссылке mysql, а ниже - sql SP

USE databasename
GO
ALTER PROCEDURE GetSbsberIDbyDept
    @P_DepartmentIds varchar(max),
    @OP_ID varchar(max) output
AS
BEGIN
     Declare @Position int
     Declare @length int
     Declare @value varchar(8000)
     Declare @SubscribrIDs varchar(max)
     Declare @FinalSubscriberids varchar(max) = ''
     SET @Position = 0
     SET @length = 0
     select @P_DepartmentIds
         WHILE CHARINDEX(',', @P_DepartmentIds, @Position+1)>0
           BEGIN
             set @Length = CHARINDEX(',', @P_DepartmentIds, @Position+1) - @Position
             set @value = SUBSTRING(@P_DepartmentIds, @Position, @length)
             select @SubscribrIDs = STUFF((SELECT ', ' + cast(SubscriberId as varchar(max)) from SbsberDetails  
             where Deptid =  @value and ParentId is null order by SubscriberId asc FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)') ,1,2,'')
             if(@SubscribrIDs is not null)
              begin
                set @FinalSubscriberids += cast(@SubscribrIDs as varchar(max)) + ',';
              end
              set @Position = CHARINDEX(',', @P_DepartmentIds, @Position + @length) +1
           END
           SET @OP_ID =  @FinalSubscriberids
END

И я перешел на MySql, но я получаю сообщение об ошибке в инструкции STUFF, так как STUFF недействительный ввод в этой позиции, ниже - код Mysql

    USE databasename     
DELIMITER //

CREATE PROCEDURE GetSbsberIDbyDept(
    p_P_DepartmentIds longtext,
    p_OP_ID out longtext )
BEGIN
     Declare v_Position int;
     Declare v_length int;
     Declare v_value varchar(8000);
     Declare v_SubscribrIDs longtext;
     Declare v_FinalSubscriberids longtext Default '';
     SET v_Position = 0;
     SET v_length = 0;
     select p_P_DepartmentIds
         WHILE; CHARINDEX(',', p_P_DepartmentIds, v_Position+1)>0
           BEGIN
             set v_length = CHARINDEX(',', p_P_DepartmentIds, v_Position+1) - v_Position;
             set v_value = SUBSTRING(p_P_DepartmentIds, v_Position, v_length);
             set v_SubscribrIDs = STUFF((SELECT Concat(', ' , cast(SubscriberId as longtext)) from SbsberDetails  
             where Deptid =  v_value and ParentId is null order by SubscriberId asc FOR XML; PATH(''), TYPE).value('.', 'NVARCHAR(MAX)') ,1,2,'')
             if(v_SubscribrIDs is not null)
              then
                set v_FinalSubscriberids += concat(cast(v_SubscribrIDs as longtext) , ',');
              end if;
              set v_Position = CHARINDEX(',', p_P_DepartmentIds, v_Position + v_length) +1;
           END;
           SET p_OP_ID =  v_FinalSubscriberids;            
END;
//

DELIMITER ;

Как преобразовать вышеуказанный код sql в MySql?

  • 0
    поделитесь своими образцами данных и ожидаемыми результатами, которые помогут вам
  • 0
    Привет @ZaynulAbadinTuhin ZaynulAbadinTuhin, я отредактировал код, и я использую верстак
Показать ещё 6 комментариев
Теги:

1 ответ

0

STUFF - это функция SQL-сервера, поэтому она породила ошибку в mysql. То, что я получил, пытается выполнить строку concat, но в mysql есть имя funtion GROUP_CONCAT для группировки групп, поэтому вы можете использовать его вместо того,

  • 0
    Я использовал Group_concat, но та же ошибка `выберите group_concat (SubscriberId) из (выберите Concat (',', cast (SubscriberId as longtext)) из SubscriberDetails, где Deptid = v_value и ParentId - нулевой порядок по SubscriberId asc) '
  • 0
    `set v_SubscriberIDs = SELECT GROUP_CONCAT (SubscriberId в виде длинного текста из SubscriberDetails, где Deptid = v_value и ParentId - нулевой порядок по SubscriberId asc) '
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню