テーブル内の重複値を検索する次の SQL クエリがあります (null である 2 つの値は重複として分類する必要があるため、nvl を使用します)。
select * from PersonLinkTable personLink
where personLink.RefPerson = 100
and nvl(to_char(personLink.PersonLinkType), '###') = nvl(to_char(PersonLinkTable.PersonLinkType), '###') // Repeats for required columns
3 行目は必要な列に対して繰り返され、将来新しい列が追加された場合に備えて自動的に生成されます。問題は、to_char を追加したときに、これがテストされ、「無効な番号」という Oracle エラーが発生したことです。将来日付列が追加された場合に備えて to_char が必要だと思います。
このように to_char を使用すると「無効な数値」エラーが発生するのはなぜですか? また、正しい使用方法は何ですか? 現時点での列の型は、varchar2、char、および number です。
このクエリは、いくつかの変更を加えて SQL Server で正しく機能します。to_char がなく、nvl ではなく isnull であり、null 値が '###' ではなく空の文字列に変更されています。これはより大きなクエリの一部であり、「and not exists」で囲まれています。