Thread: converting Oracle to postgres

converting Oracle to postgres

From
RobertD.Stewart@mail.state.ky.us
Date:

Here is a copy of my function in oracle.

 

Create Or Replace FUNCTION SET_USERNAME

  ( eventtype IN varchar2,

    message IN varchar2)

  RETURN  varchar2 IS

username varchar2(30);

pos1  number(7);

pos2 number(7); 

BEGIN

    if eventtype = 'AUDIT_SUCCESS' then

      pos1 := instr(message, 'User Name:') + 10;

      pos2 := instr(message, 'Domain');

      return substr(message, pos1, pos2-pos1);  

    elsif eventtype = 'AUDIT_FAILURE' then

      pos1 := instr(message, 'User Name:') + 10;

      pos2 := instr(message, 'Domain:');

      if (pos1 = 0 or pos2 = 0) then

        pos1 := instr(message, 'Account Name:') + 13;

        pos2 := instr(message, 'Target Domain:');

      end if; 

 

      return substr(message, pos1, pos2-pos1);  

    end if;       

    return '' ;

EXCEPTION

   WHEN others THEN

       return '' ;

END;

 

 

How do I get it to work in postgres

Please help me with the SQL commands

 

Thanks

 

 

Robert Stewart

Division of Communications

Office of Infrastructure Services

Governors Office for Technology

Commonwealth of Kentucky

work: 502 564 4287

cell: 502 330 5991

pager 877 543 0473

 

 

Re: converting Oracle to postgres

From
will trillich
Date:
On Mon, Feb 03, 2003 at 02:05:01PM -0500, RobertD.Stewart@mail.state.ky.us wrote:
> Here is a copy of my function in oracle.
>
> Create Or Replace FUNCTION SET_USERNAME
>   ( eventtype IN varchar2,
>     message IN varchar2)

    /*
>   RETURN  varchar2 IS
    */

    returns varchar as '

[function body is a single-quoted string, so all single quotes
in the body will have to be doubled -- '' (not ")]

    declare

> username varchar2(30);
> pos1  number(7);
> pos2 number(7);
> BEGIN
>     if eventtype = 'AUDIT_SUCCESS' then

    -- don''t forget to double-your-single-quotes:
    if eventtype = ''AUDIT_SUCCESS'' then

>       pos1 := instr(message, 'User Name:') + 10;
>       pos2 := instr(message, 'Domain');
>       return substr(message, pos1, pos2-pos1);
>     elsif eventtype = 'AUDIT_FAILURE' then

    else
        if eventtype = ''AUDIT_FAILURE'' then

>       pos1 := instr(message, 'User Name:') + 10;
>       pos2 := instr(message, 'Domain:');
>       if (pos1 = 0 or pos2 = 0) then
>         pos1 := instr(message, 'Account Name:') + 13;
>         pos2 := instr(message, 'Target Domain:');
>       end if;
>       return substr(message, pos1, pos2-pos1);

        end if; -- "audit failure"

>     end if;
>     return '' ;

not sure what this exception clause does...

    /*

> EXCEPTION
>    WHEN others THEN
>        return '' ;

    */

> END;

    ' -- end of function-source string
    language 'plpgsql';

>
> How do I get it to work in postgres
>
> Please help me with the SQL commands

i think plpgsql is standard these days, so you should be able to
create procedures without having to "install" or "activate" it.

note -- this is untested, off the top of my head and is likely
to blow your timing chain. proceed at your own risk. not
available in all areas. offer good while supplies last. yada
yada.

you can (and should) double-check my work yourself, by perusing
http://postgresql.org/users-lounge/docs/7.2/postgres/plpgsql.html

(depending on the version you're using, of course)

--
There are 10 kinds of people:
ones that get binary, and ones that don't.

will@serensoft.com
http://sourceforge.net/projects/newbiedoc -- we need your brain!
http://www.dontUthink.com/ -- your brain needs us!

Looking for a firewall? Do you think smoothwall sucks? You're
probably right... Try the folks at http://clarkconnect.org/ !

Re: converting Oracle to postgres

From
Oliver Elphick
Date:
On Fri, 2003-02-07 at 08:58, will trillich wrote:
> On Mon, Feb 03, 2003 at 02:05:01PM -0500, RobertD.Stewart@mail.state.ky.us wrote:
> > Here is a copy of my function in oracle.
...
> >     elsif eventtype = 'AUDIT_FAILURE' then
>
>     else
>         if eventtype = ''AUDIT_FAILURE'' then

ELSIF is valid pg/sql - it saves an extra END IF

--
Oliver Elphick                                Oliver.Elphick@lfix.co.uk
Isle of Wight, UK                             http://www.lfix.co.uk/oliver
GPG: 1024D/3E1D0C1C: CA12 09E0 E8D5 8870 5839  932A 614D 4C34 3E1D 0C1C
                 ========================================
     "But the LORD is in his holy temple; let all the earth
      keep silence before him."           Habakkuk 2:20


Re: converting Oracle to postgres

From
Tom Lane
Date:
will trillich <will@serensoft.com> writes:
> i think plpgsql is standard these days, so you should be able to
> create procedures without having to "install" or "activate" it.

No, you still do need to do 'createlang' to set it up.  There's been
debate about whether to make it standard.  A paranoid DBA might not
*want* PLs available.

            regards, tom lane

Re: converting Oracle to postgres

From
Lincoln Yeoh
Date:
At 09:58 AM 2/7/03 -0500, Tom Lane wrote:

>will trillich <will@serensoft.com> writes:
> > i think plpgsql is standard these days, so you should be able to
> > create procedures without having to "install" or "activate" it.
>
>No, you still do need to do 'createlang' to set it up.  There's been
>debate about whether to make it standard.  A paranoid DBA might not
>*want* PLs available.

Yes.

Don't want a repeat of MS SQL Server. I'm sure there are people who need to
format c:\, dir, etc using MS SQL. But most people don't need this stuff
installed by default.

It might not be so bad at the start if you install a language by default.
But if the language/features get extended you could end up with a lose-lose
situation.

Regards,
Link.


Re: converting Oracle to postgres

From
Tom Lane
Date:
Lincoln Yeoh <lyeoh@pop.jaring.my> writes:
> At 09:58 AM 2/7/03 -0500, Tom Lane wrote:
>> No, you still do need to do 'createlang' to set it up.  There's been
>> debate about whether to make it standard.  A paranoid DBA might not
>> *want* PLs available.

> Yes.

> Don't want a repeat of MS SQL Server. I'm sure there are people who need to
> format c:\, dir, etc using MS SQL. But most people don't need this stuff
> installed by default.

Well, we'd certainly never install any untrusted languages by default.
The trusted languages don't let you do anything you couldn't do anyway,
given that you have SQL command access.

Nonetheless, paranoia is a good thing.

            regards, tom lane

Re: converting Oracle to postgres

From
"Berend Tober"
Date:
> Here is the error I get when trying to create the trigger
> ERROR:  CreateTrigger: function set_username1() does not exist
> How do I create a function that can be seen by a trigger command.
> When I create my function I get no errors and I'm able to see the
> function.
>
>
> Here is my sql command to create my trigger
>
> CREATE TRIGGER trg_setuser1
> BEFORE INSERT
> ON eventlogs
> FOR EACH ROW
> EXECUTE PROCEDURE set_username1 ("
>   if (username is NULL) then
>     select (eventtype, message) into username from dual;
>   end if;
> END;");
>

It looks to me like your call to set_username1 in the trigger has only a
single argument, whereas the definition of the stored procedure
set_username1 has two arguments. I think PostgreSQL considers them
different functions if the argument list does not match.

>
>
>> Here is a copy of my function in oracle. ...
>
> Have you RT(Fine)M? (In particular section 19.11. "Porting from Oracle
> PL/SQL"). After you have read that, then what specifically is the
> difficulty you are having?

I apologize for being a bit of a smart-ass, but it wasn't readily
apparent to me from your original post that you had tried or read
anything to solve the problem yourself.

Regards,
Berend