Обсуждение: Can't execute function
Hi. I need to know what is wrong with this function
[code]
CREATE OR REPLACE FUNCTION "public"."apr_alta_empregado" ("pID_SOCIEDADE" varchar, "pID_EMPREGADO" varchar, "pNOME" varchar, "pNOME_ABREV" varchar, "pDAT_NASC" date, "pLOCALIDADE_NASC" varchar, "pID_TIPO_BILHETE_IDENTIFICACAO" varchar, "pBILHETE_IDENTIFICACAO" varchar, "pDAT_EMISSAO_BI" date, "pDAT_EXPIRA_BI" date, "pNIF" varchar, "pID_SEXO" varchar, "pID_ESTADO_CIVIL" varchar, "pID_NACAO" varchar, "pMORADA" varchar, "pLOCALIDADE" varchar, "pCODIGO_POSTAL" varchar, "pTELEFONE_1" varchar, "pTELEFONE_2" varchar, "pEMAIL_1" varchar, "pEMAIL_2" varchar, "pID_NACAO_MORADA" varchar, "pID_DISTRITO" varchar, "pID_CONCELHO" varchar, "pID_FREGUESIA" varchar) RETURNS varchar AS
$body$
DECLARE
vERRO VARCHAR(2000);
BEGIN
$body$
DECLARE
vERRO VARCHAR(2000);
BEGIN
-- Insere na Tabela de Empregados
INSERT INTO atc_empregado
(
ID_SOCIEDADE,
ID_EMPREGADO,
NOME,
NOME_ABREV,
DAT_NASC,
LOCALIDADE_NASC,
ID_TIPO_BILHETE_IDENTIFICACAO,
BILHETE_IDENTIFICACAO,
DAT_EMISSAO_BI,
DAT_EXPIRA_BI,
NIF,
ID_SEXO,
ID_ESTADO_CIVIL,
ID_NACAO
)
VALUES
(
pID_SOCIEDADE,
pID_EMPREGADO,
pNOME,
pNOME_ABREV,
pDAT_NASC,
pLOCALIDADE_NASC,
pID_TIPO_BILHETE_IDENTIFICACAO,
pBILHETE_IDENTIFICACAO,
pDAT_EMISSAO_BI,
pDAT_EXPIRA_BI,
pNIF,
pID_SEXO,
pID_ESTADO_CIVIL,
pID_NACAO
);
-- Insere na Tabela de Morada do Empregado
INSERT INTO atc_morada_empregado
(
ID_SOCIEDADE,
ID_EMPREGADO,
MORADA,
LOCALIDADE,
CODIGO_POSTAL,
TELEFONE_1,
TELEFONE_2,
EMAIL_1,
EMAIL_2,
ID_NACAO,
ID_DISTRITO,
ID_CONCELHO,
ID_FREGUESIA
)
VALUES
(
pID_SOCIEDADE,
pID_EMPREGADO,
pMORADA,
pLOCALIDADE,
pCODIGO_POSTAL,
pTELEFONE_1,
pTELEFONE_2,
pEMAIL_1,
pEMAIL_2,
pID_NACAO_MORADA,
pID_DISTRITO,
pID_CONCELHO,
pID_FREGUESIA
);
COMMIT;
END;
$body$
LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;
$body$
LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;
[/code]
When I run the function I got this error:
ERROR: function pid_sociedade() does not exist
Estado de SQL:42883
Sugestão:No function matches the given name and argument types. You may need to add explicit type casts.
Contexto:SQL statement "INSERT INTO atc_empregado ( ID_SOCIEDADE, ID_EMPREGADO, NOME, NOME_ABREV, DAT_NASC, LOCALIDADE_NASC, ID_TIPO_BILHETE_IDENTIFICACAO, BILHETE_IDENTIFICACAO, DAT_EMISSAO_BI, DAT_EXPIRA_BI, NIF, ID_SEXO, ID_ESTADO_CIVIL, ID_NACAO ) VALUES ( pID_SOCIEDADE, pID_EMPREGADO, pNOME, pNOME_ABREV, pDAT_NASC, pLOCALIDADE_NASC, pID_TIPO_BILHETE_IDENTIFICACAO, pBILHETE_IDENTIFICACAO, pDAT_EMISSAO_BI, pDAT_EXPIRA_BI, pNIF, pID_SEXO, pID_ESTADO_CIVIL, pID_NACAO )"
PL/pgSQL function "apr_alta_empregado" line 8 at SQL statement
Estado de SQL:42883
Sugestão:No function matches the given name and argument types. You may need to add explicit type casts.
Contexto:SQL statement "INSERT INTO atc_empregado ( ID_SOCIEDADE, ID_EMPREGADO, NOME, NOME_ABREV, DAT_NASC, LOCALIDADE_NASC, ID_TIPO_BILHETE_IDENTIFICACAO, BILHETE_IDENTIFICACAO, DAT_EMISSAO_BI, DAT_EXPIRA_BI, NIF, ID_SEXO, ID_ESTADO_CIVIL, ID_NACAO ) VALUES ( pID_SOCIEDADE, pID_EMPREGADO, pNOME, pNOME_ABREV, pDAT_NASC, pLOCALIDADE_NASC, pID_TIPO_BILHETE_IDENTIFICACAO, pBILHETE_IDENTIFICACAO, pDAT_EMISSAO_BI, pDAT_EXPIRA_BI, pNIF, pID_SEXO, pID_ESTADO_CIVIL, pID_NACAO )"
PL/pgSQL function "apr_alta_empregado" line 8 at SQL statement
What can I do?
Best Regards,
André Lopes.
Hello don't use COMMIT in plpgsql. Plpgsql doesn't support it. regards Pavel Stehule 2009/7/30 Andre Lopes <lopes80andre@gmail.com>: > Hi. I need to know what is wrong with this function > > [code] > CREATE OR REPLACE FUNCTION "public"."apr_alta_empregado" ("pID_SOCIEDADE" > varchar, "pID_EMPREGADO" varchar, "pNOME" varchar, "pNOME_ABREV" varchar, > "pDAT_NASC" date, "pLOCALIDADE_NASC" varchar, > "pID_TIPO_BILHETE_IDENTIFICACAO" varchar, "pBILHETE_IDENTIFICACAO" varchar, > "pDAT_EMISSAO_BI" date, "pDAT_EXPIRA_BI" date, "pNIF" varchar, "pID_SEXO" > varchar, "pID_ESTADO_CIVIL" varchar, "pID_NACAO" varchar, "pMORADA" varchar, > "pLOCALIDADE" varchar, "pCODIGO_POSTAL" varchar, "pTELEFONE_1" varchar, > "pTELEFONE_2" varchar, "pEMAIL_1" varchar, "pEMAIL_2" varchar, > "pID_NACAO_MORADA" varchar, "pID_DISTRITO" varchar, "pID_CONCELHO" varchar, > "pID_FREGUESIA" varchar) RETURNS varchar AS > $body$ > DECLARE > vERRO VARCHAR(2000); > BEGIN > > -- Insere na Tabela de Empregados > INSERT INTO atc_empregado > ( > ID_SOCIEDADE, > ID_EMPREGADO, > NOME, > NOME_ABREV, > DAT_NASC, > LOCALIDADE_NASC, > ID_TIPO_BILHETE_IDENTIFICACAO, > BILHETE_IDENTIFICACAO, > DAT_EMISSAO_BI, > DAT_EXPIRA_BI, > NIF, > ID_SEXO, > ID_ESTADO_CIVIL, > ID_NACAO > ) > VALUES > ( > pID_SOCIEDADE, > pID_EMPREGADO, > pNOME, > pNOME_ABREV, > pDAT_NASC, > pLOCALIDADE_NASC, > pID_TIPO_BILHETE_IDENTIFICACAO, > pBILHETE_IDENTIFICACAO, > pDAT_EMISSAO_BI, > pDAT_EXPIRA_BI, > pNIF, > pID_SEXO, > pID_ESTADO_CIVIL, > pID_NACAO > ); > > -- Insere na Tabela de Morada do Empregado > INSERT INTO atc_morada_empregado > ( > ID_SOCIEDADE, > ID_EMPREGADO, > MORADA, > LOCALIDADE, > CODIGO_POSTAL, > TELEFONE_1, > TELEFONE_2, > EMAIL_1, > EMAIL_2, > ID_NACAO, > ID_DISTRITO, > ID_CONCELHO, > ID_FREGUESIA > ) > VALUES > ( > pID_SOCIEDADE, > pID_EMPREGADO, > pMORADA, > pLOCALIDADE, > pCODIGO_POSTAL, > pTELEFONE_1, > pTELEFONE_2, > pEMAIL_1, > pEMAIL_2, > pID_NACAO_MORADA, > pID_DISTRITO, > pID_CONCELHO, > pID_FREGUESIA > ); > > COMMIT; > END; > $body$ > LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER; > [/code] > > > When I run the function I got this error: > > ERROR: function pid_sociedade() does not exist > Estado de SQL:42883 > Sugestão:No function matches the given name and argument types. You may need > to add explicit type casts. > Contexto:SQL statement "INSERT INTO atc_empregado ( ID_SOCIEDADE, > ID_EMPREGADO, NOME, NOME_ABREV, DAT_NASC, LOCALIDADE_NASC, > ID_TIPO_BILHETE_IDENTIFICACAO, BILHETE_IDENTIFICACAO, DAT_EMISSAO_BI, > DAT_EXPIRA_BI, NIF, ID_SEXO, ID_ESTADO_CIVIL, ID_NACAO ) VALUES ( > pID_SOCIEDADE, pID_EMPREGADO, pNOME, pNOME_ABREV, pDAT_NASC, > pLOCALIDADE_NASC, pID_TIPO_BILHETE_IDENTIFICACAO, pBILHETE_IDENTIFICACAO, > pDAT_EMISSAO_BI, pDAT_EXPIRA_BI, pNIF, pID_SEXO, pID_ESTADO_CIVIL, pID_NACAO > )" > PL/pgSQL function "apr_alta_empregado" line 8 at SQL statement > > > What can I do? > > > Best Regards, > André Lopes.
On Thu, Jul 30, 2009 at 12:22:03PM +0100, Andre Lopes wrote: > Hi. I need to know what is wrong with this function > > CREATE OR REPLACE FUNCTION "public"."apr_alta_empregado" ("pID_SOCIEDADE" > varchar, "pID_EMPREGADO" varchar, "pNOME" varchar, "pNOME_ABREV" varchar, [..] > VALUES ( pID_SOCIEDADE, You're mixing and matching quoting of identifiers, sometimes you use "pID_SOCIEDADE" and other times just pID_SOCIEDADE (i.e. without the quotes) and these are different identifiers. You need to pick one style and stick with it. -- Sam http://samason.me.uk/