2013-08-01 16 views
5

Serwer zaplecza jest serwerem PostgreSQL 9.1.Uzyskaj nazwy parametrów z zapytania SQL

Próbuję tworzyć raporty XML AdHoc. Pliki raportów będą zawierały kwerendy SQL, z których wszystkie muszą zaczynać się od instrukcji SELECT. Zapytania SQL będą miały parametry. W zależności od typu danych skojarzonych kolumn, parametry te zostaną odpowiednio przedstawione użytkownikowi w celu podania wartości.

rought zapytań SQL:

SELECT * FROM customers 
WHERE 
(
    [email protected]_code AND [email protected] 
    AND customers.type= 
    (
     SELECT type from types 
     WHERE [email protected]_code 
     AND types.is_active = @type_is_active 
    ) 
    AND customers.account_open_date BETWEEN @start_date AND @end_date 
) 
OR customers.flagged = @flagged; 

chcę uzyskać listę nazw kolumn i parametrów z łańcucha zapytania i umieścić je w tablicy ciągów i proces później.

jestem w stanie dopasować tylko te parametry za pomocą następującego wyrażenia regularnego:

@(?)(?<parameter>\w+) 

Oczekiwane meczy:

[email protected]_code 
[email protected] 
[email protected]_code 
types.is_active = @type_is_active 
customers.account_open_date BETWEEN @start_date AND @end_date 
customers.flagged = @flagged 

Jak dopasować "@Parameter", "=", a "BETWEEN" od razu?

+0

Jeśli używasz XML to dlaczego nie mają elementu parametry i Części sobie kłopotu? – Romoku

+0

Chcesz znaleźć "@ {variablename}" w zapytaniu sql i zastąpić ją rzeczywistą wartością, jakiej chce użytkownik? – ganders

+0

Hej, dzięki. :) Nie sądzisz, że mieszanie SQL i XML może być dość skomplikowane? –

Odpowiedz

2

Wiem, że to trochę późno, ale dla przyszłych badań:

myślę, że to Regex służy swój cel:

(\w+\.\w+(?:\s?\=\s?\@\w+|\sBETWEEN\s\@\w+\sAND\s\@\w+)) 

Sprawdź this Regex101 fiddle tutaj i czytaj uważnie wyjaśnienia każda jego część.

Zasadniczo najpierw szuka swoich kolumn customer.xxx_yyy, a następnie albo dla = @variable lub BETWEEN @variable1 AND @variable2.

Przechwycone grupy:

MATCH 1 
1. [37-75] 
`[email protected]_code` 

MATCH 2 
1. [80-108]  
`[email protected]` 

MATCH 3 
1. [184-205] 
`[email protected]_code` 

MATCH 4 
1. [218-251] 
`types.is_active = @type_is_active` 

MATCH 5 
1. [266-327] 
`customers.account_open_date BETWEEN @start_date AND @end_date` 

MATCH 6 
1. [333-361] 
`customers.flagged = @flagged` 
Powiązane problemy