[英]Dynamic SQL in Teradata Stored Procedure using conditionals
我试图在Teradata中创建一个用户友好的存储过程,该存储过程接受许多变量并根据输入输出结果表。 我在SQL Assistant(提供商版本14.0.0.0)中构建查询。 例如...
通话声明...
CALL spAddressLookup
('?AcctNum', '?LastName', '?FirstName'
,'?Address' , '?City', '?State', '?ZipCode'
,'?Company', '?Email', '?Balance', ReturnCode) ;
创建语句...
CREATE PROCEDURE spAddressLookup(IN pAcctNum VARCHAR(25)
,IN pLastName VARCHAR(100), IN pFirstName VARCHAR(100), IN pAddress VARCHAR(255)
,IN pCity VARCHAR(255), IN pState VARCHAR(100), IN pZipCode VARCHAR(15)
,IN pCompany VARCHAR(255), IN pEmail VARCHAR(255), IN pBalance VARCHAR(10) , OUT ReturnCode CHAR(5))
BEGIN
我想动态构建一个WHERE子句,该子句仅包括用户在其中输入值的那些变量。 我尝试在proc中使用IF条件语句,但SET语句在IF中似乎不能很好地发挥作用。
这就是我正在尝试的...
IF TRIM(pLastName) IS NOT NULL
THEN
SET strWHERE = ' AND ( a.LastName LIKE ''%' || pAcctNum || '%'' )'
END IF;
有任何想法吗?
您可以通过以下方式进行操作:
IF pLastName IS NOT NULL
SET strWHERE = ' AND ( a.LastName LIKE ''%' TRIM(pAcctNum) '%'' )'
END IF
您不需要MSSQL中的THEN,也不需要LIKE中的管道
你可以做一件事。 首先为所有输入参数创建变量,如下所示:
SET lv_pAcctNum = CASE WHEN 'All' IN (''||pAcctNum ||'') THEN 1 ELSE (''||pAcctNum ||'') END;
这里的“全部”表示用户未输入任何内容的整体(根据您的过程设计,也可能为null)。
之后,在动态sql where子句中,使用如下变量:
'WHERE CASE WHEN ''All'' IN ('''||pAcctNum||''') THEN 1 ELSE Route_to_Market END IN ('''||lv_pAcctNum||''' )'
这将实现您的目标
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.