Fórum O que está errado nesta SP? #52223
15/08/2005
0
:Tipo
:ID_Marca
:Marca
OutPut
:Resposta
begin
if (:Tipo = 1 ) then
if (not exists (select * from Tab_Marca where :Marca = Marca)) then
insert into Tab_marca values (:Marca)
else
select :Resposta = ´X´
else
if (:Tipo = 2) then
if (not exists (select * from Tab_modelo where :ID_marca = ID_Marca))
delete from Tab_marca :ID_marca = ID_marca
else
select @Resposta = ´X´
else
if (:Tipo = 3) then
update Tab_marca set Marca = :Marca
where :ID_Marca = ID_Marca
suspend;
end
Sempre ocorre este erro:
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 12, char 7.
else.
O que devo fazer?
Ullrich
Curtir tópico
+ 0Posts
15/08/2005
Afarias
if (:Tipo = 1 ) then begin if (not exists (select * from Tab_Marca where Marca = :Marca)) then insert into Tab_marca values (:Marca) ; else Resposta = ´X´ ; end else if (:Tipo = 2) then begin if (not exists (select * from Tab_modelo where ID_marca = :ID_Marca)) then delete from Tab_marca where ID_marca = :ID_marca ; else Resposta = ´X´ ; end else if (:Tipo = 3) then update Tab_marca set Marca = :Marca where ID_Marca = :ID_Marca ; suspend;
T+
Gostei + 0
15/08/2005
Ullrich
erro:
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 13, char 28.
=.
No InterBase como faço para atribuir um valor em uma variavel de retorno?
?? Select :Resposta = ´X´ ??
CREATE PROCEDURE NEW_PROCEDURE (
´:TIPO´ INTEGER,
´:ID_MARCA´ INTEGER,
´:MARCA´ VARCHAR(150))
RETURNS (
´:RESPOSTA´ VARCHAR(1))
AS
begin
if (:Tipo = 1 ) then
if (not exists (select * from Tab_Marca where :Marca = Marca)) then
insert into Tab_marca values (:Marca);
else
select :Resposta = ´X´ <===
end
else
if (:Tipo = 2) then
if (not exists (select * from Tab_modelo where :ID_marca = ID_Marca))
delete from Tab_marca :ID_marca = ID_marca
else
select @Resposta = ´X´
else
if (:Tipo = 3) then
update Tab_marca set Marca = :Marca
where :ID_Marca = ID_Marca
suspend;
end
Gostei + 0
15/08/2005
Afarias
select :Resposta = ´X´
nem isso:
select @Resposta = ´X´
se quer dizer q a variável Resposta recebe o valor ´X´ faça apenas:
Resposta = ´X´ ;
T+
Gostei + 0
15/08/2005
Ullrich
porem não sabia em InterBase.
valeu mesmo...
Gostei + 0
15/08/2005
Ullrich
Esta seta indica a linha do erro <===
obs: com ou sem os : gerra o mesmo erro
:Tipo
Tipo
-----
Column does not belong to referenced table.
Dynamic SQL Error.
SQL error code = -206.
Column unknown.
-----
CREATE PROCEDURE GER_MARCA (
´:TIPO´ INTEGER,
´:ID_MARCA´ INTEGER,
´:MARCA´ VARCHAR(175))
RETURNS (
´:RESPOSTA´ VARCHAR(1))
AS
begin
if (:TIPO = 1 ) then <===
if (not exists (select * from Tab_Marca where :Marca = Marca)) then
insert into Tab_marca values (:Marca);
else
RESPOSTA = ´X´;
else
if (:Tipo = 2) then
if (not exists (select * from Tab_modelo where :ID_marca = ID_Marca)) then
delete from Tab_marca where:id_marca = ID_marca;
else
RESPOSTA = ´X´;
else
if (:Tipo = 3) then
update Tab_marca set Marca = :Marca where :ID_Marca = ID_Marca;
suspend;
end
Gostei + 0
16/08/2005
Ullrich
O erro está na linha:
select :Resposta = ´X´
No SQL server funciona assim, como faço para incluir um valor na variavel :Resposta no InterBase
CREATE PROCEDURE Ger_Marca (
´:TIPO´ INTEGER,
´:ID_MARCA´ INTEGER,
´:MARCA´ VARCHAR(175))
RETURNS (
´:RESPOSTA´ VARCHAR(1))
AS
begin
if (:Tipo = 1 ) then
if (not exists (select * from Tab_Marca where :Marca = Marca)) then
insert into Tab_marca values (:Marca)
else
select :Resposta = ´X´
else
if (:Tipo = 2) then
if (not exists (select * from Tab_modelo where :ID_marca = ID_Marca))
delete from Tab_marca :ID_marca = ID_marca
else
select :Resposta = ´X´
else
if (:Tipo = 3) then
update Tab_marca set Marca = :Marca
where :ID_Marca = ID_Marca
suspend;
end
Gostei + 0
16/08/2005
Beppe
Tu esqueceu o que o afarias te escreveu? É assim somente:
Resposta = ´X´
Gostei + 0
16/08/2005
Gandalf.nho
Gostei + 0
16/08/2005
Ullrich
CREATE PROCEDURE GER_MARCA (
V_TIPO INTEGER,
V_ID_MARCA INTEGER,
V_MARCA VARCHAR(175))
RETURNS (
V_RESPOSTA VARCHAR(1))
AS
begin
if (V_TIPO = 1 ) then
if (not exists (select * from Tab_Marca where V_MARCA = MARCA)) then
insert into Tab_marca values (V_MARCA);
else
V_RESPOSTA = ´X´;
else
if (V_TIPO = 2) then
if (not exists (select * from Tab_modelo where V_ID_MARCA = ID_MARCA)) then
delete from Tab_marca where V_ID_MARCA = ID_MARCA;
else
V_RESPOSTA = ´X´;
else
if (V_TIPO = 3) then
update Tab_marca set MARCA = V_MARCA where V_ID_MARCA = ID_MARCA;
suspend;
end
Novos erros:
Column does not belong to referenced table.
Dynamic SQL Error.
SQL error code = -206.
Column unknown.
V_MARCA.
Não entendi, o que ele quer dizer com ´Column unknown.´Coluna Desconhecida.
Alguem pode me ajudar, ficaria grato.
Gostei + 0
16/08/2005
Afarias
Ex:
if (not exists (select * from Tab_modelo where ID_MARCA = :V_ID_MARCA)) then
delete from Tab_marca where ID_MARCA = :V_ID_MARCA;
T+
Gostei + 0
16/08/2005
Ullrich
Erro:
--------------------------------
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 13, char 10.
:.
--------------------------------
REATE PROCEDURE GER_MARCA (
´:TIPO´ INTEGER,
´:ID_MARCA´ INTEGER,
´:MARCA´ VARCHAR(175))
RETURNS (
´:RESPOSTA´ VARCHAR(1))
AS
begin
if (:TIPO = 1 ) then
if (not exists (select * from Tab_Marca where :MARCA = MARCA)) then
insert into Tab_marca values (:MARCA);
else
:RESPOSTA = ´X´;
else
if (:TIPO = 2) then
if (not exists (select * from Tab_modelo where :ID_MARCA = ID_MARCA)) then
delete from Tab_marca where :ID_MARCA = ID_MARCA;
else
:RESPOSTA = ´X´;
else
if (:TIPO = 3) then
update Tab_marca set MARCA = :MARCA where :ID_MARCA = ID_MARCA;
suspend;
end
Gostei + 0
17/08/2005
Afarias
2) Evite declarar variáveis, parâmentros, etc .. usando aspas
3) Vc só deve usar os ´:´ quando está EM UM COMANDO SQL!!!
ex::
CREATE PROCEDURE GER_MARCA ( TIPO INTEGER, ID_MARCA INTEGER, MARCA VARCHAR(175) ) RETURNS ( RESPOSTA VARCHAR(1) ) AS begin if (TIPO = 1) then if (not exists (select * from Tab_Marca where MARCA = :MARCA)) then insert into Tab_marca values (:MARCA); else RESPOSTA = ´X´; else if (TIPO = 2) then if (not exists (select * from Tab_modelo where ID_MARCA = :ID_MARCA)) then delete from Tab_marca where ID_MARCA = :ID_MARCA; else RESPOSTA = ´X´; else if (TIPO = 3) then update Tab_marca set MARCA = :MARCA where ID_MARCA = :ID_MARCA; suspend; end
T+
Gostei + 0
18/08/2005
Ullrich
Este procedimento é uma Stored Procedure que estou fazendo no IBexpert, e não um procedimento em Delphi, OK. Então todo procedimento é em SQL.
Retirei os ´:´ das declarações de variaveis, e o erro presisti. Se puder me ajudar facarei grato.
Gostei + 0
18/08/2005
Afarias
|IBexpert, e não um procedimento em Delphi,
sei disso...
|OK. Então todo procedimento é em SQL.
NÃO. O procedimento é cosntruído usando PSQL (Procedural SQL) que é uma extensão do SQL para procedimentos e triggers apenas...
...quando falo de comandos SQL estou me referindo a SELECT, INSERT, UPDATE e DELETE (comandos DML, já que DDL não pode ser usados em Stored Procedures no IB/FB)
|Retirei os ´:´ das declarações de variaveis, e o erro presisti. Se puder
|me ajudar facarei grato.
para ver o erro na sintaxe preciso ver o código q está tentando compilar (além do erro retornado).
T+
Gostei + 0
19/08/2005
Ullrich
An error was found in the application program input parameters for the SQL statement.
Dynamic SQL Error.
SQL error code = -804.
Count of columns does not equal count of values.
REATE PROCEDURE GER_MARCA (
TIPO INTEGER,
ID_MARCA INTEGER,
MARCA VARCHAR(175))
RETURNS (
RESPOSTA VARCHAR(1))
AS
begin
if (:TIPO = 1 ) then
if (not exists (select * from Tab_Marca where :MARCA = MARCA)) then
insert into Tab_marca values (:MARCA);
else
RESPOSTA = ´X´;
else
if (:TIPO = 2) then
if (not exists (select * from Tab_modelo where :ID_MARCA = ID_MARCA)) then
delete from Tab_marca where :ID_MARCA = ID_MARCA;
else
RESPOSTA = ´X´;
else
if (:TIPO = 3) then
update Tab_marca set MARCA = :MARCA where :ID_MARCA = ID_MARCA;
suspend;
end
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)