Search Postgresql Archives

Re: evaluating expressions stored in table

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





On Tue, Dec 18, 2012 at 10:03 AM, Little, Douglas <DOUGLAS.LITTLE@xxxxxxxxxx> wrote:

Hi,

 

I need to evaluate an _expression_ that I have stored in a table,  and not sure how to force evaluation of a column value.

 

Some background.  This is a generic testing application that we’re using to test source to target ETL’s.

The specifics of the test _expression_ depend on the actual tables involved.   Typicallly it’s been  table_a.col_a = table_b.col_b   but now they want to use inequality or other operators.

The tester’s define the test criteria in a table,  then we use that criteria to actually score the runtime results.

 

In my design I have 3 tables.

Test – stores the test definition

Testrun – stores the actual sql for a specific execution of a test

Testscore – stores the actual values of the source and target values.   The scores are stored in different rows, with a common name to allow them to be matched in the query.

 

The pass/fail query looks something like this

 

Update  testscore

Set metricstatus = case when table_a.col_a = table_b.col_b    then ‘PASS’   else ‘FAIL’ end

..

Where testrunid=x

 

I want to replace the table_a.col_a = table_b.col_b   with the _expression_ stored in the test table and evaluate.

 

I’m thinking – it’s dynamic sql, so I need to build the statement and then evaluate using a function.

 

Anybody have any comments?


probably you need a pl/pgsql function which wraps your argument table, builds the query, and invokes the query with EXECUTE.

beware sql injection.

merlin

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux