função de atualização no PostgreSQL

votos
1

Eu tenho uma pergunta sobre uma função de atualização que eu criei ...

CREATE OR REPLACE FUNCTION rm_category_update(icompany bpchar, iraw_mat_cat_code bpchar, iraw_mat_cat_desc bpchar)

RETURNS character AS

$BODY$

DECLARE
   loc_result    CHAR(50); 

BEGIN

UPDATE rm_category

 SET
    raw_mat_cat_code    = iraw_mat_cat_code,
    raw_mat_cat_desc    = iraw_mat_cat_desc

WHERE company = icompany;

loc_result = 'success';

RETURN loc_result ;

END;

$BODY$

LANGUAGE 'plpgsql' VOLATILE;

ALTER FUNCTION rm_category_update(icompany bpchar, iraw_mat_cat_code bpchar, iraw_mat_cat_desc bpchar) OWNER TO postgres;

Ok, então se eu inserir um registro que não existe, por exemplo, 9, ele retorna sucesso, embora eu sei que actualiza nada!

O SQL não jogue erros se for atualizar uma linha inexistente ??

obrigado

Publicado 19/11/2008 em 08:24
fonte usuário
Em outras línguas...                            


2 respostas

votos
0

Depende dos DBMS - mas não, ele não deve lançar um erro. De acordo com o padrão SQL (ISO / IEC 9075: 2008, estes dias), ele deve definir a condição SQLNOTFOUND (100), que é separado de qualquer condição de erro. (Com Informix, se você usar um banco de dados modo ANSI, você começa SQLNOTFOUND, se você usar um banco de dados não-ANSI, você recebe 0 (nenhum erro) como a condição As razões para que pré-data o original padrão SQL-86.. )

Observe que o SQL é uma linguagem baseada em conjunto. O que você pediu foi que a declaração atualizar um conjunto de linhas (correspondência) - e é perfeitamente válida para atualizar um conjunto contendo zero linhas (correspondência).

Respondeu 19/11/2008 em 08:42
fonte usuário

votos
1

Você pode usar "encontrado" para detectar se a última declaração afetada uma ou mais linhas, ver manual .

Exemplo:

-- snippet
IF FOUND THEN
  loc_result = 'success';
ELSE
  loc_result = 'failed'; -- or something similiar...
END IF;
Respondeu 19/11/2008 em 09:17
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more