2014-07-09 2 views
0

저장 프로 시저가 새로 도입되었지만 프로젝트에서 복잡한 저장 프로 시저를 만들어야했습니다. 논리적으로저장 프로 시저의 구문

, 나는

  1. 내가 테이블
  2. 각을의 독특한 속성을 통해 루프를하면서 필요 .. 그것을 할 수있는 몇 가지 아이디어가 있지만 정확한 구문과 저장 프로 시저의 규칙을 모르는 별개의 속성의 값은 필터 기준으로 다른 테이블의 쿼리에 데려
  3. 리턴 연합 테이블

    alter procedure dbo.someStoreProcedure 
        @paramA varchar(255) 
        .... 
    
        declare @attributeA,@resultSql 
    
        while((select count distinct attributeA from tableA where attributeB>@paramA and attributeB<@paramA+5)>0)//1. 
    
        BEGIN 
    
        @attributeA=select count distinct attributeA from tableA where   attributeB>@paramA and attributeB<@paramA+5 
    
        @resultSql= 
         select fieldA,fieldB,fieldC from tableB where [email protected]//2,within   loop 
        UNION 
         select attributeA,attributeB,attributeC from table A where [email protected]//3 
    
    
        END 
    

각 루프의 (3)과 (2)의 반환 조합 결과

+0

질문이 명확하지 않다. 이 스크립트에서, 당신은'varchar' 형의 매개 변수를 취했으나'while loop'에서는 숫자 형 데이터처럼 사용했습니다. 사람들이 쉽게 이해하고 당신을 도울 수 있도록 질문을 수정하십시오. –

+1

** ** 저장된 ** 프로 시저 - ** 저장된 ** 데이터베이스 내부 ("저장소"와 아무 관계가 없음)입니다. 거의 모든 데이터베이스 벤더가 ** 온라인 문서 **를 가지고있어 자유롭게 액세스 할 수 있으며 스토어드 프로 시저를 작성하는 방법에 대한 모든 세부 사항을 알 수 있습니다. –

+0

어떤 DBMS를 사용하고 있습니까? 스토어드 프로 시저의 구문은 DBMS 제품에 매우 한정적입니다 (추가적으로 하나의 SQL 문으로 수행 할 수있는 절차가 필요 없다고 생각합니다.) 그러나 샘플 데이터를 제공해야한다는 것을 알고 있어야합니다 예상 결과 및 표 정의와 함께) –

답변

0

목표 DBMS는 무엇입니까? postgresql 경우, 나는 당신의 샘플 코드를 다시 쓸 수 있다고 생각한다.

CREATE OR REPLACE FUNCTION dbo.someStoreProcedure(VARCHAR, VARCHAR) RETURNS SETOF RECORD AS ' 
    DECLARE 
     paramA ALIAS FOR $1; 
     paramB ALIAS FOR $2; 
     resultSql RECORD; 
     attributeA BIGINT; 
    BEGIN 
     WHILE ((SELECT COUNT(DISTINCT attributeA) FROM tableA WHERE attributeB > paramA AND attributeB < paramA + 5) > 0) 
     LOOP 
      attributeA := (SELECT COUNT(DISTINCT attributeA) FROM tableA WHERE attributeB > paramA AND attributeB < paramA + 5); 
      FOR resultSql IN 
       SELECT fieldA, fieldB, fieldC FROM tableB WHERE fieldB = attributeA 
       UNION 
       SELECT attributeA, attributeB, attribute C FROM tableA WHERE attributeB = attributeA 
      LOOP 
       RETURN NEXT resultSql; 
      END LOOP; 
     END LOOP; 
     RETURN; 
    END 
' LANGUAGE pgplsql;