where句でREGEXP_LIKE関数を使用するSQLがありますが、Oracle8iで実行されるその関数と同等のものが必要です。
正規表現は次のようになります。
where REGEXP_LIKE(parm, '^[PMF][[:digit:]]+[_].*')
前もって感謝します。
あなたは試すことができます
WHERE SUBSTR(parm,1,1) IN ('P','M','F')
AND substr(parm,2,1) between '0' and '9'
AND substr(ltrim(substr(parm,2),'0123456789'),1,1) = '_'
最初の文字はP、M、またはFです。2番目の文字は数字です。2番目以降の文字は、左からすべての数字を取り除き、アンダースコアで始まる必要があります。
PS。8iデータベースを撮影してください。8iはサポートされていないだけでなく、9iと10gもサポートされていません(または、少なくとも「劣化しているため、使用を中止してください」レベルのサポートです)。
ぐるぐる回ってみると、8iまで利用可能だったOWA_PATTERNというパッケージがあるようです。かなりの正規表現サポートを提供しました。これは明らかにPL/SQLWebToolkitのインストールの一部でした。8iインストールで使用できる場合とできない場合があります。データベースについてはDBAに確認してください。
これは、それを参照する9iドキュメントです。
残念ながら、REGEXP_LIKEの前は、物事はかなり厳しいものでした。降り注ぐ雨の中、両方向とも手作業でこれをしなければなりませんでした。このようなものがおそらく必要です:
WHERE SUBSTR(parm,1,1) IN ('P','M','F')
AND digits_followed_by_underscore(SUBSTR(parm,2)) = 'Y'
次の手順を使用します(警告:急いで一緒にハッキングされ、テストされていません):
CREATE PROCEDURE digits_followed_by_underscore(v IN VARCHAR2)
RETURN VARCHAR2 IS
digit_found VARCHAR2(1) := 'N';
BEGIN
IF LENGTH(v) = 0 THEN
RETURN 'N';
END IF;
FOR i IN 1..LENGTH(v) LOOP
IF SUBSTR(v,i,1) BETWEEN '0' AND '9' THEN
digit_found := 'Y';
ELSIF SUBSTR(v,i,1) = '_' THEN
RETURN digit_found;
ELSE
RETURN 'N';
END IF;
END LOOP;
RETURN 'N';
END;