0

以下の PL/SQL プロシージャのコードはバイト サイズをチェックし、30000 バイトを超える場合はデータを繰り返し、 30000 バイト (30 kb) ごとにメールの添付ファイル (複数のメールで txt ファイル) を送信します。Oracle PL/SQL で 4 MB のサイズのファイル全体を 1 つのメールで取得する
必要があります。

lv_message_tab のデータ型は varchar2(32767) です。* Varchar2(32767)の代わりにCLOBデータ型を使用できますか? * はいの場合、方法を提案してください。

何百万も前もって感謝します!!!

FOR lv_idx in 1..pv_message.COUNT
      LOOP
         lv_message := lv_message||pv_message(lv_idx)|| lv_cr;

         IF LENGTH(lv_message) >= 30000
         THEN

          lv_message_tab.EXTEND;
          lv_message_tab(lv_message_tab.LAST) := lv_message;
          lv_message := null;

         END IF;

      END LOOP;
--This send the attachment for 30000 characters and above
      IF lv_message_tab.COUNT > 0 
      THEN

           FOR lv_idx in 1..lv_message_tab.COUNT
           LOOP

              UTL_SMTP.HELO(lv_conn, lv_smtp_host);
              UTL_SMTP.MAIL(lv_conn, gc_sender);
              UTL_SMTP.RCPT(lv_conn, lv_to_email_ids);
              UTL_SMTP.RCPT(lv_conn, lv_cc_email_ids);

               UTL_SMTP.DATA(lv_conn,
              'Date: '   || TO_CHAR(SYSDATE, gc_dd_month_yyyy_format) || lv_cr ||
              'From: '   || gc_sender || lv_cr ||
              'Subject: '|| lv_subject || lv_cr ||
              'To: '     || lv_to_email_ids || lv_cr ||
              'CC: '     || lv_cc_email_ids || lv_cr ||

              'MIME-Version: 1.0'|| lv_cr ||    -- Use MIME mail standard
              'Content-Type: multipart/mixed;'|| lv_cr ||
              ' boundary="-----SECBOUND"'|| lv_cr ||
                lv_cr ||

              '-------SECBOUND'|| lv_cr ||
              'Content-Type: text/plain;'|| lv_cr ||
              ' name="excel.csv"'|| lv_cr ||
              'Content-Transfer_Encoding: 8bit'|| lv_cr ||
              'Content-Disposition: attachment;'|| lv_cr ||
              ' filename="'||pv_file_name||'"'|| lv_cr ||
              lv_cr ||lv_message_tab(lv_idx)
              || lv_cr ||   -- Content of attachment
              lv_cr ||

               '-------SECBOUND--' );   

          END LOOP;

      END IF;

      --This send the attachment for the rest of the data...for the last few iterations
      IF lv_message IS NOT NULL
      THEN



          UTL_SMTP.HELO(lv_conn, lv_smtp_host);
          UTL_SMTP.MAIL(lv_conn, gc_sender);
          UTL_SMTP.RCPT(lv_conn, lv_to_email_ids);
          UTL_SMTP.RCPT(lv_conn, lv_cc_email_ids);

           UTL_SMTP.DATA(lv_conn,
          'Date: '   || TO_CHAR(SYSDATE, gc_dd_month_yyyy_format) || lv_cr ||
          'From: '   || gc_sender || lv_cr ||
          'Subject: '|| lv_subject || lv_cr ||
          'To: '     || lv_to_email_ids || lv_cr ||
          'CC: '     || lv_cc_email_ids || lv_cr ||

          'MIME-Version: 1.0'|| lv_cr ||    -- Use MIME mail standard
          'Content-Type: multipart/mixed;'|| lv_cr ||
          ' boundary="-----SECBOUND"'|| lv_cr ||
            lv_cr ||

          '-------SECBOUND'|| lv_cr ||
          'Content-Type: text/plain;'|| lv_cr ||
          ' name="excel.csv"'|| lv_cr ||
          'Content-Transfer_Encoding: 8bit'|| lv_cr ||
          'Content-Disposition: attachment;'|| lv_cr ||
          ' filename="'||pv_file_name||'"'|| lv_cr ||
          lv_cr ||lv_message
          || lv_cr ||   -- Content of attachment
          lv_cr ||

           '-------SECBOUND--' );   


     END IF;


     UTL_SMTP.QUIT(lv_conn);


    pv_rtn := TRUE;

ELSE

    pv_rtn := FALSE;

END IF;

コレクションテーブルとして入力を与えることでプロシージャを呼び出しています

手順

SP1_Send_letter_ATTACH_WAL(pv_job_id IN job.job_id%TYPE,
                           pv_status IN job_transaction_details.status_id%TYPE,
                           pv_subject IN VARCHAR2,
                           pv_message IN stringtable,
                           pv_file_name IN VARCHAR2,
                           pv_date_time IN DATE DEFAULT SYSDATE,
                           pv_rtn OUT BOOLEAN); 

変数のデータをclob データ型pv_messageの変数に格納したいだけです。lv_message

lv_message CLOB;

lv_message := pv_message (つまり、コレクション データ型から CLOB 型へ) の格納方法。「to_clob()」関数を使用して型キャストしようとしましlv_message = to_clob(pv_message)たが、うまくいきませんでした。

4

1 に答える 1