Обсуждение: Argument variables for select

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

Argument variables for select

От
Andreas Tille
Дата:
Hello,

I want to use the following construct in a stored function:

Create Function VarSelect ( varchar, varchar )  returns int  As '    Declare num int ;        Begin      Select Into
numCount(*) From $1 Where $2 ;      return num;    End ;  ' language 'plpgsql' ;
 

Could someone please explain who to type the exact syntax so that
I can ship the table to select from as $1 and the condition to select
what as $2?  Or do I have to concatenate a string with the whole
select statement and how to call this string?  In MS SQL server this
could be done with   Exec ( query )

Kind regards
         Andreas.



Re: Argument variables for select

От
Yury Don
Дата:
Andreas Tille wrote:
> 
> Hello,
> 
> I want to use the following construct in a stored function:
> 
> Create Function VarSelect ( varchar, varchar )
>    returns int
>    As '
>      Declare num int ;
> 
>      Begin
>        Select Into num Count(*) From $1 Where $2 ;
>        return num;
>      End ;
>    ' language 'plpgsql' ;
> 
> Could someone please explain who to type the exact syntax so that
> I can ship the table to select from as $1 and the condition to select
> what as $2?  Or do I have to concatenate a string with the whole
> select statement and how to call this string?  In MS SQL server this
> could be done with
>    Exec ( query )
> 
> Kind regards
> 
>           Andreas.

AFAIK it's impossible with plpgsql, but it's possible in pltcl.

-- 
Sincerely yours,
Yury


Re: Argument variables for select

От
Andreas Tille
Дата:
On Mon, 28 Aug 2000, Yury Don wrote:

> Andreas Tille wrote:
> > 
> > Create Function VarSelect ( varchar, varchar )
> >    returns int
> >    As '
> >      Declare num int ;
> > 
> >      Begin
> >        Select Into num Count(*) From $1 Where $2 ;
> >        return num;
> >      End ;
> >    ' language 'plpgsql' ;
> > 
> AFAIK it's impossible with plpgsql, but it's possible in pltcl.
Hmmm, I wonder how many languages I will learn while dealing with
PostgreSQL.  What about performance of pltcl compared to C.
I wonder if I just do all my work using C-functions, because I
know C very well and don't want to reach the next limit which
I will possibly face when using pltcl.

I would really like to write all my functions in SQL or PLPGSQL.
If this is really impossible (I just wonder if the construct above
could really not be implemented???), I would prefer C over other
languages, if there are no real drawbacks.

Kind regards
        Andreas.



Re: Argument variables for select

От
Andreas Tille
Дата:
On Mon, 28 Aug 2000, Yury Don wrote:

> > Create Function VarSelect ( varchar, varchar )
> >    returns int
> >    As '
> >      Declare num int ;
> > 
> >      Begin
> >        Select Into num Count(*) From $1 Where $2 ;
> >        return num;
> >      End ;
> >    ' language 'plpgsql' ;
> > 
> > Could someone please explain who to type the exact syntax so that
> > I can ship the table to select from as $1 and the condition to select
> > what as $2?  Or do I have to concatenate a string with the whole
> > select statement and how to call this string?  In MS SQL server this
> > could be done with
> >    Exec ( query )
> > 
> AFAIK it's impossible with plpgsql, but it's possible in pltcl.

It is really hard to believe that I'm in so very deep trouble with
PostgreSQL.  It seems to me that stored procedures are far from beeing
as usefull as I learned them to know in MS SQL server.  Once I try
to follow one hint I'm standing in frot of the next even harder problem.


web=# create function testfunc( )
web-#   returns int
web-#   As '
web'#       spi_exec "SELECT count(*) AS $num FROM testtable"
web'# 
web'#       return $num ;
web'#     End; '
web-#   language 'pltcl' ;
ERROR:  Unrecognized language specified in a CREATE FUNCTION: 'pltcl'.  Recognized languages are sql, C, internal and
thecreated procedural languages.
 


I have installed the pgtcl package of my Debian distribution, so I guess
it should be available.  Once more the question:  Is it really necessary to
use a further interpreter instead of sticking with SQL commands to use
the original problem.

I have to admit that my boss wonders why I'm switching from a working
solution (MS SQL) to so much trouble :-(.  I really hope to convince him
to OpenSource but it's much harder than I expected.

Kind regards
         Andreas.



Re: Re: Argument variables for select

От
Keith Wong
Дата:
Hi Andreas,

I've worked with MS SQL stored procedures before and they are quite 
powerful. Its a shame postgres doesn't have the same
level of features as offered by MS SQL, but apart from this area it is 
still a very good database. Perhaps in the coming
versions we will see more stored procedure features? I'm not sure what your 
application is exactly but there are ways
to work around the features that are missing.

Good luck with convincing your boss :)

Keith.

At 02:28 PM 29/08/2000 +0200, Andreas Tille wrote:
>On Mon, 28 Aug 2000, Yury Don wrote:
>
> > > Create Function VarSelect ( varchar, varchar )
> > >    returns int
> > >    As '
> > >      Declare num int ;
> > >
> > >      Begin
> > >        Select Into num Count(*) From $1 Where $2 ;
> > >        return num;
> > >      End ;
> > >    ' language 'plpgsql' ;
> > >
> > > Could someone please explain who to type the exact syntax so that
> > > I can ship the table to select from as $1 and the condition to select
> > > what as $2?  Or do I have to concatenate a string with the whole
> > > select statement and how to call this string?  In MS SQL server this
> > > could be done with
> > >    Exec ( query )
> > >
> > AFAIK it's impossible with plpgsql, but it's possible in pltcl.
>
>It is really hard to believe that I'm in so very deep trouble with
>PostgreSQL.  It seems to me that stored procedures are far from beeing
>as usefull as I learned them to know in MS SQL server.  Once I try
>to follow one hint I'm standing in frot of the next even harder problem.
>
>
>web=# create function testfunc( )
>web-#   returns int
>web-#   As '
>web'#       spi_exec "SELECT count(*) AS $num FROM testtable"
>web'#
>web'#       return $num ;
>web'#     End; '
>web-#   language 'pltcl' ;
>ERROR:  Unrecognized language specified in a CREATE FUNCTION: 
>'pltcl'.  Recognized languages are sql, C, internal and the created 
>procedural languages.
>
>
>I have installed the pgtcl package of my Debian distribution, so I guess
>it should be available.  Once more the question:  Is it really necessary to
>use a further interpreter instead of sticking with SQL commands to use
>the original problem.
>
>I have to admit that my boss wonders why I'm switching from a working
>solution (MS SQL) to so much trouble :-(.  I really hope to convince him
>to OpenSource but it's much harder than I expected.
>
>Kind regards
>
>           Andreas.



Re: Re: Argument variables for select

От
hlefebvre
Дата:

Keith Wong wrote:
> 
> Hi Andreas,
> 
> I've worked with MS SQL stored procedures before and they are quite
> powerful. Its a shame postgres doesn't have the same
> level of features as offered by MS SQL, 

MS SQL is based on source code of Sybase v5. MS bought this source code
to sybase.
Sybase has stored procedure features that even Oracle v7 (and probably
v8) doesn't have,
as returning one ore more seult set(s).


Re: Re: Argument variables for select

От
Webb Sprague
Дата:
I think you have to run  "createlang pltcl db-foo"
from the command line.

As for your boss, here are three things I can think of
off the top of my head:

1.  All new products take some time to learn.  If you
can't use Postgres perfectly in a week or so, remember
that you probably can't learn to be an Oracle or
MS-SQL DBA in a week or so either.

2.  Postgres is FREE.  NO MONEY.

3.  Postgres integrates very easily into a Unix
environment.

4.  Proprietary software is going the way of the
Do-Do.

Well that's four.  At my job, we are building a
database in Postgres to replace an MS-SQL thing.  My
version takes 12 hours to upload a months worth of
data.  You think that is bad--the SQL Server took 15
DAYS.

Good luck, and sorry for the rant.
W
--- Andreas Tille <tillea@rki.de> wrote:
> On Mon, 28 Aug 2000, Yury Don wrote:
> 
> > > Create Function VarSelect ( varchar, varchar )
> > >    returns int
> > >    As '
> > >      Declare num int ;
> > > 
> > >      Begin
> > >        Select Into num Count(*) From $1 Where $2
> ;
> > >        return num;
> > >      End ;
> > >    ' language 'plpgsql' ;
> > > 
> > > Could someone please explain who to type the
> exact syntax so that
> > > I can ship the table to select from as $1 and
> the condition to select
> > > what as $2?  Or do I have to concatenate a
> string with the whole
> > > select statement and how to call this string? 
> In MS SQL server this
> > > could be done with
> > >    Exec ( query )
> > > 
> > AFAIK it's impossible with plpgsql, but it's
> possible in pltcl.
> 
> It is really hard to believe that I'm in so very
> deep trouble with
> PostgreSQL.  It seems to me that stored procedures
> are far from beeing
> as usefull as I learned them to know in MS SQL
> server.  Once I try
> to follow one hint I'm standing in frot of the next
> even harder problem.
> 
> 
> web=# create function testfunc( )
> web-#   returns int
> web-#   As '
> web'#       spi_exec "SELECT count(*) AS $num FROM
> testtable"
> web'# 
> web'#       return $num ;
> web'#     End; '
> web-#   language 'pltcl' ;
> ERROR:  Unrecognized language specified in a CREATE
> FUNCTION: 'pltcl'.  Recognized languages are sql, C,
> internal and the created procedural languages.
> 
> 
> I have installed the pgtcl package of my Debian
> distribution, so I guess
> it should be available.  Once more the question:  Is
> it really necessary to
> use a further interpreter instead of sticking with
> SQL commands to use
> the original problem.
> 
> I have to admit that my boss wonders why I'm
> switching from a working
> solution (MS SQL) to so much trouble :-(.  I really
> hope to convince him
> to OpenSource but it's much harder than I expected.
> 
> Kind regards
> 
>           Andreas.
> 


__________________________________________________
Do You Yahoo!?
Yahoo! Mail - Free email you can access from anywhere!
http://mail.yahoo.com/