2013-08-01 4 views
5

백엔드는 PostgreSQL 서버 9.1입니다.SQL 쿼리에서 매개 변수 이름 가져 오기

AdHoc XML 보고서를 작성하려고합니다. 보고서 파일에는 SQL 쿼리가 포함되며이 쿼리는 모두 SELECT 문으로 시작해야합니다. SQL 쿼리에는 매개 변수가 있습니다. 관련 열의 데이터 유형에 따라 이러한 매개 변수가 사용자에게 제공되어 값을 제공합니다.

rought 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; 

나는 쿼리 문자열에서 열 이름과 매개 변수의 목록을 나중에 문자열 배열과 과정에 넣어 싶습니다.

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

예상 일치 : 나는 다음과 같은 정규 표현식을 사용하는 경우에만 매개 변수와 일치 할 수 있어요

[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 

"@parameter"와 일치하는 방법으로, "=", 및 "바로"?

+0

왜 매개 변수 요소가 자신에게 수고를 아끼지? – Romoku

+0

그래서 SQL 쿼리에서 "@ {variablename}"을 찾고이를 사용자가 원하는 실제 값으로 바꾸시겠습니까? – ganders

+0

안녕하세요, 감사합니다. :) 당신은 SQL과 XML을 혼합하는 것이 꽤 복잡해 질 것이라고 생각하지 않습니까? –

답변

2

나는 그것이 조금 늦게 알고 있지만, 미래 연구 '를 위하여 : 여기

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

확인 this Regex101 fiddle 조심스럽게에 대한 설명을 읽어

내 생각이 정규식은 당신의 목적을 제공 그것의 각 부분.

기본적으로 customer.xxx_yyy 열을 찾은 다음 = @variable 또는 BETWEEN @variable1 AND @variable2 중 하나를 찾습니다.

캡처 그룹 : 당신이 다음 XML을 사용하는 경우

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` 
관련 문제