日和見軽太郎商会のブログ -5ページ目

日和見軽太郎商会のブログ

今日はヒマだし天気もイイし、クルマでもちょすとしますか!

で、ソースをコーディングする。

#!/usr/bin/env python3
# import sys
import psycopg2
import psycopg2.extras
import datetime

print('START : ' + '{0:%Y/%m/%d %H:%M:%S.%f}'.format(datetime.datetime.now()))
try:
    con = psycopg2.connect(host = SV名, port = 5432, database = DB名, user = UID, password = P/W)
    
    try:
        cur = con.cursor(cursor_factory = psycopg2.extras.DictCursor)

        try:
            intRet = -1
            cur.execute("call pr_mst_item_entry_00 (2, 12345678, '上下セット', 'ジョウゲセット', 5000, 12000, 'WASHI', 'COMPUTER_NAME', 999, ARRAY[100,2000,30000], ARRAY['A','B','C'], -9)")
            row = cur.fetchone()

            for intValue in row['p_num']:
                print('{0:+09}'.format(intValue))

            for strValue in row['p_msg']:
                print(strValue)

            intRet = row['p_result']

            if intRet == 0:
                con.commit()
                print("OK : Commit")

            else:
                con.rollback()
                print("NG : Rollback")

        except (Exception, psycopg2.DatabaseError) as err:
            print(err)
            con.rollback()

        except Exception as err:
            print(err)
            con.rollback()

        finally:
            cur.close()

    except (Exception, psycopg2.DatabaseError) as err:
        print(err)

    except Exception as err:
        print(err)

    finally:
        con.close()
    
except (Exception, psycopg2.DatabaseError) as err:
    print(err)

except Exception as err:
    print(err)

finally:
    print('FINISH : ' + '{0:%Y/%m/%d %H:%M:%S.%f}'.format(datetime.datetime.now()))

 

ソースを保存して実行

$ python プログラムファイル名.py

先ずは、更新用のストアドプロシジャを作成

CREATE OR REPLACE PROCEDURE public.pr_mst_item_entry_00(
    IN p_sub numeric,
    IN p_item_code numeric,
    IN p_item_name text,
    IN p_item_kana text,
    IN p_pch_price numeric,
    IN p_sls_price numeric,
    IN p_user text,
    IN p_term text,
    IN p_supplier numeric,
    INOUT p_num numeric[],
    INOUT p_msg text[],
    INOUT p_result numeric)
LANGUAGE 'plpgsql'
AS $BODY$
declare
    cur            refcursor;
    rec            record;
    num_no        numeric                :=    0;
begin
    p_result :=    99;
    
    open    cur    for
        select    *
                from    mst_item
                where    item    =    p_item_code
    ;

    fetch    cur    into    rec;

    if    not    found    then
        num_no    :=    0;
    else
        if    rec.item    is    null    then
            num_no    :=    0;
        else
            num_no    :=    rec.item;
        end    if;
    end    if;

    close    cur;

    if    num_no    =    0    then

        --p_item_codeが存在しないので追加
        insert    into    mst_item    (
                        sub
                    ,    item
                    ,    name
                    ,    kana
                    ,    purchase_price
                    ,    sales_price
                    ,    ins_user
                    ,    ins_term
                    ,    supplier
                )
                values    (
                        p_sub
                    ,    p_item_code
                    ,    p_item_name
                    ,    p_item_kana
                    ,    p_pch_price
                    ,    p_sls_price
                    ,    p_user
                    ,    p_term
                    ,    p_supplier
                )
        ;
    else

        --p_item_codeが存在するので更新

        update    mst_item    set
                sub                =    p_sub
            ,    name            =    p_item_name
            ,    kana            =    p_item_kana
            ,    purchase_price    =    p_pch_price
            ,    sales_price        =    p_sls_price
            ,    supplier        =    p_supplier
            ,    upd_user        =    p_user
            ,    upd_term        =    p_term
            ,    upd_ymd            =    to_number(to_char(now(),'YYYYMMDD'),'FM09999999MI')
            ,    upd_hms            =    to_number(to_char(now(),'HH24MISSMS'),'FM099999999MI')
                where    item    =    p_item_code
        ;
    end    if;


    p_result :=    0;

end;
$BODY$;
ALTER PROCEDURE public.pr_mst_item_entry_00(numeric, numeric, text, text, numeric, numeric, text, text, numeric, numeric[], text[], numeric)
    OWNER TO postgres;

で、ソースをコーディングする。

#!/usr/bin/env python3
# import sys
import psycopg2
import psycopg2.extras
import datetime

print('START : ' + '{0:%Y/%m/%d %H:%M:%S.%f}'.format(datetime.datetime.now()))
try:
    con = psycopg2.connect(host = SV名, port = 5432, database = DB名, user = UID, password = P/W)

    try:
        cur = con.cursor(cursor_factory = psycopg2.extras.DictCursor)

        try:
            cur.execute('call pr_mst_item_select_00 (0, 99, 1, 9999, null, null, null, null)')
            row = cur.fetchone()

            for intValue in row['p_num']:
                print('{0:+09}'.format(intValue))

            for strValue in row['p_msg']:
                print(strValue)

            if row['p_result'] == 0:
                cur.execute(f'FETCH ALL IN "{row["p_cur"]}"')
                rows = cur.fetchall()
            else:
                rows = None

            if rows is None:
                print('No Data')
            else:
                for row in rows:
                    ret = '{0:04}'.format(row['item']) + ' : ' + row['name'] + ' : ' + row['kana']
                    print(ret)

            con.rollback()
            print('OK')

        except (Exception, psycopg2.DatabaseError) as err:
            print(err)
            con.rollback()

        except Exception as err:
            print(err)
            con.rollback()

        finally:
            cur.close()

    except (Exception, psycopg2.DatabaseError) as err:
        print(err)

    except Exception as err:
        print(err)

    finally:
        con.close()
    
except (Exception, psycopg2.DatabaseError) as err:
    print(err)

except Exception as err:
    print(err)

finally:
    print('FINISH : ' + '{0:%Y/%m/%d %H:%M:%S.%f}'.format(datetime.datetime.now()))

 

ソースを保存して実行

$ python プログラムファイル名.py