Teradata REGEXP_SPLIT_TO_TABLE 输入参数
Teradata REGEXP_SPLIT_TO_TABLE Input Parameter
我希望能够在 CTE 中定义输入参数,然后在 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
但我想知道是否有办法做一些更像上面第一个例子的事情。
此函数不允许 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
我希望能够在 CTE 中定义输入参数,然后在 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
但我想知道是否有办法做一些更像上面第一个例子的事情。
此函数不允许 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