■環境
・PHP7.4
・Linux(RedHat 8.6)
・Smarty2.4.6
・oracle12
・PLSQL
■完成イメージ
■機能説明
機能
・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;