0
0

Oracle plsql ,PDFがアップデートされたかチェック 02

Posted at

■環境

・PHP7.4
・Linux(RedHat 8.6)
・Smarty2.4.6
・oracle12
・PLSQL

■完成イメージ

1:アップロード
スクリーンショット (904).png
2:アップロード後
スクリーンショット (908).png

■機能説明

機能

・PHPから plsqlのプロシージャを呼び。
・プロシージャで、一時テーブル(テンポラリーテーブル)へPDFのアップロード情報を格納。
・PHPでプロシージャの一時テーブルの情報をSELECTして、配列へ格納。
・.tplで配列とのチェックを行う。

■ソース(plsql プロシージャ部分)

create or replace PROCEDURE PDF_CHECK_SELECT (
    p_SID IN VARCHAR2, --セッションID
    p_GYOCD IN NUMBER, --業者コード
   --- P_UKENEND IN NUMBER, -- 受付年度
   --- P_UKEDATE IN NUMBER, -- 受付番号
    p_RSLT OUT NUMBER, --ステータス(0:正常終了 99:エラー)
    p_SQLCODE OUT NUMBER, --エラーコード
    p_SQLERRM OUT VARCHAR2 --エラーメッセージ
)
 /*******************************************************************************
* 関数名 : PDF_UPCHECK
* 作成者 : 夏目智徹
* 作成日 : 2023/11/10
* 概要   : Web予約 PDF_UPロードチェック用プロシージャ


*******************************************************************************/
 /*======================================
  変数宣言
======================================*/

 IS
    
        v_GYOUSYA_CD PDF_UPDETA.業者コード%TYPE; --- 業者コード
        v_GYOUSA_MEI  PDF_UPDETA.業者名%TYPE;    --- 業者名
        v_UKETUKE_NENDO PDF_UPDETA.受付年度%TYPE;  --- 受付年度
        v_UKETUKE_NUM PDF_UPDETA.受付番号%TYPE;    --- 受付番号
        v_YOYAKU_DATE PDF_UPDETA.予約日付%TYPE;    --- 予約日付
        v_SIBOUSHA_SEI PDF_UPDETA.死亡者姓%TYPE;   --- 死亡者姓
        v_SIBOUSHA_MEI PDF_UPDETA.死亡者名%TYPE;    --- 死亡者名
 

CURSOR c_WK1 IS 
    SELECT 業者コード, 業者名, 受付年度, 受付番号, 予約日付, 死亡者姓, 死亡者名
        FROM (
            SELECT 業者コード, 業者名, 受付年度, 受付番号, 予約日付, 死亡者姓, 死亡者名,
            ROWNUM AS rnum
            FROM PDF_UPDETA
            WHERE 業者コード = p_GYOCD
        AND 予約日付 BETWEEN 
            (SELECT MIN(予約日付) FROM PDF_UPDETA WHERE 業者コード = p_GYOCD)
        AND 
            (SELECT MAX(予約日付) FROM PDF_UPDETA WHERE 業者コード = p_GYOCD)
)
WHERE rnum <= 100;

--- WHERE rnum <= 100; LIMIT 100; の役割

--- レコードの宣言
r_WK1 c_WK1%ROWTYPE;
/*======================================
  本体
======================================*/
BEGIN 
--- 初期処理
p_RSLT := 0;
p_SQLCODE := 0;
p_SQLERRM := NULL;

v_GYOUSYA_CD := 0; --- 業者コード
v_GYOUSA_MEI := NULL;    --- 業者名
v_UKETUKE_NENDO := 0;  --- 受付年度
v_UKETUKE_NUM := 0;    --- 受付番号
v_YOYAKU_DATE := NULL;    --- 予約日付
v_SIBOUSHA_SEI := NULL;   --- 死亡者姓
v_SIBOUSHA_MEI := NULL;    --- 死亡者名


 --- テンプテーブル クリア
    DELETE FROM TMP_PDF_UPDETA
        WHERE SID = p_SID;

 --- 業者コードが NULLじゃなかった場合

        FOR r_WK1 IN c_WK1 LOOP
            
            IF r_WK1.業者コード IS NOT NULL THEN
                v_GYOUSYA_CD := r_WK1.業者コード; --- 業者コード
            END IF;
            
            IF r_WK1.業者名 IS NOT NULL THEN
                v_GYOUSA_MEI := r_WK1.業者名;    --- 業者名
            END IF;
            
            IF r_WK1.受付年度 IS NOT NULL THEN
                v_UKETUKE_NENDO := r_WK1.受付年度;  --- 受付年度
            END IF;
            
            IF r_WK1.受付番号 IS NOT NULL THEN
                v_UKETUKE_NUM := r_WK1.受付番号;    --- 受付番号
            END IF;
            
            IF r_WK1.死亡者姓 IS NOT NULL THEN
                v_SIBOUSHA_SEI := r_WK1.死亡者姓;   --- 死亡者姓
            END IF;
            
            IF r_WK1.死亡者名 IS NOT NULL THEN
                v_SIBOUSHA_MEI := r_WK1.死亡者名;    --- 死亡者名
            END IF;
        
            INSERT INTO TMP_PDF_UPDETA(
                SID,            --- セッションID
                GYOUSYA_CD,     --- 業者コード
                GYOUSA_MEI,     --- 業者名
                UKETUKE_NENDO,  --- 受付年度
                UKETUKE_NUM,    --- 受付番号
                YOYAKU_DATE,    --- 予約日付
                SIBOUSHA_SEI,   --- 死亡者姓
                SIBOUSHA_MEI    --- 死亡者名
            ) VALUES (
                p_SID,
                v_GYOUSYA_CD, --- 業者コード
                v_GYOUSA_MEI,    --- 業者名
                v_UKETUKE_NENDO,  --- 受付年度
                v_UKETUKE_NUM,    --- 受付番号
                v_YOYAKU_DATE,    --- 予約日付
                v_SIBOUSHA_SEI,   --- 死亡者姓
                v_SIBOUSHA_MEI   --- 死亡者名
            );
            END LOOP;

/*======================================
 例外処理
======================================*/
EXCEPTION
WHEN OTHERS THEN

p_RSLT := 99;
p_SQLCODE := SQLCODE;
p_SQLERRM := SQLERRM;

END;
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0