StoredProcedure com Erro - Por Favor !!!!

Delphi

17/03/2003

Pessoal estou começando fazer StoredProcedure no Interbase essa tá dando um erro no ; antes do else, e se eu tiro dá erro no ELSE o que tá erro aqui-
CREATE PROCEDURE StpCli_Localizar(
TIPODEOPERACAO INTEGER,
NOME VARCHAR(50),
FANTASIA VARCHAR(40),
CPF_CGC VARCHAR(15))
AS
begin
IF (:TIPODEOPERACAO = 1) then
SELECT NOME,CPF_CGC,TELEFONE,CELULAR,ENDERECO,DATACADASTRO,LIMITICRED,CRED_LIBERADO
FROM Clientes
WHERE NOME like :NOME;
ELSE
SELECT FANTASIA,CPF_CGC,TELEFONE,CELULAR,ENDERECO,DATACADASTRO,LIMITICRED,CRED_LIBERADO
FROM Clientes
WHERE FANTASIA = :FANTASIA;
end


Herivelto

Herivelto

Curtidas 0

Respostas

Bilouro

Bilouro

17/03/2003

[b:b786eb7029]BEGIN[/b:b786eb7029]
IF (:TIPODEOPERACAO = 1) then
[b:b786eb7029]BEGIN[/b:b786eb7029]
SELECT NOME,CPF_CGC,TELEFONE,CELULAR,ENDERECO,DATACADASTRO,LIMITICRED,CRED_LIBERADO
FROM Clientes
WHERE NOME like :NOME;
[b:b786eb7029]END[/b:b786eb7029]
ELSE
[b:b786eb7029]BEGIN[/b:b786eb7029]
SELECT FANTASIA,CPF_CGC,TELEFONE,CELULAR,ENDERECO,DATACADASTRO,LIMITICRED,CRED_LIBERADO
FROM Clientes
WHERE FANTASIA = :FANTASIA;
[b:b786eb7029]END;[/b:b786eb7029]
[b:b786eb7029]end[/b:b786eb7029]


BOM NUNCA FIZ UMA PROCEDURE EM INTERBASE, MAS TENTE ISSO... IF FUNCIONAR BLZ, ELSE FOI MAL

[]´S


GOSTEI 0
Herivelto

Herivelto

17/03/2003

Cara já tentei também mais não funcionol,

Mais valeu a intenção,,,,

um Abraço.


GOSTEI 0
Herivelto

Herivelto

17/03/2003

[color=red:5473f7b3d5][b:5473f7b3d5]Não sei porque não compila as stroredProcedure para no ; ante do Else[/b:5473f7b3d5][/color:5473f7b3d5]
[b:5473f7b3d5]IF[/b:5473f7b3d5] (:TIPODEOPERACAO = 1) [b:5473f7b3d5]then [/b:5473f7b3d5]
[b:5473f7b3d5]SELECT [/b:5473f7b3d5]NOME,CPF_CGC,TELEFONE,CELULAR,ENDERECO,DATACADASTRO,LIMITICRED,CRED_LIBERADO
[b:5473f7b3d5]FROM [/b:5473f7b3d5]Clientes
[b:5473f7b3d5]WHERE [/b:5473f7b3d5]NOME like :NOME;
[b:5473f7b3d5]ELSE [/b:5473f7b3d5]
[b:5473f7b3d5]SELECT [/b:5473f7b3d5]FANTASIA,CPF_CGC,TELEFONE,CELULAR,ENDERECO,DATACADASTRO,LIMITICRED,CRED_LIBERADO
[b:5473f7b3d5]FROM [/b:5473f7b3d5]Clientes
[b:5473f7b3d5]WHERE [/b:5473f7b3d5]FANTASIA LIKE :FANTASIA;
[/b]


GOSTEI 0
Anonymous

Anonymous

17/03/2003

Eu também não consegui fazer isso, eu fazia no SqlServe mais no Interbase é diferente, e ninguém me respondeu..


GOSTEI 0
Bilouro

Bilouro

17/03/2003

ah brother naum esquenta a cabeça com isso naum... faz assim e pronto...

IF (:TIPODEOPERACAO = 1) then
SELECT NOME,CPF_CGC,TELEFONE,CELULAR,ENDERECO,DATACADASTRO,LIMITICRED,CRED_LIBERADO
FROM Clientes
WHERE NOME like :NOME;

IF (:TIPODEOPERACAO = 2) then
SELECT FANTASIA,CPF_CGC,TELEFONE,CELULAR,ENDERECO,DATACADASTRO,LIMITICRED,CRED_LIBERADO
FROM Clientes
WHERE FANTASIA LIKE :FANTASIA;

[]´s


GOSTEI 0
Herivelto

Herivelto

17/03/2003

[color=darkred:9c1ae40c0c]Ele continua parando e dando esse erro[/color:9c1ae40c0c]
[b:9c1ae40c0c]can´t format message 13:896 -- message file C:\Arquivos de programas\HK-Software\firebird.msg not found.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 10, char 29.[/b:9c1ae40c0c];.

CREATE PROCEDURE NEW_PROCEDURE (
IDADECLI INTEGER,
NOMECLI VARCHAR(50),
TIPODEOPERACAO INTEGER)
AS
begin
IF (:TIPODEOPERACAO = 1) then
SELECT CLI_NOME,CLI_IDADE,CLI_DATANASCIMENTO
FROM NEW_TABLE
WHERE CLI_NOME = :NOMECLI [color=red:9c1ae40c0c];[/color:9c1ae40c0c]

IF (:TIPODEOPERACAO = 2) then
SELECT CLI_NOME,CLI_IDADE,CLI_DATANASCIMENTO
FROM NEW_TABLE
WHERE CLI_IDADE = :IDADECLI ;

suspend;
end

para no ; e se eu tiro ele para no IF
[/b]


GOSTEI 0
Datasystem

Datasystem

17/03/2003

caro colega vamos por partes
A VARIAS COISAS QUE ESTAM FALTANDO NA SUA PROCEDURE
1º - FALTA OS PARAMETROS DE RETORNO
2º - FALTA AS CLAUSULAS [b:0b23e7f0a1]INTO DO[/b:0b23e7f0a1]
ENTRE OUTRAS....

SEGUE ABAIXO A PROCEDURE ALTERADA

CREATE PROCEDURE StpCli_Localizar( TIPODEOPERACAO INTEGER,PNOME VARCHAR(50))

RETURNS(
NOME VARCHAR(50),
CPF_CGC //SEU TIPO ,
TELEFONE //SEU TIPO,
CELULAR //SEU TIPO,
ENDERECO //SEU TIPO,
DATACADASTRO //SEU TIPO,
LIMITICRED //SEU TIPO,
CRED_LIBERADO //SEU TIPO
FANTASIA VARCHAR(40),
CPF_CGC VARCHAR(15)
)

AS
begin

IF (:TIPODEOPERACAO = 1) then
BEGIN /*este begin so existe por causa da clausula suspend */
FOR SELECT NOME,CPF_CGC,TELEFONE,CELULAR,ENDERECO,DATACADASTRO,LIMITICRED,CRED_LIBERADO
FROM Clientes WHERE NOME like :PNOME INTO
:NOME,:CPF_CGC,:TELEFONE,:CELULAR,:ENDERECO,:DATACADASTRO,:LIMITICRED,:CRED_LIBERADO DO
[b:0b23e7f0a1]SUSPEND;[/b:0b23e7f0a1]
END
ELSE
BEGIN
SELECT FANTASIA,CPF_CGC,TELEFONE,CELULAR,ENDERECO,DATACADASTRO,LIMITICRED,CRED_LIBERADO
FROM Clientes WHERE FANTASIA = :PNOME INTO
:NOME,:CPF_CGC,:TELEFONE,:CELULAR,:ENDERECO,:DATACADASTRO,:LIMITICRED,:CRED_LIBERADO DO
[b:0b23e7f0a1]SUSPEND;[/b:0b23e7f0a1]
END;
end


GOSTEI 0
POSTAR