Member 11776570 Ответов: 1

Я должен преобразовать функцию SQL в формат postgress


Ниже приведен возврат функции в SQL

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER OFF
GO


CREATE FUNCTION [dbo].[Lk_Split](@String varchar(MAX), @Delimiter char(1))       
returns @temptable TABLE (items varchar(MAX), rn int)       
as       
begin      
    declare @idx int       
    declare @slice varchar(8000)   
    declare @rn int = 1 -- row number that increments with each value in the delimited string

    select @idx = 1       
        if len(@String)<1 or @String is null  return       

    while @idx!= 0       
    begin       
        set @idx = charindex(@Delimiter,@String)       
        if @idx!=0       
            set @slice = left(@String,@idx - 1)   
        else       
            set @slice = @String       

        if(len(@slice)>0)  
            insert into @temptable(Items, rn) values(@slice, @rn)       

        set @String = right(@String,len(@String) - @idx)       
        set @rn = @rn +1

        if len(@String) = 0 break       
    end   
return 
end
GO


Мне нужно преобразовать эту функцию в базу данных Postgress, чтобы работать с ней в этой БД.

Что я уже пробовал:

Я попробовал следующее

CREATE FUNCTION LK_Split(String varchar(5000), Delimiter char(1))       
returns table       
language plpgsql
as
$$    
declare
idx integer;      
slice varchar(8000); 
table1 table; 

select idx = 1       
if length(String)<1 or String is null  return       

while idx!= 0       
begin       
set idx = charindex(Delimiter,String);      
if idx!=0       
set slice = left(String,idx - 1;   
else       
set slice = String  ;     

if(length(slice)>0)  
select values(slice) into temptable(Items) from table1
return table1;

set String = right(String,length(String) - idx)       
if length(String) = 0 break ;      
end;
end;
$$;


Но он не работает из-за возврата табличного значения.

CHill60

Пожалуйста, уточните, что означает "не работает из-за возврата табличного значения"

Member 11776570

Просто мне нужно преобразовать эту SQL-функцию в Postgres, поэтому я не могу ее преобразовать. Пожалуйста, если вы можете преобразовать его или сделать ту же функцию, которая работает в базе данных postgres.

CHill60

Что не так с кодом, который вы уже преобразовали?
Мы делаем это в свободное время и более чем рады помочь, но мы не делаем вашу работу за вас. Кроме того, очень трудно переписать sql без схем таблиц, примеров данных или ожидаемых результатов.
Вы также проделали некоторую работу, но утверждаете, что она не работает, но я не понимаю предложения "но она не работает из-за возврата табличного значения." Так что просто уточните, что это значит.
Кстати - если вы используете кнопку ответа на сообщение, то участник будет уведомлен о вашем ответе

Member 11776570

Это предложение "но оно не работает из-за возврата табличного значения" означает, что возвращаемая таблица, которую я использовал, не работает в Postgres. Я хочу, чтобы та же самая функция была в Postgres nothiugn else.
Ниже приведены примерные данные.
(А,А,А,С,С,С,С,С, А,А,"","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","")

1 Ответов

Рейтинг:
2

CHill60

Ваш Create Function код неверен - см. PostgreSQL: документация: 9.4: функция создания[^].
Вы не определили список столбцов.
Пример см. В разделе Функция PL/pgSQL возвращает таблицу[^]