수색…


소개

진행 ABL에는 두 가지 유형의 프로 시저가 있습니다. 내부 프로 시저와 프로 시저 프로토 타입은 Windows dll 또는 Unix / Linux 공유 라이브러리 프로 ​​시저에 대한 facades입니다.

함수와 마찬가지로 프로 시저를 중첩 할 수 없습니다. 프로 시저에서 함수를 중첩 할 수 없으며 그 반대도 마찬가지입니다.

프로 시저가 RUN 문과 함께 호출됩니다.

통사론

  • 프로 시저 이름을 실행하십시오. // procedurename이라는 프로 시저를 실행합니다.

  • RUN proc1 (INPUT "HELLO"). // HELLO 문자열을 proc1에 입력합니다.

  • RUN proc2 (입력 var1, 출력 var2). // var1을 입력하고 var2를 proc2로 /로부터 출력한다.

  • RUN proc3 (입력 "name = 'joe'", 출력 테이블 ttResult). // names = joe를 입력하고 테이블에 레코드를 출력합니다.

  • PROCEDURE proc : // proc라는 프로 시저를 선언합니다.

  • 끝 절차. // 현재 프로 시저를 종료합니다.

기본 내부 절차

함수와 달리 프로 시저를 선언 할 필요가 없습니다. RUN 을 사용하여 호출하기 전이나 후에 코드의 아무 곳에 나 배치 할 수 있습니다.

RUN proc.

//Procedure starts here
PROCEDURE proc:

//Procedure ends here
END PROCEDURE. 

프로 시저 이름에는 콜론 기호가 표시되어 이것이 이것이 블록의 시작임을 나타냅니다. 블록은 END PROCEDURE.END PROCEDURE. 납니다 END PROCEDURE. (그러나 이것은 단순히 END. 로 대체 될 수 있습니다 END. ).

INPUT 및 OUTPUT 매개 변수

프로 시저에는 입력, 출력, 입출력 (양방향) 및 임시 테이블과 데이터 세트와 같은 몇 가지 특수한 유형의 매개 변수가있을 수 있습니다.

run 문에서 INPUT 을 선언하는 것은 선택 사항입니다 (기본값으로 간주 됨). 다른 모든 지시는 구체적으로 선언해야합니다.

두 개의 정수를 입력으로 취하고 십진수를 출력하는 절차.

PROCEDURE divideAbyB:
    DEFINE INPUT  PARAMETER piA       AS INTEGER     NO-UNDO.
    DEFINE INPUT  PARAMETER piB       AS INTEGER     NO-UNDO.
    DEFINE OUTPUT PARAMETER pdeResult AS DECIMAL     NO-UNDO.

    pdeResult = piA / piB.

END PROCEDURE.

DEFINE VARIABLE de AS DECIMAL     NO-UNDO.

RUN divideAbyB(10, 2, OUTPUT de).

DISPLAY de. //5.00

매개 변수는 전적으로 선택 사항입니다. 원하는대로 혼합하고 일치시킬 수 있습니다. 매개 변수의 순서는 사용자가 결정할 수 있지만 입력으로 시작하여 출력으로 끝내면 편리합니다. run 문에서 올바른 순서로 입력해야하며 혼합 방향이 짜증 스럽습니다.

재귀 - 재귀 참조

재귀는 쉽습니다. 프로 시저 내부에서 프로 시저 자체를 RUN 하십시오. 그러나 너무 멀리 재귀하면 스택에 공간이 부족합니다.

프로 시저는 계승을 계산합니다.

PROCEDURE factorial:
    DEFINE INPUT  PARAMETER piNum AS INTEGER     NO-UNDO.
    DEFINE OUTPUT PARAMETER piFac AS INTEGER     NO-UNDO.

    DEFINE VARIABLE iFac AS INTEGER     NO-UNDO.

    IF piNum = 1 THEN DO:
        pifac = 1.
    END.
    ELSE DO:
        RUN factorial(piNum - 1, OUTPUT iFac).
        piFac = piNum * iFac.
    END.

END PROCEDURE.

DEFINE VARIABLE f AS INTEGER     NO-UNDO.

RUN factorial(7, OUTPUT f).

DISPLAY f.

범위

프로 시저에는 자체 범위가 있습니다. 외부 범위는 절차로 "흘릴"것이고 다른 방법은 arround가 아닙니다.

DEFINE VARIABLE i AS INTEGER     NO-UNDO INIT 1.
DEFINE VARIABLE j AS INTEGER     NO-UNDO.

PROCEDURE p:

    MESSAGE i VIEW-AS ALERT-BOX. // 1
    MESSAGE j VIEW-AS ALERT-BOX. // 0

    j = 2.

END PROCEDURE.

RUN p.

MESSAGE i VIEW-AS ALERT-BOX. // 1
MESSAGE j VIEW-AS ALERT-BOX. // 2

외부의 매개 변수와 이름이 같은 프로 시저 내에서 변수를 선언하면 로컬 변수 만 생성됩니다.

DEFINE VARIABLE i AS INTEGER     NO-UNDO INIT 1.
DEFINE VARIABLE j AS INTEGER     NO-UNDO.

PROCEDURE p:
    
    DEFINE VARIABLE i AS INTEGER     NO-UNDO INIT 5.

    MESSAGE i VIEW-AS ALERT-BOX. // 5
    MESSAGE j VIEW-AS ALERT-BOX. // 0

    j = 2.

END PROCEDURE.

RUN p.

MESSAGE i VIEW-AS ALERT-BOX. // 1
MESSAGE j VIEW-AS ALERT-BOX. // 2

프로 시저 내부에서 작성된 변수는 해당 프로 시저에서만 액세스 할 수 있습니다.

이렇게하면 컴파일러 오류가 발생합니다.

PROCEDURE p:
    
    DEFINE VARIABLE i AS INTEGER     NO-UNDO INIT 5.

END PROCEDURE.

RUN p.

MESSAGE i VIEW-AS ALERT-BOX. // Unknown Field or Variable name i - error 201


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow