CREATE OR REPLACE PACKAGE BODY www_user.PCDN_FAQ IS /* ||パッケージ名:PCDN_FAQ ||概要 :Oracle TIPS PL/SQL */ PROCEDURE Address IS BEGIN HTP.P('
'); HTP.P('
'); HTP.P('
'); HTP.P('
'); HTP.P('Updated 1998/04/09'); HTP.P('
PCDN OracleWG Toshikazu Fukuoka
'); HTP.P(''); HTP.FormOpen('PCDN_FAQ.List'); HTP.FormHidden('rastrKey','dummy');/* キー選択 */ HTP.P('
'); intCount := 0; HTP.P('
| 検索キー |
|---|
| '); HTP.FormCheckBox('rastrKey',recKey.KeyNo); HTP.P(recKey.Key); HTP.P(' | '); IF intCount=2 THEN HTP.P('
'); HTP.P('キーワード'); HTP.FormText('rstrKeyword'); HTP.P('
'); HTP.FormSubmit(null,'検索'); HTP.FormClose; Footer(0); HTP.P(''); HTP.P(''); EXCEPTION WHEN OTHERS THEN BEGIN HTP.P('PCDN_FAQ.Search (' || SQLCODE || ') ' || SQLERRM); END; END Search; PROCEDURE List(rastrKey IN achkKey,rstrKeyword IN VARCHAR2 DEFAULT '') IS /* ||Procudure名 :List ||パラメタ :rastrKey (IN) キー || :rstrKeyword (IN) キーワード ||概要 :検索結果表示 */ CURSOR curKey(strKey IN VARCHAR2) IS SELECT * FROM KeyMaster WHERE KeyNo=strKey; recKey curKey%ROWTYPE; intCount INTEGER; curSearch NUMBER; recFAQID CHAR(8); recTitle VARCHAR2(100); strSQL VARCHAR(2000); strWhere VARCHAR(2000); BEGIN HTP.P(''); HTP.P('
'); HTP.P('PCDN OracleWG
'); HTP.P('');
/* 検索キー表示 */
FOR intCount IN 2..rastrKey.count LOOP
OPEN curKey(rastrKey(intCount));
FETCH curKey INTO recKey;
IF curKey%FOUND THEN
HTP.P(recKey.Key || ' ');
ELSE
HTP.P('''' || rastrKey(intCount) || ''' ');
END IF;
CLOSE curKey;
strWhere := strWhere || ' OR KeyNo = ''' || rastrKey(intCount) || '''';
END LOOP;
HTP.P('
');
HTP.P('
');
/* 問い合わせ用のカーソルをオープンする */
curSearch := DBMS_SQL.OPEN_CURSOR;
/* SELECT SQLを解析 */
DBMS_SQL.PARSE(curSearch,strSQL,DBMS_SQL.V7);
/* 出力変数を定義 */
DBMS_SQL.DEFINE_COLUMN(curSearch,1,recFAQID,8);
DBMS_SQL.DEFINE_COLUMN(curSearch,2,recTitle,100);
/* SELECT SQL実行 */
intCount := DBMS_SQL.EXECUTE(curSearch);
LOOP
IF DBMS_SQL.FETCH_ROWS(curSearch) = 0 THEN
EXIT;
END IF;
/* 値を取り出す */
DBMS_SQL.COLUMN_VALUE(curSearch,1,recFAQID);
DBMS_SQL.COLUMN_VALUE(curSearch,2,recTitle);
/* HTML生成 */
HTP.P(recFAQID);
HTP.P('' || recTitle || '
');
END LOOP;
DBMS_SQL.CLOSE_CURSOR(curSearch);
HTP.P('
'); Footer(1); HTP.P(''); HTP.P(''); EXCEPTION WHEN OTHERS THEN BEGIN HTP.P('PCDN_FAQ.List (' || SQLCODE || ') ' || SQLERRM); END; DBMS_SQL.CLOSE_CURSOR(curSearch); END List; PROCEDURE Result(rstrFAQ IN CHAR) IS /* ||Procudure名 :Result ||パラメタ :rstrKey (IN) 検索キー ||概要 :検索結果表示 */ CURSOR curFAQ IS SELECT * FROM FAQ WHERE FAQID=rstrFAQ; CURSOR curKey IS SELECT * FROM KeyMaster WHERE KeyNo IN (SELECT KeyNo FROM Key WHERE FAQID=rstrFAQ); CURSOR curAns IS SELECT * FROM AnswerMaster WHERE ANO IN (SELECT ANO FROM Answer WHERE FAQID=rstrFAQ) ORDER BY AnswerDate DESC; CURSOR curAnsCount IS SELECT COUNT(*) AS AnsCount FROM Answer WHERE FAQID=rstrFAQ; recAnsCount curAnsCount%ROWTYPE; BEGIN HTP.P(''); HTP.P('
'); HTP.P('PCDN OracleWG
'); HTP.P(''); HTP.P('ID : ' || rstrFAQ || '
');
HTP.P('Question : ');
FOR recFAQ IN curFAQ LOOP
HTP.P(recFAQ.Title || '
');
IF recFAQ.Title <> recFAQ.Question THEN
HTP.P(recFAQ.Question || '
');
END IF;
END LOOP;
HTP.P('
'); HTP.P('
'); OPEN curAnsCount; FETCH curAnsCount INTO recAnsCount; CLOSE curAnsCount; HTP.P('
'); HTP.P('
');
HTP.P('
');
HTP.P('
'); HTP.P('
'); HTP.P('
'); HTP.P('