カンマ区切り文字列を使用して、各値を新しい行としてテーブルに挿入しようとしています。私は以下の例をLalit Kumar Bから取り上げ、データを変更して自分のデータがどのように見えるかを見てきました。カンマで区切られたリストがカンタ区切りで無効です。
DECLARE
L_INPUT VARCHAR2(4000) := '522,33-23,125,658,25,12-500';
L_COUNT BINARY_INTEGER;
L_ARRAY DBMS_UTILITY.LNAME_ARRAY;
BEGIN
DBMS_UTILITY.COMMA_TO_TABLE(LIST => REGEXP_REPLACE(L_INPUT, '(^|,)', '\1x'), TABLEN => L_COUNT, TAB => L_ARRAY);
DBMS_OUTPUT.PUT_LINE(L_COUNT);
FOR I IN 1 .. L_COUNT
LOOP
DBMS_OUTPUT.PUT_LINE('Element ' || TO_CHAR(I) || ' of array contains: ' || SUBSTR(L_ARRAY(I), 2));
INSERT INTO TEST22 VALUES
(SUBSTR(L_ARRAY(I), 2)
);
COMMIT;
END LOOP;
END;
私は、次のOracleエラー受けています:私は、フォームのデータを処理するために何ができるの33から23
の近くに「33から23」をカンマで区切ったリスト無効:ORA-20001の?私が「 - 」を自分のデータから取り除くならば、上記は望みどおりに実行されます。これは理想的ではありません。私のデータの中には「 - 」があり、それを削除することはできません。
「dbms_utility.comma_to_table」プロシージャは何と思いますか?これはデータベース識別子( 'schema.table.column @ link'とそのバリエーションの形式)で動作することを意図しています。さて、カンマで区切った文字列を分割するだけで悪用するかもしれませんが、期待通りの結果は得られません。識別子にダッシュは許可されません。いずれにせよ、必要なものがカンマで区切られた文字列を分割することです。方法はありますが、 'comma_to_table'プロシージャはそれらの1つではありません。 – mathguy
アンダースコアに置き換えてください –
Wait ... Lalitは文字列を分割する方法としてこれを示していますか?それとも何か他の人に使っているのですか?彼が文字列を分割して表示している場合は、リンクを提供してください。有効なメソッドのリストからこのメソッドを削除する必要があります。 – mathguy