replace関数について
皆様こんにちは。
困っていることがあるのですが、助けていただけますでしょうか。
断片化を確認するために、以下のSQLを作成しました。
OWNERとOBJECT_NAMEを標準入力するようにしています。
======================================================================
SELECT A.OWNER,A.OBJECT_TYPE,A.OBJECT_NAME,B.PARTITION_NAME,B.FILE_ID, B.BLOCK_ID, B.BLOCKS
FROM DBA_OBJECTS A, DBA_EXTENTS B
WHERE A.OWNER = B.OWNER AND
A.OBJECT_NAME = B.SEGMENT_NAME AND
NVL(A.SUBOBJECT_NAME,' ') = NVL(B.PARTITION_NAME,' ') AND
A.OBJECT_TYPE = B.SEGMENT_TYPE AND
A.OWNER = '&OWN' AND
A.OBJECT_NAME in (&OBJNM)
ORDER BY 1,2,3,4,5,6;
======================================================================
「&OBJNM」には複数オブジェクトが入るので、指定する際には、「'TEST1','TEST2'」など、カンマとシングルクォーテーションも
記載する必要があります。
ただ、面倒だなと思い、「TEST1 TEST2」のように、オブジェクト名+スペース+オブジェクト名のような記載方法に変更したいと思いました。
そして、以下のSQLを作成したのですが、実行してみると、「o rows selected」と返ってきます。(オブジェクトは存在しています。)
======================================================================
SELECT A.OWNER,A.OBJECT_TYPE,A.OBJECT_NAME,B.PARTITION_NAME,B.FILE_ID, B.BLOCK_ID, B.BLOCKS
FROM DBA_OBJECTS A, DBA_EXTENTS B
WHERE A.OWNER = B.OWNER AND
A.OBJECT_NAME = B.SEGMENT_NAME AND
NVL(A.SUBOBJECT_NAME,' ') = NVL(B.PARTITION_NAME,' ') AND
A.OBJECT_TYPE = B.SEGMENT_TYPE AND
A.OWNER = '&OWN' AND
A.OBJECT_NAME in (replace('&OBJNM',' ',''','''))
ORDER BY 1,2,3,4,5,6;
======================================================================
オブジェクトを1つのみ記載し実行すると正常に返ってくるのですが(実際には変換が実行されていない)、2つ以上記載すると返ってきません。
ただ、SELECTなどで確認すると、スペースは「','」にきちんと変換されていることが確認できます。
念の為、
owner in (''''||replace('TEST TEST001',' ',''',''')||'''')
なども試してみたのですが、ダメでした。
すみませんが、ご存知の方がいらっしゃいましたら、原因と対策を教えていただけますでしょうか。