2017-06-21 12 views
-2
DECLARE 
    v_letter_c0 VARCHAR2(500) := 'c0'; 
    v_new_letter; 
BEGIN 

FOR my_number IN 1..70 
    LOOP 
FOR i IN (Select * From test_table) 
    LOOP 

    IF(my_number<=9) THEN 
      v_new_letter := v_letter_c0 || my_number; 

      UPDATE test_table y 
      SET y.v_new_letter = replace(i.v_new_letter, ' ', '') 
      WHERE y.v_new_letter = i.v_new_letter; 

      END IF; 

END LOOP; 
END LOOP; 

END; 

v_new_letterでTEXTを変換するにはどうすればよいですか。私はy.v_new_letterに読んでほしいからです。PL/SQL VARCHAR2を行に変換する

申し訳ありません申し訳ありませんが、私はより正確に言う方法はありません。 しかし、私は言いたい、どのように更新を行うには?

+1

をより良いあなたが何をする必要があるかを説明してみてください。必要な結果が蓄積されたサンプルデータと目的の結果(フォーマットされたテキスト)が役立ちます。ここであなたは[質問]に何かを見つけ、あなたの質問を改善するのに役立つ[mcve]をどのように構築するのですか? – Aleksej

答えて

0

あなたの目標から達成しようとしているものは非常に不明ですが、v_new_letterのスペースを置き換えようとしているようです。

あなたはカーソルとすべてのループを必要としないが、単一のSQL文でそれを行うことができます。

UPDATE test_table 
SET v_new_letter = replace(v_new_letter, ' ', ''); 

あなたはc09を通じて文字列c01と一致するように、何かをしようとしているように見える - しかし、これはありますあなたの質問には使用されません。たぶん、このような何か:

UPDATE test_table 
SET v_new_letter = replace(v_new_letter, ' ', '') 
WHERE REGEXP_LIKE(v_new_letter, '^c0[1-9]$'); 

それともc70からc01用:WHERE句は、それが交換するスペースを持っていることはありません一致する場合

UPDATE test_table 
SET v_new_letter = replace(v_new_letter, ' ', '') 
WHERE REGEXP_LIKE(v_new_letter, '^c(0[1-9]|[1-6]\d|70)$'); 

はしかし、あなたが達成したいものは不明です。

更新:あなたのコメントに基づいて

、あなたは、動的SQLを使用したい:

DECLARE 
    sql VARCHAR2(4000); 
BEGIN 
    FOR my_number IN 1..70 LOOP 
    sql := 'UPDATE test_table' 
      || ' SET c' || TO_CHAR(i, 'FM00') 
      || ' = replace(c' || TO_CHAR(i, 'FM00') || ', '' '')'; 
    EXECUTE IMMEDIATE sql; 
    END LOOP; 
END; 
/
+0

テーブルの中の私には、c01、c02などと呼ばれる列があります。 「I」と呼ばれる。そしてドットの後では、列c01、c02などに行きます。しかし、問題は "I"の後です。私はどのようにc01、c02などを挿入して読み込み可能かわからない –

+0

@Yeras_QazaQ – MT0

+0

はい、そうです。どうもありがとうございました!!! –

関連する問題