4文字以下の長い文字列(たとえば、????
、??01
'、0??1
など)を格納する列があります。 0??1
のような各文字列に対して、0001から0991の値を別のテーブルに挿入する必要があります。文字列??01
の場合、値は0001〜9901になります。文字列????
の値は0000〜9999のようになります。文字列関数を使用してPL/SQLでワイルドカードを使用して文字列を拡張するには
PL/SQLと文字列関数を使用してこれをどのように達成できますか?
EDIT
現在のコードは次のとおりです。
declare
v_rule varchar2(50) := '????52132';
v_cc varchar2(50);
v_nat varchar2(50);
v_wild number;
n number;
begin
v_cc := substr(v_rule,1,4);
v_nat := substr(v_rule,5);
dbms_output.put_line (v_cc || ' '|| v_nat);
if instr(v_cc, '????') <> 0 then
v_wild := 4;
end if;
n := power(10,v_wild);
for i in 0 .. n - 1 loop
dbms_output.put_line(substr(lpad(to_char(i),v_wild,'0'),0,4));
end loop;
end;
/
恐ろしい!それは私の問題に完全に合った。返信ありがとうございました。そうしないと、instringとsubstringを扱うのに苦労したでしょう:) – Arcs
もう一つ質問したいことがあります。 'some_table'には1000万レコードあります。各レコードが拡張されると仮定すると、私はsome_other_tableに挿入する膨大な数のレコードを持つでしょう。私はそのようなプログラムのパフォーマンスが心配です。これを処理する効率的な方法はありますか? – Arcs
@Arcs:このアプローチのパフォーマンスが懸念される場合は、1000個のレコードでテストし、10000または100000レコード、またはそれ以上でテストしてください。私はこの機能について何らかの性能テストを行っていないので、パフォーマンスがどれくらいうまくいくかはわかりません。 'some_table'に1,000万行があり、それぞれが100行を生成できる場合は、10億行があります。どのように挿入するにしても、10億行を挿入するのに常に時間がかかります。 –