PL/SQL : リアルサンプル3


  SAMPLE03




CREATE or REPLACE PROCEDURE SAMPLE03
        (
         PM_BLOCKSHO    IN      NUMBER
        ,PM_DATE    IN      DATE
        )
        AS

/*===========================================================================
   変数
===========================================================================*/
    source_cursor        integer;
    destination_cursor    integer;
    delete_cursor        integer;
    rows_processed        integer;

    WK_DATE        DATE;
    WK_JIGYO1    NUMBER(2,0);
    WK_JIGYO2    NUMBER(2,0);
    WK_SELECT    VARCHAR2(1024);            -- select 文
    WK_INSERT    VARCHAR2(1024);            -- insert 文
    WK_DELETE    VARCHAR2(256);            -- delete 文

    事業部        NUMBER(2,0);
    部        NUMBER(1,0);
    課        NUMBER(1,0);
    取引先        NUMBER(5,0);
    取引先支店    NUMBER(2,0);
    受注        CHAR(8);

    SUM_INIT    BOOLEAN;
    SV事業部    NUMBER(2,0);
    SV部        NUMBER(1,0);
    SV課        NUMBER(1,0);
    SV取引先    NUMBER(5,0);
    SV取引先支店    NUMBER(2,0);
    SV受注        CHAR(8);

    工事名称    VARCHAR2(48);            -- 現場台帳より
    契約金額    NUMBER(10,0);            -- 現場台帳より

    単前回請求額    NUMBER(10,0);
    単入金金額    NUMBER(10,0);
    単今回請求額    NUMBER(10,0);
    請求日        DATE;

    前回請求額    NUMBER(10,0);
    入金金額    NUMBER(10,0);
    今回請求額    NUMBER(10,0);

    当月売上高    NUMBER(10,0);            -- 売上明細より
    消費税        NUMBER(10,0);            -- 売上明細より
    前受金額    NUMBER(10,0);            -- 中間請求より

/*=====================================================
   中間請求管理テーブル名取得
   IN   PM_DATE         : 締年月日
   OUT  PM_TBLNAME      : 目的テーブル名
=====================================================*/
FUNCTION GET_CHUKANK_NAME
        (
         PM_DATE        IN      DATE
        )
    RETURN VARCHAR2
        AS

        WK_DAY          VARCHAR2(30);
        WK_TBLNAME      VARCHAR2(30);
BEGIN
        WK_DAY := TO_CHAR( PM_DATE, 'DD' );
        WK_TBLNAME := 'KF_CYUKANK' || WK_DAY;
    RETURN WK_TBLNAME;
END GET_CHUKANK_NAME;

/*=====================================================
   長い文字列出力
=====================================================*/
PROCEDURE PUT_LSTR
        (
         PM_STR        IN      VARCHAR2
        )
        AS

BEGIN
    DBMS_OUTPUT.PUT_LINE(substr(PM_STR,1,80));
    DBMS_OUTPUT.PUT_LINE(substr(PM_STR,81,80));
    DBMS_OUTPUT.PUT_LINE(substr(PM_STR,161,80));
    DBMS_OUTPUT.PUT_LINE(substr(PM_STR,241,80));
    DBMS_OUTPUT.PUT_LINE(substr(PM_STR,321,80));
    DBMS_OUTPUT.PUT_LINE(substr(PM_STR,401,80));
    DBMS_OUTPUT.PUT_LINE(substr(PM_STR,481,80));
END PUT_LSTR;

/*=====================================================
   文字列出力
=====================================================*/
PROCEDURE PUT_STR
        (
         PM_STR        IN      VARCHAR2
        )
        AS

BEGIN
    DBMS_OUTPUT.PUT_LINE(PM_STR);
END PUT_STR;

/*=====================================================
   事業部コード取得
   IN   PM_BLOCKSHO     : ブロック小コード
   OUT  PM_JIGYO1       : 対応する事業部コード1
                          (NULLでエラー)        
   OUT  PM_JIGYO2       : 対応する事業部コード2
                          (該当無しでNULL)      
=====================================================*/
PROCEDURE GET_JCODE
        (
         PM_BLOCKSHO    IN      NUMBER
        ,PM_JIGYO1      IN OUT  NUMBER
        ,PM_JIGYO2      IN OUT  NUMBER
        )
        AS

        WK_JIGYO       NUMBER(2,0);

        CURSOR jigyo_cur is 
                select
                        CD_JIGYO
                from
                        MM_JIGYO
                where
                        CD_BLOCKSHO = PM_BLOCKSHO;

BEGIN

        PM_JIGYO1       := NULL;             
        PM_JIGYO2       := NULL;             
        WK_JIGYO        := NULL;
        OPEN    jigyo_cur;
        LOOP
                FETCH   jigyo_cur       INTO    WK_JIGYO;
                EXIT    WHEN    jigyo_cur%NOTFOUND;
                EXIT    WHEN    PM_JIGYO1 != WK_JIGYO;
                PM_JIGYO1       :=      WK_JIGYO;
        END LOOP;
        CLOSE   jigyo_cur;
        if WK_JIGYO is not NULL and PM_JIGYO1 != WK_JIGYO THEN
                PM_JIGYO2 := WK_JIGYO;
        end if;

EXCEPTION
        WHEN OTHERS THEN
                NULL;

END GET_JCODE;

/*=====================================================
 対象取引先チェック
=====================================================*/
FUNCTION CHECK_TORI
        (
         PM_TORI    IN    NUMBER
        ,PM_TORI_ST    IN    NUMBER
    ,PM_SDATE    IN    DATE
        )
    RETURN BOOLEAN
        AS

    WK_DAY        NUMBER(2,0);
    WK_CMP_DAY    NUMBER(2,0);
    WK_KBN_JITA    NUMBER(1,0);
    WK_SIME        DATE;
    WK_SIME_NEW    DATE;            -- 最新請求締年月日
    WK_SIME_NEW2    DATE;            -- 最新請求締年月日
    WK_RET        BOOLEAN;
    WK_TORISUB    BOOLEAN;
    WK_J        NUMBER(2,0);

BEGIN

        BEGIN                            -- 1)取引マスタ参照
        select
            KBN_JITA
        into
            WK_KBN_JITA
        from
            MM_TORI
        where
            CD_TORI        = PM_TORI and
            CD_TORI_ST    = PM_TORI_ST;
        EXCEPTION
            WHEN NO_DATA_FOUND THEN NULL;
        END;
        if SQL%NOTFOUND or WK_KBN_JITA != 0 then  
dbms_output.put_line('取引マスタ無し or 自他区分が 0 で無い');
        return FALSE;
    end if;

        BEGIN                            -- 1)取引サブを参照
        select
            CD_JIGYO,
            DAY_SIME_SEI,
            YMD_SEI_NEW
        into
            WK_J,
            WK_DAY,
            WK_SIME_NEW
        from
            MM_TORISUB
        where
            CD_TORI        = PM_TORI and
            CD_TORI_ST    = PM_TORI_ST;
        EXCEPTION
            WHEN NO_DATA_FOUND THEN NULL;
        END;
        if SQL%FOUND then    -- 取引サブに存在した
        WK_SIME_NEW := nvl(WK_SIME_NEW,ADD_MONTHS(PM_DATE,-1));
        WK_TORISUB := TRUE;
        if    WK_JIGYO2 is NULL and
             WK_J = WK_JIGYO1
                or
            WK_JIGYO2 is not NULL and
            WK_J = WK_JIGYO1
                or
            WK_JIGYO2 is not NULL and
            WK_J = WK_JIGYO2        then
            WK_RET := TRUE;
        else
            WK_RET := FALSE;
        end if;

        if LAST_DAY(PM_DATE) = PM_DATE then
            WK_CMP_DAY := 99;
        else
            WK_CMP_DAY := TO_NUMBER(TO_CHAR(PM_DATE,'DD'));
        end if;

        if WK_DAY = WK_CMP_DAY and WK_RET then
                    BEGIN
                select
                    YMD_SIME_SEI
                into
                    WK_SIME
                from
                    KF_HSIME_SEI
                where
                    CD_BLOCKSHO    = PM_BLOCKSHO and
                    CD_TORI        = PM_TORI and
                    CD_TORI_ST    = PM_TORI_ST;
                    EXCEPTION
                            WHEN NO_DATA_FOUND THEN NULL;
                    END;
                    if SQL%NOTFOUND then    -- 該当するデータが締め日変更ファイルには無い
                if PM_SDATE is NULL then
                    return FALSE;
                else
                    WK_DATE := WK_SIME_NEW + 1;
                    if WK_DATE <= PM_SDATE and PM_SDATE <= PM_DATE then
                        return TRUE;
                    else
                        dbms_output.put_line('取引SUB,日付範囲外');
                        return FALSE;
                    end if;
                end if;
            else
                if WK_SIME = PM_DATE then    -- 抽出除外条件
                    dbms_output.put_line('抽出除外条件');
                    return FALSE;
                else
                    if PM_SDATE is NULL then
                        WK_RET := FALSE;
                    else
                        WK_DATE := WK_SIME_NEW + 1;
                        if WK_DATE <= PM_SDATE and PM_SDATE <= PM_DATE then
                            WK_RET := TRUE;
                        else
                            dbms_output.put_line('取引SUB,日付範囲外');
                            WK_RET := FALSE;
                        end if;
                    end if;
                end if;
            end if;
        else
            dbms_output.put_line('取引SUB,締め日不一致');
            WK_RET := FALSE;
        end if;
    else        -- 取引サブに存在しなかった
        dbms_output.put_line('取引SUBに無い');
        WK_TORISUB := FALSE;
        WK_RET := FALSE;
    end if;

        BEGIN
        select
            YMD_SEI_NEW,
            YMD_HSIME_SEI
        into
            WK_SIME_NEW2,
            WK_SIME
        from
            KF_HSIME_SEI
        where
            CD_BLOCKSHO    = PM_BLOCKSHO and
            CD_TORI        = PM_TORI and
            CD_TORI_ST    = PM_TORI_ST;
    EXCEPTION
        WHEN NO_DATA_FOUND THEN NULL;
    END;
    if SQL%FOUND then
        WK_SIME_NEW2 := nvl(WK_SIME_NEW2,ADD_MONTHS(PM_DATE,-1));
        if WK_SIME = PM_DATE then
            if PM_SDATE is NULL then
                return FALSE;
            else
                WK_DATE := WK_SIME_NEW2 + 1;
                if WK_DATE <= PM_SDATE and PM_SDATE <= PM_DATE then    -- 範囲内
                    return TRUE;
                else
                    return WK_RET;
                end if;
            end if;
        else
            return WK_RET;
        end if;
    else
        return WK_RET;
    end if;

END CHECK_TORI;

/*=====================================================
  売上金額・消費税取得
=====================================================*/
PROCEDURE GET_KIN
        (
         PM_JUCHU    IN CHAR
        ,PM_KIN1    IN OUT  NUMBER
        ,PM_KIN2    IN OUT  NUMBER
        )
        AS

BEGIN
    if WK_JIGYO2 is NULL then
        BEGIN
            select nvl(sum(KIN_URIAGE),0),nvl(sum(ZEI_URIAGE),0) 
                into PM_KIN1,PM_KIN2 from PF_DAICHO,UF_URIDT,UF_URIAGE
                where
                     PF_DAICHO.NO_JUCHU = UF_URIDT.NO_JUCHU and
                    UF_URIDT.NO_URIAGE = UF_URIAGE.NO_URIAGE and
                    UF_URIDT.NO_HAKKO = UF_URIAGE.NO_HAKKO and
                    UF_URIDT.KBN_DENPYO = UF_URIAGE.KBN_DENPYO and
                    PF_DAICHO.YMD_URI_KJ between WK_DATE and PM_DATE and
                    UF_URIAGE.CD_JIGYO = WK_JIGYO1 and
                     PF_DAICHO.NO_JUCHU = PM_JUCHU;
            EXCEPTION
                WHEN NO_DATA_FOUND THEN NULL;
            END;
            if SQL%NOTFOUND then  
            PM_KIN1 := 0;
            PM_KIN2 := 0;
        end if;
    else
        BEGIN
            select nvl(sum(KIN_URIAGE),0),nvl(sum(ZEI_URIAGE),0) 
                    into PM_KIN1,PM_KIN2 from PF_DAICHO,UF_URIDT,UF_URIAGE
                where
                     PF_DAICHO.NO_JUCHU = UF_URIDT.NO_JUCHU and
                    UF_URIDT.NO_URIAGE = UF_URIAGE.NO_URIAGE and
                    UF_URIDT.NO_HAKKO = UF_URIAGE.NO_HAKKO and
                    UF_URIDT.KBN_DENPYO = UF_URIAGE.KBN_DENPYO and
                    PF_DAICHO.YMD_URI_KJ between WK_DATE and PM_DATE and
                    UF_URIAGE.CD_JIGYO in (WK_JIGYO1,WK_JIGYO2) and
                     PF_DAICHO.NO_JUCHU = PM_JUCHU;
            EXCEPTION
                WHEN NO_DATA_FOUND THEN NULL;
            END;
            if SQL%NOTFOUND then  
            PM_KIN1 := 0;
            PM_KIN2 := 0;
        end if;
    end if;    

END GET_KIN;

/*=====================================================
  関数名
=====================================================*/
FUNCTION SUM_CHUKAN
    RETURN BOOLEAN
    AS
BEGIN
    if SUM_INIT then
        事業部        := SV事業部;
        部        := SV部;
        課        := SV課;
        取引先        := SV取引先;
        取引先支店    := SV取引先支店;
        受注        := SV受注;
        SUM_INIT    := FALSE;
        if CHECK_TORI(取引先,取引先支店,請求日) then
            前回請求額    := 単前回請求額;
            入金金額    := 単入金金額;
            今回請求額    := 単今回請求額;
        end if;
        RETURN FALSE;
    else
        if    事業部        = SV事業部    and
            部        = SV部        and
            課        = SV課        and
            取引先        = SV取引先    and
            取引先支店    = SV取引先支店    and
            受注        = SV受注            then
            if CHECK_TORI(取引先,取引先支店,請求日) then
                前回請求額    := 前回請求額    + 単前回請求額;
                入金金額    := 入金金額    + 単入金金額;
                今回請求額    := 今回請求額    + 単今回請求額;
            end if;
            RETURN FALSE;
        else
            RETURN TRUE;
        end if;
    end if;
END SUM_CHUKAN;

/*===========================================================================
   主処理
===========================================================================*/
BEGIN

/*=====================================================
   初期処理
=====================================================*/
    GET_JCODE( PM_BLOCKSHO, WK_JIGYO1, WK_JIGYO2 );
    SUM_INIT := TRUE;
    前回請求額    := 0;
    入金金額    := 0;
    今回請求額    := 0;
--    PUT_STR(TO_CHAR(WK_DATE,'YY/MM/DD') || '〜' || TO_CHAR(PM_DATE,'YY/MM/DD'));
--    PUT_STR(TO_CHAR(WK_JIGYO1) || ' and ' || TO_CHAR(WK_JIGYO2));

/*=====================================================
   SELECT文作成
=====================================================*/
    WK_SELECT    :=
    'select
        UF_JUCHU.CD_JIGYO,
        UF_JUCHU.CD_BUMON,
        UF_JUCHU.CD_KA,
        PF_CHUKAN.CD_TOKUI,
        PF_CHUKAN.CD_TOKUI_ST,
        PF_CHUKAN.NO_JUCHU,
        nvl(PF_CHUKAN.KIN_ZENSEI,0),
        nvl(PF_CHUKAN.KIN_NYUKIN,0),
        nvl(PF_CHUKAN.KIN_KONSEI,0),
        PF_CHUKAN.YMD_SEIKYU
    from
        PF_CHUKAN,UF_JUCHU
    where
        PF_CHUKAN.NO_JUCHU = UF_JUCHU.NO_JUCHU';

    if WK_JIGYO2 is NULL then
        if WK_JIGYO1 is not NULL then
            WK_SELECT := CONCAT( WK_SELECT, ' and UF_JUCHU.CD_JIGYO = :WK_JIGYO1 ' );
        end if;
    else
        WK_SELECT := CONCAT( WK_SELECT, ' and UF_JUCHU.CD_JIGYO IN (:WK_JIGYO1,:WK_JIGYO2) ' );
    end if;    
    WK_SELECT := CONCAT( WK_SELECT, ' and PF_CHUKAN.YMD_SEIKYU <= :PM_DATE ' );
    WK_SELECT := CONCAT( WK_SELECT, 
        ' order by CD_JIGYO,CD_BUMON,CD_KA,PF_CHUKAN.CD_TOKUI,PF_CHUKAN.CD_TOKUI_ST,PF_CHUKAN.NO_JUCHU ' );

--    PUT_LSTR(WK_SELECT);

/*=====================================================
   入力定義
=====================================================*/
    source_cursor        :=    dbms_sql.open_cursor;
    dbms_sql.parse( source_cursor, WK_SELECT, 2 );


    dbms_sql.define_column( source_cursor,    1,    SV事業部 );
    dbms_sql.define_column( source_cursor,    2,    SV部 );
    dbms_sql.define_column( source_cursor,    3,    SV課 );
    dbms_sql.define_column( source_cursor,    4,    SV取引先 );
    dbms_sql.define_column( source_cursor,    5,    SV取引先支店 );
    dbms_sql.define_column( source_cursor,    6,    SV受注, 8 );
    dbms_sql.define_column( source_cursor,    7,    単前回請求額 );
    dbms_sql.define_column( source_cursor,    8,    単入金金額 );
    dbms_sql.define_column( source_cursor,    9,    単今回請求額 );
    dbms_sql.define_column( source_cursor,    10,    請求日 );

    if WK_JIGYO2 is NULL then
        if WK_JIGYO1 is not NULL then
            dbms_sql.bind_variable( source_cursor, 'WK_JIGYO1', WK_JIGYO1);
        end if;
    else
        dbms_sql.bind_variable( source_cursor, 'WK_JIGYO1', WK_JIGYO1);
        dbms_sql.bind_variable( source_cursor, 'WK_JIGYO2', WK_JIGYO2);
    end if;    
    dbms_sql.bind_variable( source_cursor, 'PM_DATE', PM_DATE);

    rows_processed        :=    dbms_sql.execute( source_cursor );

/*=====================================================
   出力定義
=====================================================*/
    destination_cursor    :=    dbms_sql.open_cursor;
    WK_INSERT    :=
    'insert into ' || GET_CHUKANK_NAME(PM_DATE) || ' (
        CD_BLOCKSHO,
        CD_JIGYO,
        CD_BUMON,
        CD_KA,
        CD_TORI,
        CD_TORI_ST,
        NO_JUCHU,
        NM_KOJI,
        KIN_KEIYAKU,
        KIN_ZENSEI,
        KIN_NYUKIN,
        KIN_KONSEI,
        KIN_URIAGE,
        KIN_SYOUHI,
        KIN_MAEUKE
    ) values(
        :CD_BLOCKSHO,
        :CD_JIGYO,
        :CD_BUMON,
        :CD_KA,
        :CD_TORI,
        :CD_TORI_ST,
        :NO_JUCHU,
        :NM_KOJI,
        :KIN_KEIYAKU,
        :KIN_ZENSEI,
        :KIN_NYUKIN,
        :KIN_KONSEI,
        :KIN_URIAGE,
        :KIN_SYOUHI,
        :KIN_MAEUKE
    )';

--    PUT_LSTR(WK_INSERT);
    dbms_sql.parse( destination_cursor, WK_INSERT, 2 );

    delete_cursor    :=    dbms_sql.open_cursor;
    WK_DELETE    := 'delete from ' || GET_CHUKANK_NAME(PM_DATE);
    dbms_sql.parse( delete_cursor, WK_DELETE, 2 );
    rows_processed    :=    dbms_sql.execute( delete_cursor );
    dbms_sql.close_cursor( delete_cursor );

/*=====================================================
   入出力
=====================================================*/

    loop
        if dbms_sql.fetch_rows( source_cursor ) > 0 then

            dbms_sql.column_value( source_cursor,    1,    SV事業部 );
            dbms_sql.column_value( source_cursor,    2,    SV部 );
            dbms_sql.column_value( source_cursor,    3,    SV課 );
            dbms_sql.column_value( source_cursor,    4,    SV取引先 );
            dbms_sql.column_value( source_cursor,    5,    SV取引先支店 );
            dbms_sql.column_value( source_cursor,    6,    SV受注 );
            dbms_sql.column_value( source_cursor,    7,    単前回請求額 );
            dbms_sql.column_value( source_cursor,    8,    単入金金額 );
            dbms_sql.column_value( source_cursor,    9,    単今回請求額 );
            dbms_sql.column_value( source_cursor,    10,    請求日 );
dbms_output.put_line('READ');
dbms_output.put_line(単前回請求額);
dbms_output.put_line(単入金金額);
dbms_output.put_line(単今回請求額);

            if SUM_CHUKAN then
                dbms_sql.bind_variable( destination_cursor, 'CD_BLOCKSHO', PM_BLOCKSHO);
                dbms_sql.bind_variable( destination_cursor, 'CD_JIGYO', 事業部);
                dbms_sql.bind_variable( destination_cursor, 'CD_BUMON', 部);
                dbms_sql.bind_variable( destination_cursor, 'CD_KA', 課);
                dbms_sql.bind_variable( destination_cursor, 'CD_TORI', 取引先);
                dbms_sql.bind_variable( destination_cursor, 'CD_TORI_ST', 取引先支店);
                dbms_sql.bind_variable( destination_cursor, 'NO_JUCHU', 受注);

                    BEGIN
                    select NM_KOJI,KIN_KEIYAKU 
                        into 工事名称,契約金額 from PF_DAICHO where NO_JUCHU = 受注;
                    EXCEPTION
                        WHEN NO_DATA_FOUND THEN NULL;
                    END;
                    if SQL%NOTFOUND then  
                    工事名称 := NULL;
                    契約金額 := 0;
                end if;
                    BEGIN
                    select nvl(sum(KIN_NYUKIN),0) 
                        into 前受金額 from PF_CHUKAN,PF_DAICHO 
                        where 
                            PF_CHUKAN.NO_JUCHU = PF_DAICHO.NO_JUCHU and 
                            PF_CHUKAN.NO_JUCHU = 受注 and 
                            YMD_URI_KJ between WK_DATE and PM_DATE;
                    EXCEPTION
                        WHEN NO_DATA_FOUND THEN NULL;
                    END;
                    if SQL%NOTFOUND then  
                    前受金額 := 0;
                end if;

                dbms_sql.bind_variable( destination_cursor, 'NM_KOJI', 工事名称);
                dbms_sql.bind_variable( destination_cursor, 'KIN_KEIYAKU', 契約金額);
                dbms_sql.bind_variable( destination_cursor, 'KIN_ZENSEI', 前回請求額);
                dbms_sql.bind_variable( destination_cursor, 'KIN_NYUKIN', 入金金額);
                dbms_sql.bind_variable( destination_cursor, 'KIN_KONSEI', 今回請求額);

                GET_KIN(受注,当月売上高,消費税);
                dbms_sql.bind_variable( destination_cursor, 'KIN_URIAGE', 当月売上高);    -- 関数より
                dbms_sql.bind_variable( destination_cursor, 'KIN_SYOUHI', 消費税);    -- 関数より
                dbms_sql.bind_variable( destination_cursor, 'KIN_MAEUKE', 前受金額);
                rows_processed        :=    dbms_sql.execute(destination_cursor);

dbms_output.put_line('INSERT');
dbms_output.put_line(前回請求額);
dbms_output.put_line(入金金額);
dbms_output.put_line(今回請求額);
                前回請求額    := 0;
                入金金額    := 0;
                今回請求額    := 0;
                if CHECK_TORI(SV取引先,SV取引先支店,請求日) then
dbms_output.put_line('CHECKOK');
                    前回請求額    := 単前回請求額;
                    入金金額    := 単入金金額;
                    今回請求額    := 単今回請求額;
                end if;
                事業部        := SV事業部;
                部        := SV部;
                課        := SV課;
                取引先        := SV取引先;
                取引先支店    := SV取引先支店;
                受注        := SV受注;
            end if;
        else
            if SUM_INIT = FALSE then
                dbms_sql.bind_variable( destination_cursor, 'CD_BLOCKSHO', PM_BLOCKSHO);
                dbms_sql.bind_variable( destination_cursor, 'CD_JIGYO', 事業部);
                dbms_sql.bind_variable( destination_cursor, 'CD_BUMON', 部);
                dbms_sql.bind_variable( destination_cursor, 'CD_KA', 課);
                dbms_sql.bind_variable( destination_cursor, 'CD_TORI', 取引先);
                dbms_sql.bind_variable( destination_cursor, 'CD_TORI_ST', 取引先支店);
                dbms_sql.bind_variable( destination_cursor, 'NO_JUCHU', 受注);

                    BEGIN
                    select NM_KOJI,KIN_KEIYAKU into 工事名称,契約金額 
                        from PF_DAICHO where NO_JUCHU = 受注;
                    EXCEPTION
                        WHEN NO_DATA_FOUND THEN NULL;
                    END;
                    if SQL%NOTFOUND then  
                    工事名称 := NULL;
                    契約金額 := 0;
                end if;
                    BEGIN
                    select nvl(sum(KIN_NYUKIN),0) 
                        into 前受金額 from PF_CHUKAN,PF_DAICHO 
                        where 
                            PF_CHUKAN.NO_JUCHU = PF_DAICHO.NO_JUCHU and 
                            PF_CHUKAN.NO_JUCHU = 受注 and 
                            YMD_URI_KJ between WK_DATE and PM_DATE;
                    EXCEPTION
                        WHEN NO_DATA_FOUND THEN NULL;
                    END;
                    if SQL%NOTFOUND then  
                    前受金額 := 0;
                end if;

                dbms_sql.bind_variable( destination_cursor, 'NM_KOJI', 工事名称);
                dbms_sql.bind_variable( destination_cursor, 'KIN_KEIYAKU', 契約金額);
                dbms_sql.bind_variable( destination_cursor, 'KIN_ZENSEI', 前回請求額);
                dbms_sql.bind_variable( destination_cursor, 'KIN_NYUKIN', 入金金額);
                dbms_sql.bind_variable( destination_cursor, 'KIN_KONSEI', 今回請求額);

                GET_KIN(受注,当月売上高,消費税);
                dbms_sql.bind_variable( destination_cursor, 'KIN_URIAGE', 当月売上高);    -- 関数より
                dbms_sql.bind_variable( destination_cursor, 'KIN_SYOUHI', 消費税);    -- 関数より
                dbms_sql.bind_variable( destination_cursor, 'KIN_MAEUKE', 前受金額);
                rows_processed        :=    dbms_sql.execute(destination_cursor);
            end if;
            exit;
        end if;
    end loop;

/*=====================================================
   終了処理
=====================================================*/
    commit;
    dbms_sql.close_cursor( source_cursor );
    dbms_sql.close_cursor( destination_cursor );

END SAMPLE03;
/












yahoo  google  MSDN  MSDN(us)  WinFAQ  Win Howto  tohoho  ie_DHTML  vector  wdic  辞書  天気 


[oraPlsql]
Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
24/04/20 10:20:58
InfoBoard Version 1.00 : Language=Perl

1 BatchHelper COMprog CommonSpec Cprog CprogBase CprogSAMPLE CprogSTD CprogSTD2 CprogWinsock Cygwin GameScript HTML HTMLcss InstallShield InstallShieldFunc JScript JScriptSAMPLE Jsfuncs LLINK OldProg OracleGold OracleSilver PRO PRObrowser PROc PROconePOINT PROcontrol PROftpclient PROjscript PROmailer PROperl PROperlCHAT PROphp PROphpLesson PROphpLesson2 PROphpLesson3 PROphpfunction PROphpfunctionArray PROphpfunctionMisc PROphpfunctionString PROsql PROvb PROvbFunction PROvbString PROvbdbmtn PROvbonepoint PROwebapp PROwin1POINT PROwinSYSTEM PROwinYOROZU PROwindows ProjectBoard RealPHP ScriptAPP ScriptMaster VBRealtime Vsfuncs a1root access accreq adsi ajax amazon argus asp aspSample aspVarious aspdotnet aw2kinst cappvariety centura ckeyword classStyle cmaterial cmbin cmdbapp cmenum cmlang cmlistbox cmstd cmstdseed cmtxt cs daz3d db dbCommon dbaccess dnettool dos download flex2 flex3 flex4 framemtn framereq freeWorld freesoft gimp ginpro giodownload google hdml home hta htmlDom ie9svg install java javaSwing javascript jetsql jquery jsp jspTest jspVarious lightbox listasp listmsapi listmsie listmsiis listmsnt listmspatch listmsscript listmsvb listmsvc memo ms msde mysql netbeans oraPlsql oracle oracleWiper oraclehelper orafunc other panoramio pear perl personal pgdojo pgdojo_cal pgdojo_holiday pgdojo_idx pgdojo_ref pgdojo_req php phpVarious phpguide plsql postgres ps r205 realC realwebapp regex rgaki ruby rule sboard sc scprint scquest sdb sdbquest seesaa setup sh_Imagick sh_canvas sh_dotnet sh_google sh_tool sh_web shadowbox shgm shjquery shvbs shweb sjscript skadai skywalker smalltech sperl sqlq src systemdoc tcpip tegaki three toolbox twitter typeface usb useXML vb vbdb vbsfunc vbsguide vbsrc vpc wcsignup webanymind webappgen webclass webparts webtool webwsh win8 winofsql wmi work wp youtube