1

'0'またはいくつかの連続するゼロを見逃したレコードで更新されることがあるテーブルがあります。レコードの長さは、小数点を超えて8桁にする必要があります(合計10文字)。

たとえば、元々1.12345600のように見えたレコードは、最終的に1.123456のようになります。

すべてのレコードの長さをチェックし、10文字より短い各レコードに「0」を追加するスクリプトを作成しました。

問題は、「0」を1回だけ追加することです。上記の例は、1.12345600ではなく1.1234560のようになります。これはスクリプトです:

DECLARE

       CURSOR dif IS
            SELECT CUST_CODE, CUST_ID, CONTRACT_NUM, MSISDN 
            FROM project1;


BEGIN

        FOR a in dif LOOP

            IF LENGTH (a.CUST_CODE)<10
            THEN
            UPDATE project1
            SET CUST_CODE=a.CUST_CODE||'0'      
            WHERE CUST_CODE=a.CUST_CODE;
            END IF;
        END LOOP;
        commit;

END;

実行が終了すると、単一の「0」が追加されます。スクリプトを再度実行すると、まだ10文字より短いレコードに別の「0」が追加されます。7文字のReocrdは、3回実行する必要があります。

すべてが必要な長さに達するまでレコードをチェックし続けるために、どこかに別のループがあるはずだと思います。何か案が?

4

5 に答える 5

3

もし私があなたなら、私は一言でそれをします。

UPDATE project1 SET CUST_CODE=rpad(CUST_CODE, 10, '0');
于 2012-12-04T13:01:16.140 に答える
3

rpad関数を使用できます:http ://www.techonthenet.com/oracle/functions/rpad.php (リンクの3番目の例は必要なものです)。

 SET CUST_CODE=rpad(a.CUST_CODE, 10, '0')
于 2012-12-04T12:23:12.757 に答える
0

上記のSQLで実装するのが最善の方法ですが、PLSQLを介して実装する場合は、ロジックを修正する必要があります。カーソルで再調整されたレコード数のループを実行してから、各レコードに単一のゼロ、つまり「0」を追加します。これは、コードで記述したものとまったく同じです。

長さ10にしたい場合は、以下のように実装します。

             IF LENGTH (a.CUST_CODE)<10
        THEN
        v_len = 10-length (a.cust_code-- declare a variable
        for 
        i in 1..v_len
        loop
        v_pad=v_pad||'0';
        end loop;
        UPDATE project1
        SET CUST_CODE=a.CUST_CODE|| v_pad      
        WHERE CUST_CODE=a.CUST_CODE;
        END IF;

これがPLSQLでの実装に役立つことを願っています

于 2013-07-26T10:05:34.290 に答える
0

rpadを使用して問題を解決できます!以下のリファレンスドキュメントに従ってください。 http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions140.htm

于 2013-10-23T17:21:04.880 に答える
0
DECLARE

       CURSOR dif IS
            SELECT CUST_CODE, CUST_ID, CONTRACT_NUM, MSISDN 
            FROM project1;
v_temp number;

BEGIN

        FOR a in dif LOOP
v_temp := 10-LENGTH (a.CUST_CODE)
            IF LENGTH (a.CUST_CODE)<10
            THEN
            UPDATE project1
            SET CUST_CODE=RPAD(a.CUST_CODE,v_temp,'0') ;
            WHERE CUST_CODE=a.CUST_CODE;
            END IF;
        END LOOP;
        commit;

END;

上記のクエリを使用できます

于 2014-01-19T14:00:20.677 に答える