Can't execute function

Started by Andre Lopesover 16 years ago3 messagesgeneral
Jump to latest
#1Andre 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.

#2Pavel Stehule
pavel.stehule@gmail.com
In reply to: Andre Lopes (#1)
Re: Can't execute function

Hello

don't use COMMIT in plpgsql. Plpgsql doesn't support it.

regards
Pavel Stehule

2009/7/30 Andre Lopes <lopes80andre@gmail.com>:

Show quoted text

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.

#3Sam Mason
sam@samason.me.uk
In reply to: Andre Lopes (#1)
Re: Can't execute function

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/