Expressão regular para decimal em banco de dados oracle

Olá,

Preciso de uma expressão regular que valide um campo de texto com um número decimal para ser passado para uma coluna NUMBER(9,3) de um banco de dados oracle. O número deve conter no máximo 9 dígitos, sendo que 3 destes podem ou não ser casas decimais, por exemplo:

23.10 --> PASSA
23.109 --> PASSA
23.1109 --> NÃO PASSA
232323232 --> PASSA
12345678.3 --> PASSA
-12345678 --> PASSA
-123456789 --> NÃO PASSA
123456.789 --> PASSA
1234567.89 --> PASSA
123456.789 --> PASSA
1123456.789 --> NÃO PASSA
-12345.678 --> PASSA
-123456.789 – NÃO PASSA

Resumindo, o número deve conter no máximo 3 dígitos decimais e no máximo 9 no total. Eu já fiz esta expressão:

Ela consegue validar a quantidade de dígitos depois do ponto e o sinal de + ou - no início. Consegue também validar se o número possui 9 dígitos antes do ponto, mas não considera os depois do ponto, portanto não é o desejado. Alguém tem uma ideia sobre como corrigir esta expressão? Desde já agradeço.

Consegui melhorar a expressão, agora ela aceita no máximo 9 caracteres, mas não ignora o ponto.

Consegui resolver de uma outra maneira utilizando split no ponto e utilizando o length das substrings geradas