[Date Prev][Date Next][Thread Prev][Thread Next]
[Author Index] [Date Index] [Thread Index]
[SQR-USERS Info] [SQRUG Home Page]

Re: Procedure: Selection from different schemas



Joy
Thanks for your suggestion.
I have tried your suggestion.

The problem is that the table has different fields in the two schemas and some
fields are only in one schema.
I had tried moving a null value into the dynamic variable for the case where
the schema did not have the particular field – This didn't work.

However,  your suggestion broke my mental block and I can see a resolution...
I can move a duplicate field into the dynamic variable for the case where the
schema does not contain the field which is only in the other schema.

I have every confidence that the solution will work...

Many thanks indeed.

Andrew

_____________________________________________
Quoting Joy Hoyte <JoyHoyte_sqr@HOTMAIL.COM>:

> Andrew,
>
> The If statement around the column name won't work because in dealing
> with
> the Select statement, SQR first pulls out the SQL and builds a result
> set,
> then goes back to process that result set row by row according to the
> SQR
> commands within the Begin-Select.  So at the time it is actually
> interpreting the SQL, it is not yet looking at any SQR commands that may
> be
> within the begin-select.
>
> To achieve what you are wanting to do,  you could set up a begin-select
> with
> dynamic column variables.  In the same way that you use a variable for
> the
> schema name, you can use variables for the column names.  Something like
> the
> following example:
>
> begin-select
> [$column1]  &col1=number
> [$column2]  &col2=char
> etc.
>     sqr commands
>
> from [$schemaName].tbName
> end-select
>
> You can have as many column variables as you wish, but note that you
> have to
> provide an &alias as well as the datatype for each variable.
>
> Then BEFORE you call the procedure containing this select statement, you
> can
> do the if-logic to assign the appropriate column names to the
> variables
> depending on the schema that is in force.
>
> E.g.
>
> if $schemaName = '{THISSCHEMA}'
>     move 'tbName.fieldName' to $column1
>     move 'xyz' to $column2
>     etc.
> end-if
>
> Hope that helps.
>
> Joy Hoyte
>
> ----- Original Message -----
> From: "Andrew Rivers" <andrew.rivers@CWCOM.NET>
> To: <SQR-USERS@list.iex.net>
> Sent: Friday, January 18, 2002 10:13 AM
> Subject: Procedure: Selection from different schemas
>
>
> > Hi
> > I need to run an sqr program at different times against different
> schemas
> and
> > select fields which may be in one schema but not in another schema,
> for
> example:
> >
> > begin-procedure getData local
> > ...
> > begin-select
> > ...
> >     !select this field which only occurs in this $schemaName
> >     if $schemaName = {THISSCHEMA}
> > tbName.fieldName           &tbNameFieldName
> >     end-if
> > ...
> > from $schemaName.tbName
> > ...
> > end-select
> > ...
> > end-procedure
> >
> > The compiler sees the field tbName.fieldName and throws an exception
> ignoring
> > the condition.
> >
> > The work around is to select the procedure depending on which schema
> is
> > connected:
> >
> > ...
> > if $schemaName = {THISSCHEMA}
> >       do getDataForSchema1
> > else
> >       do getDataForSchema2
> > end-if
> > ...
> >
> > Where the SQL selection in each of the procedures
> > (getDataForSchema1/getDataForSchema) is specific to the fields in
> the
> different
> > schemas.
> > This is not a good workaround since two very similar procedure need to
> be
> > maintained.
> >
> > I have tried various solutions to pass without any success.
> > If anyone has a solution/suggestion, I would be pleased to know.
> >
> > Many thanks.
> >
> > Andrew
> >
>