私が使用しているデータベース内のデータの構造には多くの要望が残されていることに気づきましたが、それを制御することはできませんので、ご容赦ください。
私が持っているのはADDRESSES.COMPANY
、整数IDである場合とそうでない場合があるフィールドです。時々それは文字列です。ただし、整数の場合は、別のテーブルに結合したいと思いますCOMPANIES
。元のクエリ(事前参加)は次のようになります。
SELECT *
FROM (SELECT ROWNUM AS ROW_NUM, INNERQUERY.*
FROM ( SELECT *
FROM ADDRESSES, COMPANIES
) INNERQUERY) OUTERQUERY
WHERE ROW_NUM <= 50 AND ROW_NUM > 0
正常に参加しようとすると、エラーが発生しますORA-01722: invalid number
...明らかな理由で(参加を試みるのは必ずしも数字ではないか、少なくともそれが真実であるため、それが意味するはずだと思います!)。参加しようとした後の私の質問:
SELECT *
FROM (SELECT ROWNUM AS ROW_NUM, INNERQUERY.*
FROM ( SELECT *
FROM ADDRESSES, COMPANIES
WHERE ADDRESSES.COMPANY(+) = COMPANIES.ID
) INNERQUERY) OUTERQUERY
WHERE ROW_NUM <= 50 AND ROW_NUM > 0
私が思いつくことができる唯一の2つの解決策は、両方ともTO_NUMBER()
関数を使用することです。これは、数値以外の文字列を0と評価すると想定しました。
SELECT *
FROM (SELECT ROWNUM AS ROW_NUM, INNERQUERY.*
FROM ( SELECT *
FROM ADDRESSES, COMPANIES
WHERE TO_NUMBER(ADDRESSES.COMPANY)(+) = COMPANIES.ID
) INNERQUERY) OUTERQUERY
WHERE ROW_NUM <= 50 AND ROW_NUM > 0
ORA-00936: missing expression
(7行目)でエラーが発生します。私はそれを使用する適切な場所での私の推測が間違っていると思い、代わりに次のことを試みました:
SELECT *
FROM (SELECT ROWNUM AS ROW_NUM, INNERQUERY.*
FROM ( SELECT *, TO_NUMBER(ADDRESSES.COMPANY) AS COMPANYID
FROM ADDRESSES, COMPANIES
WHERE COMPANYID(+) = COMPANIES.ID
) INNERQUERY) OUTERQUERY
WHERE ROW_NUM <= 50 AND ROW_NUM > 0
3行目でエラーが発生しORA-00923: FROM keyword not found where expected
ました。
私の最初の試みがうまくいかなかったとき、私は私の2番目の試みがうまくいくと確信していました。しかし、私はそのエラーに困惑しています。私はOracleの構文や動作について完全に無知ですか、それとも他の何かですか?私の問題の解決策はありますか?