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(' Copyright (c) 1998 Toshikazu Fukuoka and PCDN All Rights Reserved.
'); HTP.P(' For questions or comments, please send mail to: pcdn@int21.co.jp
'); HTP.P('
'); HTP.P('
'); END Address; PROCEDURE Footer(rintFlg IN INTEGER) IS /* ||Procudure名 :Footer ||パラメタ  :rintFlg (IN) 1:検索フォームへの戻りLinkあり ||概要    :検索結果表示 */ BEGIN HTP.P('
'); HTP.P('
'); HTP.P('著作権表示ならびにお使いいただくための許諾条件
'); HTP.P('

'); HTP.P('

'); HTP.P(''); HTP.P('

'); HTP.P('

'); HTP.P('

'); IF rintFlg=1 THEN HTP.P('Oracle FAQ Search System
'); END IF; HTP.P('Oracle WorkGroup
'); HTP.P('int21 ホームページ |'); HTP.P('PCDN ホームページ'); HTP.P('
'); HTP.P('
'); HTP.P('
'); Address; END Footer; PROCEDURE Search IS /* ||Procudure名 :Search ||パラメタ  :なし ||概要    :検索フォーム表示 */ CURSOR curKey IS SELECT * FROM KeyMaster ORDER BY KeyNo; intCount INTEGER; BEGIN HTP.P(''); HTP.P(''); HTP.P('Oracle FAQ'); HTP.P(''); HTP.P(''); HTP.P('
'); HTP.P('

オラクルFAQ検索システム

'); HTP.P('

'); HTP.P('Updated 1998/04/09'); HTP.P('

'); HTP.P('

PCDN OracleWG Toshikazu Fukuoka 

'); HTP.P('
'); HTP.P('
現在、全件検索のみ稼働中

'); HTP.P('

'); HTP.FormOpen('PCDN_FAQ.List'); HTP.FormHidden('rastrKey','dummy');/* キー選択 */ HTP.P('

'); intCount := 0; HTP.P(''); HTP.P(''); FOR recKey IN curKey LOOP IF intCount=0 THEN HTP.P(''); END IF; HTP.P(''); IF intCount=2 THEN HTP.P(''); intCount := 0; ELSE intCount := intCount + 1; END IF; END LOOP; IF intCount>0 THEN HTP.P(''); END IF; HTP.P('
検索キー
'); HTP.FormCheckBox('rastrKey',recKey.KeyNo); HTP.P(recKey.Key); HTP.P('
'); /* キーワード */ 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('Oracle FAQ List'); HTP.P(''); HTP.P(''); HTP.P('

'); HTP.P('検索結果一覧'); HTP.P('

'); HTP.P('

PCDN OracleWG 

'); HTP.P('
'); 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('


'); /* SELECT文生成 */ IF rastrKey.count >= 2 THEN strSQL := ' SELECT DISTINCT FAQ.FAQID,FAQ.Title' || ' FROM FAQ,Key' || ' WHERE FAQ.FAQID = Key.FAQID'; strSQL := strSQL || ' AND (' || SUBSTR(strWhere,5) || ')'; IF rstrKeyword IS NOT NULL THEN strSQL := strSQL || ' AND FAQ.Question Like ''' || rstrKeyword || '%'''; END IF; ELSE strSQL := ' SELECT DISTINCT FAQ.FAQID,FAQ.Title' || ' FROM FAQ '; IF rstrKeyword IS NOT NULL THEN strSQL := strSQL || ' WHERE FAQ.Question Like ''' || rstrKeyword || '%'''; END IF; END IF; strSQL := strSQL || ' ORDER BY FAQID DESC'; /* SELECT文の表示 */ HTP.P(strSQL); 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('Oracle FAQ Result'); HTP.P(''); HTP.P(''); HTP.P('

検索結果

'); HTP.P('

PCDN OracleWG 

'); HTP.P('
'); 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('

Category : '); FOR recKey IN curKey LOOP HTP.P('
  • ' || recKey.Key); END LOOP; HTP.P('

  • '); HTP.P('

    '); OPEN curAnsCount; FETCH curAnsCount INTO recAnsCount; CLOSE curAnsCount; HTP.P('

    Answer'); IF recAnsCount.AnsCount>0 THEN FOR recAns IN curAns LOOP HTP.P('
    ' || TO_CHAR(recAns.AnswerDate,'YYYY/MM/DD')); HTP.P('
    '); HTP.P(recAns.Answer || '
    '); IF recAnsCount.AnsCount > 1 THEN HTP.P('

    '); HTP.P('


    '); ELSE recAnsCount.AnsCount := recAnsCount.AnsCount - 1; END IF; END LOOP; HTP.P('
    '); ELSE HTP.P('

    現在、回答作成中です。もう暫くお待ち下さい。


    '); END IF; HTP.P('

    '); HTP.P('
    '); HTP.P('

    '); HTP.P('


    '); HTP.P('

    '); HTP.P('

    '); HTP.P('
    '); HTP.P('Copyright (c)' || TO_CHAR(sysdate,'YYYY') || ' PC Developr Network All Rights Reserved.
    '); HTP.P('著作者に許可なくこのページのデータならびに対応するサンプルコードを再配布することを禁止します。
    '); HTP.P('

    '); HTP.P('

    '); HTP.P('

    '); HTP.P('Oracle FAQ Search System
    '); HTP.P('Oracle WorkGroup
    '); HTP.P('int21 ホームページ |'); HTP.P('PCDN ホームページ'); HTP.P('
    '); HTP.P('
    '); HTP.P('
    '); Address; HTP.P(''); HTP.P(''); END Result; END PCDN_FAQ;