0

SQLスクリプトからlstファイルを作成したい

これが私のコードです:

BEGIN
DECLARE
loc_bia_foracid GAM.foracid%TYPE;
loc_fba_foracid GAM.foracid%TYPE;
out_spool VARCHAR2(32000);
BEGIN
loc_bia_foracid:= '&loc_bia_foracid';
loc_fba_foracid:= '&loc_fba_foracid';

out_spool := out_spool || '|' || loc_bia_foracid;
out_spool := out_spool || '|' || loc_fba_foracid;


END;

文字数を指定しないとout_spool、エラーが発生します。そして、lst ファイルを 32k 文字以上にしたいのです。また、ストアド プロシージャで定義する方法を知る必要があります。

4

2 に答える 2

1

それは私が推測するこのようなものだろう

declare
loc_bia_foracid varchar2(32767);
loc_fba_foracid varchar2(32767);
out_spool clob;
begin
   loc_bia_foracid := '&loc_bia_foracid';
   loc_fba_foracid := '&loc_fba_foracid';

   out_spool := out_spool || '|' || loc_bia_foracid;
   out_spool := out_spool || '|' || loc_fba_foracid;
end;

匿名ブロックで使用する場合、& 記号が原因で out_spool が空白になる可能性があるため、'&'||loc_bia... などの loc_ 変数の前にそれらを連結する必要があります。

于 2013-03-11T11:29:08.217 に答える
0

上記がストアド プロシージャとしてどのように見えるかを次に示します。

CREATE OR REPLACE FUNCTION make_lst(
  pis_bia_foracid IN GAM.foracid%TYPE,
  pis_fba_foracid IN GAM.foracid%TYPE)
RETURN VARCHAR2 AS
BEGIN
  RETURN '|' || pis_bia_foracid || '|' || pis_fba_foracid;
END make_lst;

(まだコンパイルしていないので、最初はうまくいかないかもしれません)

32k を超える文字列に対する私の提案は、CLOB (文字ラージ オブジェクト) を使用することです。CLOB (Oracle のバージョンによって異なります) は、最大 4GB のテキストを保持します。私は Oracle 9i を使用しており、9i では DBMS_LOB パッケージを使用して CLOB を初期化し、書き込み用に開き、書き込み、閉じます。

スタイルに関するいくつかのコメント:

  • END タグでのメソッド名の使用に注意してください。ネストされた BEGIN-END ブロックを追跡するのに役立ちます。
  • 変数の命名規則に注意してください: pis=parameter, in, string 一方、ls=local, string
  • ロギングと単体テストを追加することをお勧めします。
  • 最終的に探しているものを実現するには、いくつかの関連メソッドが必要になると思われるため、メソッドをパッケージに追加することをお勧めします。
于 2008-12-22T17:45:02.527 に答える