2016-09-26 291 views
0

我想能夠在CTE定義的輸入參數,然後REGEXP_SPLIT_TO_TABLE函數內使用,像這樣:Teradata的REGEXP_SPLIT_TO_TABLE輸入參數

WITH PARAMS (INPUT_PARAMS) AS 
(SELECT 
    '?InputParams' AS INPUT_PARAMS 
) 
SELECT 
    TEST_TABLE.SPLIT_PARAMS 
FROM 
    TABLE (REGEXP_SPLIT_TO_TABLE(1, PARAMS.INPUT_PARAMS, '\|', 'i') 
     RETURNS (outkey INTEGER, TOKENNUM INTEGER, SPLIT_PARAMS VARCHAR(8192) CHARACTER SET UNICODE)) AS TEST_TABLE 
    CROSS JOIN PARAMS 

然而,這產生以下錯誤:

SELECT Failed. [3706] Syntax error: Joined table is not supported in conjuction with table operators or table function invoked with variable input argument.

把參數就在功能的工作原理,如下圖所示:

SELECT 
    TEST_TABLE.SPLIT_PARAMS 
FROM 
    TABLE (REGEXP_SPLIT_TO_TABLE(1, '?InputParams', '\|', 'i') -- 
     RETURNS (outkey INTEGER, TOKENNUM INTEGER, SPLIT_PARAMS VARCHAR(8192) CHARACTER SET UNICODE)) AS TEST_TABLE 

但我想知道是否有辦法做更像上面的第一個例子。

回答

2

此功能不允許JOIN語法,但你可以做舊風格的加入:

WITH PARAMS (INPUT_PARAMS) AS 
(SELECT 
    '?InputParams' AS INPUT_PARAMS 
) 
SELECT 
    TEST_TABLE.SPLIT_PARAMS 
FROM 
    TABLE (REGEXP_SPLIT_TO_TABLE(1, PARAMS.INPUT_PARAMS, '\|', 'i') 
     RETURNS (outkey INTEGER, TOKENNUM INTEGER, SPLIT_PARAMS VARCHAR(8192) CHARACTER SET UNICODE)) AS TEST_TABLE 
    ,PARAMS 

事實上,你並不需要加入所有:

WITH PARAMS (INPUT_PARAMS) AS 
(SELECT 
    '?InputParams' AS INPUT_PARAMS 
) 
SELECT 
    TEST_TABLE.SPLIT_PARAMS 
FROM 
    TABLE (REGEXP_SPLIT_TO_TABLE(1, PARAMS.INPUT_PARAMS, '\|', 'i') 
     RETURNS (outkey INTEGER, TOKENNUM INTEGER, SPLIT_PARAMS VARCHAR(8192) CHARACTER SET UNICODE)) AS TEST_TABLE 

而且因爲你不使用正則表達式,所以你也可以切換到STRTOK_SPLIT_TO_TABLE

WITH PARAMS (INPUT_PARAMS) AS 
(SELECT 
    '?InputParams' AS INPUT_PARAMS 
) 
SELECT 
    TEST_TABLE.SPLIT_PARAMS 
FROM 
    TABLE (StrTok_Split_To_Table(1, PARAMS.INPUT_PARAMS, '\|') 
     RETURNS (outkey INTEGER, TOKENNUM INTEGER, SPLIT_PARAMS VARCHAR(8192) CHARACTER SET Unicode)) AS TEST_TABLE 
+0

答案#3很好。我以爲我應該改用STROK,但這意味着試圖使用TD文檔,所以我放棄了一段時間後:)。最有用的和意想不到的部分是「實際上你根本不需要加入。」這意味着我可以將未加入的分割放入我的CTE中,然後在我的真實代碼中將WITH加入其他表中。一個問題:爲什麼不需要連接?這似乎是因爲我指的是需要加入到TABLE函數中的PARAMS。不是我在抱怨...再次感謝! –

+0

@DougGlancy:不要問我爲什麼語法是這樣的(文檔非常糟糕)。這是一種相關聯接,與標準SQL的*橫向聯接*類似。 – dnoeth

+0

嗯,我只是很高興它的工作原理,我們有你補充文件。再次感謝Dieter。 –