Re: Moving from Sybase to Postgres - Stored Procedures

Поиск
Список
Период
Сортировка
От Sven Willenberger
Тема Re: Moving from Sybase to Postgres - Stored Procedures
Дата
Msg-id 41FBC16C.50406@dmv.com
обсуждение исходный текст
Ответ на Re: Moving from Sybase to Postgres - Stored Procedures  ("Andre Schnoor" <andre.schnoor@web.de>)
Список pgsql-general

Andre Schnoor wrote:
> "Joshua D. Drake" wrote:
>
>>Andre Schnoor wrote:
>>
>>>Hi,
>>>
>>>I am moving from Sybase to pgsql but have problems with stored procedures.
>>>The typical procedure uses
>>>
>>>a) named parameters,
>>>b) local variable declarations and assignments
>>>c) transactions
>>>d) cursors, views, etc.
>>>
>>>I can't seem to find these things in the Postgres function syntax.
>
>
> [...]
>
>
>>Perhaps if you provided the actual problem? Is there a specific
>>procedure that you are trying to port that you do not understand in the
>>PgSQL sense?
>
>
> Thank you for asking, Joshua. I've put an example procedure skeleton here:
>
> CREATE PROCEDURE do_something
>     @song_id int,
>     @user_id int,
>     @method int,
>     @length int = 0,
>     @date_exact datetime,
>     @default_country int = null
> AS
>    -- temporary variables
>    DECLARE
>       @artist int,
>       @sample int,
>       @date varchar(32),
>       @country int
> BEGIN
>     -- assign temporary variables
>     select @date = convert(varchar(32),@date_exact,101)
>     select @artist = user_id, @sample = is_sample from sto_song where song_id = @song_id
>     -- perform conditional code
>     if (@sample = 1) begin
>         begin transaction
>         ... do something ...
>         commit transaction
>     end else begin
>         ... do something else ...
>     end
>     -- return results
>     select
>         result1 = ... some expression ...,
>         result2 = ... another expression ...
> END
>
> I could not yet translate this to PgSQL, as I can't find any control structures, variable declaractions, etc.
>
I think what you want is plpgsql (which needs to instantiated on the
database in question)
createlang -U postgres plgsql dbname (for example)

The documentation is pretty decent on the language itself: for example:

CREATE FUNCTION somefunction (integer, integer, timestamp) RETURNS
[setof] datatype AS $$
DECLARE
    -- alias the passed arguments
    thesong_id ALIAS FOR $1;
    theuser_id ALIAS FOR $2;
    datetime ALIAS FOR $3;
    -- temporary variables
    artist int;
    sample int;
    thedate date;
BEGIN
    thedate := datetime::date;
    SELECT INTO artist user_id from sto_song where song_id = thesong_id;
    SELECT INTO sample is_sample from sto_song where song_id = thesong_id;
    IF sample = 1 THEN
        -- do stuff
    ELSE
        -- do other stuff
    END IF;
    RETURN something;
END;
$$ LANGUAGE plpgsql;

See if that helps you ... it really looks as though the languages are
similar enough that moving the stored procedures should a fairly decent
proposition.

Sven

В списке pgsql-general по дате отправления:

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: Prompt User From a pgplsql Function
Следующее
От: "anibal sardon paniagua"
Дата:
Сообщение: