0

テーブル (2000 行をはるかに超える "Sensor") にほぼ 2000 行あり、センサー名という 1 つの列を更新する必要があります。

更新内の置換の一部は、別のテーブル deviceport の内容に基づいています。

Deviceport は、この deviceportid 列 (sensor.deviceportid = deviceportid) を通じて更新テーブルに関連付けられています。したがって、実際の更新は行ごとに異なります。2000 個の update ステートメントを作成する必要はありませんが、"where" ステートメントが何を意味するのかわかりません。

UPDATE sensor sn SET sn.sensorname = ( 
    SELECT REGEXP_REPLACE(
        sensorname, 
        '^P(\d)', 
        'J ' || (
                SELECT d.deviceportlabel 
                FROM deviceport d 
                WHERE d.deviceportid = s.deviceportid
                ) || 
       ' Breaker \1'
    )
    FROM sensor s 
    WHERE REGEXP_LIKE( sensorname, '^P(\d)') 
) 
WHERE ...?

手がかりはありますか?

4

2 に答える 2

1
UPDATE sensor sn 
SET sn.sensorname = 'J ' || 
   (
     SELECT d.deviceportlabel 
     FROM deviceport d 
     WHERE d.deviceportid = sn.deviceportid
   ) || ' Breaker ' || substr(sn.sensorname, 2, 1)
WHERE REGEXP_LIKE( sn.sensorname, '^P\d') 
于 2013-06-18T18:39:14.863 に答える
1

これを試して:-

UPDATE sensor sn, deviceport d 
SET sn.sensorname = REGEXP_REPLACE(
        sn.sensorname,'^P(\d)', 'J '|| d.deviceportlabel||' Breaker \1')
WHERE d.deviceportid = sn.deviceportid
AND REGEXP_LIKE( sn.sensorname, '^P(\d)');
于 2013-06-18T18:15:53.290 に答える