Teradata REGEXP_SPLIT_TO_TABLE Input Parameter

邮差的信 提交于 2019-12-13 07:04:21

问题


I'd like to be able to define an input parameter in a CTE and then use it within a REGEXP_SPLIT_TO_TABLE function, like so:

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

However this yields the following error:

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

Putting the parameter right in the function works, as below:

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

But I'm wondering if there's a way to do something more like the first example above.


回答1:


This function doesn't allow JOIN-syntax, but you can do old-style joins:

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

In fact you don't need the join at all:

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

And as you don't use a regular expression you might also switch to 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


来源:https://stackoverflow.com/questions/39709105/teradata-regexp-split-to-table-input-parameter

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!