0

dbms_output パッケージを使用しているときに問題が発生しました。次のコードを実行すると、整数が 0と表示されます

declare
v integer;
asq dbms_output.chararr;
begin
dbms_output.put('hi');
dbms_output.put_line('hello!');
asq(1):='sun';
asq(2):='ant';
dbms_output.put_line(asq(1));
dbms_output.put_line(asq(2));
dbms_output.get_lines(asq,v);
dbms_output.put_line('integer is '||v);
end;

しかし、次のコードを実行すると、整数が3になります

declare
v integer:=5;
asq dbms_output.chararr;
begin
dbms_output.put('hi');
dbms_output.put_line('hello!');
asq(1):='sun';
asq(2):='ant';
dbms_output.put_line(asq(1));
dbms_output.put_line(asq(2));
dbms_output.get_lines(asq,v);
dbms_output.put_line('integer is '||v);
end;

2つの手順にバリエーションがある理由を教えてください。

4

1 に答える 1

1

ドキュメントに従って、GET_LINES プロシージャの 2 番目のパラメータは IN OUT パラメータです。プロシージャに、バッファから取得する行数を伝えます。プロシージャー呼び出しの後、実際に取得された行数が保持されます。

最初の例では、v の値は null です。したがって、行は取得されず、v には値 0 が割り当てられます。

2 番目の例では、v が 5 の場合の値です。したがって、5 行を要求していますが、3 行 (hihello!、sun、ant) しかないため、3 行が配列 asq に入れられ、v に 3 が割り当てられます。

于 2014-09-07T13:53:33.440 に答える