FUNÇOES TRIM, LOWER E REPLACE SQL FIREBIRD 1.5 IBEXPERT DELPHI

07/11/2024

0

Bom dia Pessoal
Estou com um problema, sou iniciante e preciso executar alguns select em um banco de dados de um sistema em Delphi , esse banco esta com firebird 1.5 , estou usando o ibexpert e alguns comando como TRIM, LOWER E REPLACE não funcionam.
Alguem saberia informar se este comando estao ativo para banco com firebird 1.5 , caso sim, como adicionar essas funções no ib expert ?




select replace(S_NOME,''ali'',''eli'')from usuarios

An error was found in the application program input parameters for the SQL statement.
Dynamic SQL Error.
SQL error code = -804.
Function unknown.
REPLACE.
Alex

Alex

Responder

Post mais votado

08/11/2024

Bom dia Pessoal
Estou com um problema, sou iniciante e preciso executar alguns select em um banco de dados de um sistema em Delphi , esse banco esta com firebird 1.5 , estou usando o ibexpert e alguns comando como TRIM, LOWER E REPLACE não funcionam.
Alguem saberia informar se este comando estao ativo para banco com firebird 1.5 , caso sim, como adicionar essas funções no ib expert ?




select replace(S_NOME,''ali'',''eli'')from usuarios

An error was found in the application program input parameters for the SQL statement.
Dynamic SQL Error.
SQL error code = -804.
Function unknown.
REPLACE.



O erro ocorre porque a função `REPLACE` não é suportada na versão 1.5 do Firebird. A função `REPLACE` foi introduzida no Firebird 2.0, então ela não está disponível na versão 1.5.

Para contornar essa limitação, uma alternativa é usar expressões SQL e funções de string disponíveis no Firebird 1.5. No entanto, é necessário criar uma **procedure** ou **UDF** (User Defined Function) personalizada para simular o comportamento do `REPLACE`.

### Opção 1: UDF (User Defined Function)

Você pode usar uma biblioteca de UDFs chamada `FreeUDFLib`, que é amplamente utilizada no Firebird 1.5. Ela fornece várias funções, incluindo `REPLACE`.

1. **Baixe e registre a biblioteca UDF**:
- Baixe a biblioteca `FreeUDFLib.dll` e coloque-a na pasta de UDFs do Firebird.
- Registre a função `REPLACE` no banco de dados com o seguinte comando:
```sql
DECLARE EXTERNAL FUNCTION REPLACE
CSTRING(255), CSTRING(255), CSTRING(255)
RETURNS CSTRING(255) FREE_IT
ENTRY_POINT 'strreplace' MODULE_NAME 'FreeUDFLib';
```

2. **Execute o comando SQL**:
Após registrar a função, você poderá usá-la normalmente:
```sql
SELECT REPLACE(S_NOME, 'ali', 'eli') FROM usuarios;
```

### Opção 2: Procedure para Simular o REPLACE

Caso não queira usar uma UDF, você também pode criar uma **stored procedure** para substituir o texto.

Aqui está um exemplo básico de como criar uma procedure para isso:

```sql
SET TERM ^ ;
CREATE PROCEDURE SP_REPLACE(
INPUT_STRING VARCHAR(255),
SEARCH_STRING VARCHAR(50),
REPLACE_STRING VARCHAR(50)
) RETURNS (
RESULT_STRING VARCHAR(255)
)
AS
DECLARE VARIABLE POS INTEGER;
BEGIN
RESULT_STRING = INPUT_STRING;
POS = POSITION(:SEARCH_STRING, RESULT_STRING);

WHILE (POS > 0) DO
BEGIN
RESULT_STRING = LEFT(RESULT_STRING, POS - 1) || :REPLACE_STRING || SUBSTRING(RESULT_STRING FROM POS + CHAR_LENGTH(:SEARCH_STRING));
POS = POSITION(:SEARCH_STRING, RESULT_STRING);
END
SUSPEND;
END^
SET TERM ; ^
```

Para utilizá-la:

```sql
SELECT RESULT_STRING FROM SP_REPLACE(S_NOME, 'ali', 'eli') FROM usuarios;
```
Essas alternativas devem resolver o problema de substituição de texto no Firebird 1.5!

Raimundo Pereira

Raimundo Pereira
Responder

Mais Posts

11/11/2024

Alex

Bom dia Pessoal
Estou com um problema, sou iniciante e preciso executar alguns select em um banco de dados de um sistema em Delphi , esse banco esta com firebird 1.5 , estou usando o ibexpert e alguns comando como TRIM, LOWER E REPLACE não funcionam.
Alguem saberia informar se este comando estao ativo para banco com firebird 1.5 , caso sim, como adicionar essas funções no ib expert ?




select replace(S_NOME,''ali'',''eli'')from usuarios

An error was found in the application program input parameters for the SQL statement.
Dynamic SQL Error.
SQL error code = -804.
Function unknown.
REPLACE.



O erro ocorre porque a função `REPLACE` não é suportada na versão 1.5 do Firebird. A função `REPLACE` foi introduzida no Firebird 2.0, então ela não está disponível na versão 1.5.

Para contornar essa limitação, uma alternativa é usar expressões SQL e funções de string disponíveis no Firebird 1.5. No entanto, é necessário criar uma **procedure** ou **UDF** (User Defined Function) personalizada para simular o comportamento do `REPLACE`.

### Opção 1: UDF (User Defined Function)

Você pode usar uma biblioteca de UDFs chamada `FreeUDFLib`, que é amplamente utilizada no Firebird 1.5. Ela fornece várias funções, incluindo `REPLACE`.

1. **Baixe e registre a biblioteca UDF**:
- Baixe a biblioteca `FreeUDFLib.dll` e coloque-a na pasta de UDFs do Firebird.
- Registre a função `REPLACE` no banco de dados com o seguinte comando:
```sql
DECLARE EXTERNAL FUNCTION REPLACE
CSTRING(255), CSTRING(255), CSTRING(255)
RETURNS CSTRING(255) FREE_IT
ENTRY_POINT 'strreplace' MODULE_NAME 'FreeUDFLib';
```

2. **Execute o comando SQL**:
Após registrar a função, você poderá usá-la normalmente:
```sql
SELECT REPLACE(S_NOME, 'ali', 'eli') FROM usuarios;
```

### Opção 2: Procedure para Simular o REPLACE

Caso não queira usar uma UDF, você também pode criar uma **stored procedure** para substituir o texto.

Aqui está um exemplo básico de como criar uma procedure para isso:

```sql
SET TERM ^ ;
CREATE PROCEDURE SP_REPLACE(
INPUT_STRING VARCHAR(255),
SEARCH_STRING VARCHAR(50),
REPLACE_STRING VARCHAR(50)
) RETURNS (
RESULT_STRING VARCHAR(255)
)
AS
DECLARE VARIABLE POS INTEGER;
BEGIN
RESULT_STRING = INPUT_STRING;
POS = POSITION(:SEARCH_STRING, RESULT_STRING);

WHILE (POS > 0) DO
BEGIN
RESULT_STRING = LEFT(RESULT_STRING, POS - 1) || :REPLACE_STRING || SUBSTRING(RESULT_STRING FROM POS + CHAR_LENGTH(:SEARCH_STRING));
POS = POSITION(:SEARCH_STRING, RESULT_STRING);
END
SUSPEND;
END^
SET TERM ; ^
```

Para utilizá-la:

```sql
SELECT RESULT_STRING FROM SP_REPLACE(S_NOME, 'ali', 'eli') FROM usuarios;
```
Essas alternativas devem resolver o problema de substituição de texto no Firebird 1.5!
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar