Q&A

  • 스토어드 프로시저에 대해서... 점 도와주세요
안녕하세요..
제가 알려고 하는것이 없어서 이렇게글을 올립니다.
한가지 여쭈어 보겠습니다.
스토어드 프로시저에 관한건데요...
하나의 테이블에서만 사용하는 업데이트 스토어드프로시저 말구요
여러 테이블을 땡겨와서  update하려는 테이블에서 업데이트 스토어드프로시저를 적용할려구 하는데요..
업데이트 스토어드프로시저를 작성할때 어떻게 해야되나요?
점도와주세요 저는 델파이 6.0(엔터프라이즈)을 사용하구요
디비는 인터베이스 6.0을 사용합니다.

*sql 문으로 작성하여 사용할려구 합니다.. 점도와주세요..*
2  COMMENTS
  • Profile
    Tk 2002.01.16 06:21
    현재 인터베이스 에서 쓰고 프로시저 있는검다..
    if.. then  else   while..  등등 변수 선언해서.
    CREATE PROCEDURE PROC_PIT_MXTK (
      F_1 VARCHAR(4),
      F_2 VARCHAR(4),
      F_3 VARCHAR(8),
      F_4 VARCHAR(6),
      F_5 VARCHAR(12),
      F_6 VARCHAR(2),
      FCH_ID VARCHAR(16),
      ......................
      FILLER3 VARCHAR(9)
    ) RETURNS (
      RF_6 VARCHAR(2),
      RCK_TNO INTEGER,
      RPIT_OC INTEGER,
      RPIT_EX INTEGER,
      RPIT_SM INTEGER
    ) AS            
    declare variable tk_ck  varchar(2);
    declare variable tk_gen integer;
    declare variable pit integer;
    declare variable f_7 varchar(15);
    declare variable pcrd varchar(37);
    declare variable tk_sm integer;
    begin
    tk_gen = gen_id(tk_tno,1); // 고유번호 발번
    RCK_TNO = tk_gen;
    if (:F_1 ='0300') then
    begin
      select f_7, pit from fch_mxtk where f_7 = :fch_id
        into :f_7, :pit;
        if (f_7 is  null ) then
        rf_6 ='02';
        else
        rf_6 ='00';

    rpit_oc =ceiling(ceiling(:my *( :pit / 100))*0.8);
    tk_sm =ceiling(:my *( :pit / 100));
      insert into pit_mxtk(F_1, F_2,F_3, F_4, F_5,F_6,FCH_ID, TDATE,TTIME,PKD,WCC, CRD_ID,
      PW,  MY, FILLER1, FILLER2,CNE_CDE, FILLER3,ck_tno,pit_oc,pit_sm)
      values (:F_1, :F_2, :F_3, :F_4, :F_5, :rf_6, :FCH_ID, :TDATE,:TTIME,:PKD,:WCC, :CRD_ID,
      :PW,  :MY, :FILLER1, :FILLER2, :CNE_CDE, :FILLER3,:tk_gen, :rpit_oc,:tk_sm);

      if (:F_1 = '0300') then
      begin
         if (:f_6 ='00') then
          begin
          select crd from mbr_ck2 where crd = :crd_id
          into :pcrd;
           if (pcrd is not null) then
              update mbr_ck2 set pit_sm = (pit_sm +ceiling(ceiling((:my *( :pit / 100))))*0.8) where rtrim(crd) = rtrim(:crd_id);
           else
              insert into mbr_ck2(crd,pit_sm) values(:crd_id, ceiling(ceiling((:my *( :pit / 100))))*0.8);
          end
       end
       select pit_ex, pit_sm from mbr_ck2 where crd = :crd_id
       into :rpit_ex, :rpit_sm;
    end /* 0300 end */
    else
    if (:f_1 = '0500') then
    begin
    rpit_sm = 22;
    end
    suspend;
    end
  • Profile
    델파이탐크루즈 2002.01.14 20:54
    안녕하세요...

    기본적으로 스토어드프로시져는 한곳의 테이블에서 가지고와서
    사용하는것은 부적절한 방법입니다..
    다시말해 의미가 없다는 말이죠...

    그래서 여러곳의 테이블에 있는 것들을 조인해서
    가지고와서 계산한다거나 해서 한곳의 테이블에
    UpDate하는것이 적절한 방법입니다.

    그리고 프로시져와 트리거를 같이 쓰시는것이 좋을듯
    싶습니다.

    책을 보시면 간단하게 작성 요령이 나와있습니다.
    기본적으로 문법은 아셔야 될듯 싶군요...

    맨처음에는 이렇게 프로시져 명을 선언해주어야 합니다.
    CREATE OR REPLACE PROCEDURE 프로시져 명

    그런다음 파라미터 값을 선언하시구여...
    ( P_Sabun   JEGO.ID%TYPE) AS  
    그런다음 변수 선언을 하시면 되죠...

         V_CNT                   NUMBER    := 0;        숫자형
         V_MNG_DATE              DATE;                 날짜형
         V_WORK_CODE             CHAR(1);            문자
    이런식으로 코딩하셔야됩니다..
    물론 책에 다나와있죠...

    BEGIN   <--- 요렇게  Begin - End 문으로 묶입니다.

         SELECT      
         FROM
         WHERE


        IF V_CNT > 0 THEN    <--- IF문은 이렇게 쓰죠...

           P_RTNCD := '';
           RETURN;

        END IF;

    -- CURSOR 선언--

    DECLARE

       CURSOR A_CURSOR IS
       CLOSE   A_CURSOR;
       END;

       COMMIT;

    END  프로시져 명;

    기본적으로 스토어드 프로시져는 이렇게 생성하고 쓰여집니다.

    기본적인 왁구를 설명드리긴 했지만 어떻게 이해가 가시는지
    모르겠군요...

    더자세한건 책 보세요..
    그리고 하시다가 이해가 않되는 부분이 있으면 리플 달아놓으세요
    그러면 답변해드리죠...

    그럼 즐코...

    샬롬....