Обсуждение: Calling Postgresql Function to delete user data

Поиск
Список
Период
Сортировка

Calling Postgresql Function to delete user data

От
Rehan Saleem
Дата:
Hi ,
I have created this function to remove UserDataAccountid from both tables
UserAccountDetails and UserAC
CREATE OR REPLACE FUNCTION DeleteUserData(ACDetailsID int[])
RETURNS void AS $$
DECLARE _id int;
BEGIN
  -- postgresql has no table type, use a int array instead
  FOR _id IN array_lower(ACDetailsID,1) .. array_upper(ACDetailsID,1)
  LOOP
      DELETE FROM UserAccountDetails WHERE UserDataAcountId= _id;
      DELETE FROM UserAC WHERE UserDataAcountId= _id;
    END;
  END LOOP;
  EXCEPTION WHEN OTHERS THEN
    RAISE WARNING 'some issue %', SQLERRM;
END;
$$ LANGUAGE plpgsql;
 
Now I am calling this function to delete userdataacountid from both tables, say i have a user with userdataacountid '5', how can i delete this user by calling this function , i have tried

select DeleteUserData(5);
and
select * from DeleteUserData(5);

its not working ,
thanks

Re: Calling Postgresql Function to delete user data

От
Philip Couling
Дата:
On 11/02/2012 19:53, Rehan Saleem wrote:
> Hi ,
> I have created this function to remove UserDataAccountid
> from both tables
> UserAccountDetails and UserAC 
> CREATE OR REPLACE FUNCTION DeleteUserData(ACDetailsID int[])
> RETURNS void AS $$
> DECLARE _id int;
> BEGIN
>   -- postgresql has no table type, use a int array instead
>   FOR _id IN array_lower(ACDetailsID,1) .. array_upper(ACDetailsID,1)
>   LOOP
>       DELETE FROM UserAccountDetails WHERE UserDataAcountId=
> _id;
>       DELETE FROM UserAC WHERE UserDataAcountId= _id;
>     END;
>   END LOOP;
>   EXCEPTION WHEN OTHERS THEN
>     RAISE WARNING 'some issue %', SQLERRM;
> END;
> $$ LANGUAGE plpgsql;
>  
> Now I am calling this function to delete userdataacountid
> from both tables, say i have a user with userdataacountid '5', how can i delete
> this user by calling this function , i have tried 
> 
> select DeleteUserData(5);
> and
> select * from DeleteUserData(5);
> 
> its not working ,
> thanks

I would guess that the error you're getting is:

ERROR:  function deleteuserdata(integer) does not exist
LINE 1: select DeleteUserData(5);              ^

This is happening because your function takes an array, not a single
integer.  PostgreSQL can automatically cast from a string to an array if
the string is properly formatted:

select DeleteUserData('{5}');

Hope this helps.