2016-06-08 5 views
0

PostgreSQL에 대해 더 많이 배우고 있습니다. MSSQL Server에서 PostgreSQL으로 옮겨 가고 있습니다. 내가 PostgreSQL의 함수에서 sp_executesql을 부분을 어떻게 해결하려고 노력하고있어postgresql이 동적 SQL 명령을 실행합니다.

DECLARE ServiceabilityParameters 
CURSOR FORWARD_ONLY READ_ONLY STATIC LOCAL FOR 
SELECT WorkbookParameterType.ID, 
     WorkbookParameterType.Name, 
     WorkbookParameter.DefaultValue, 
     WorkbookParameter.CommandText 
FROM WorkbookParameter 
JOIN WorkbookParameterType ON WorkbookParameterType.ID = WorkbookParameter.WorkbookParameterTypeID 
JOIN WorkbookParameterDirectionType ON WorkbookParameterDirectionType.ID = WorkbookParameter.WorkbookParameterDirectionTypeID 
AND          WorkbookParameterDirectionType.Writable = 1 
WHERE WorkbookParameter.WorkbookID = @WorkbookID 

OPEN ServiceabilityParameters 

FETCH NEXT FROM ServiceabilityParameters INTO @WorkbookParameterTypeID, @WorkbookParameterTypeName, @WorkbookDefaultValue, @WorkbookCommandText 

WHILE @@FETCH_STATUS = 0 
BEGIN 
DECLARE @ActualValue  NVARCHAR(256) = NULL  

IF @WorkbookCommandText IS NOT NULL 
BEGIN 
    EXEC sp_executesql @statement    = @WorkbookCommandText, 
         @params     = N'@ApplicationContainerID INT, @Value NVARCHAR(256) OUTPUT', 
         @ApplicationContainerID = @ApplicationContainerID, 
         @Value     = @ActualValue OUTPUT 
END 

IF @ActualValue IS NULL AND @WorkbookDefaultValue IS NOT NULL 
BEGIN 
    SET @ActualValue = @WorkbookDefaultValue 
END 

INSERT @InputParameters (
    ID, Name, Value 
) VALUES (
    @WorkbookParameterTypeID, @WorkbookParameterTypeName, @ActualValue 
) 

FETCH NEXT FROM ServiceabilityParameters INTO @WorkbookParameterTypeID, @WorkbookParameterTypeName, @WorkbookDefaultValue, @WorkbookCommandText 
END 

CLOSE ServiceabilityParameters 
DEALLOCATE ServiceabilityParameters 

: MSSQL에서

나는 다음과 같은 코드가 있습니다. 나머지는 할 수 있다고 생각하지만 대부분의 예제에서는 간단한 변수를 몇 가지 변수로 표시하지만 다른 함수는 매개 변수와 함께 실행해야합니다. 여기서 함수 이름은 테이블의 텍스트입니다.

많은 감사.

+1

https://www.postgresql.org/docs/current/static/plpgsql-statements.html#PLPGSQL-STATEMENTS-EXECUTING-DYN –

답변

0

나는 싶은 것은 this 같은 EXECUTE 'some string', 생각 :

EXECUTE 'SELECT count(*) FROM mytable WHERE inserted_by = $1 AND inserted <= $2' 
    INTO c 
    USING checked_user, checked_date; 

또 다른 옵션은 만들고 PL/PGSQL functions 자신을 사용하는 것입니다.

+0

아니요 ... 'some string'이 다른 함수의 이름이 될 수있는 경우가 아니면 매개 변수와 함께 ...하지만 어쨌든 건배. – Boothy

+0

시도해 보셨습니까, @Boothy? – hdiogenes

관련 문제