トップページに戻る    次のmodel句のサンプルへ    前のmodel句のサンプルへ

model句11 work変数を用意して正規表現

SQLパズル

StrReverseテーブル
str
-----------------
/123/
/123/456/
/123/456/789/
/123/456/789/abc/

/を区切りとして、strを反転させる。

出力結果
str                newStr
-----------------  ------------------
/123/              /123/
/123/456/          /456/123/
/123/456/789/      /789/456/123/
/123/456/789/abc/  /abc/789/456/123/


データ作成スクリプト

create table StrReverse(str) as
select '/123/'             from dual union
select '/123/456/'         from dual union
select '/123/456/789/'     from dual union
select '/123/456/789/abc/' from dual;


SQL

col str    for a20
col newStr for a20

select str,newStr
  from StrReverse
 model
 dimension by (RowNum as soeji)
 measures(str,str as work,cast('/' as varchar2(200)) as newStr)
 rules iterate (100)
 (newStr[any] = newStr[CV()] || RegExp_Substr(work[CV()],'[^/]+/$'),
  work[any]   =                RegExp_Replace(work[CV()],'[^/]+/$'));


解説

モデリングのSQLより引用
>デフォルトでは、ルールはMODEL句内での出現順に評価されます。
>MODEL句でオプションのキーワードSEQUENTIAL ORDERを指定すると、
>評価順序を明示できます。

デフォルトがsequential orderなので省略してOKなようです。
いいかえれば、省略しておけば、上から順番にruleを実行してくれるということです。