【发布时间】:2018-05-05 08:51:29
【问题描述】:
我正在尝试在 Teradata 中创建一个用户友好的存储过程,它接受多个变量并根据输入输出结果表。我正在 SQL 助手(提供程序版本 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;
有什么想法吗?
【问题讨论】:
-
你的意思是
doesn't seem to play well inside the IF.有什么错误吗?还是没有输入if语句?你有没有放一些调试行来知道你的代码去哪里了? -
您想将此添加到现有的
strWHERE吗?然后你需要像这样编码SET strWHERE = strWHERE || ' AND ( a.LastName LIKE ''%' || pAcctNum || '%'' )' -
正如@dnoeth 所说,但初始化
SET strWHERE = 'WHERE 1=1 ',以便您可以连接所有AND ...
标签: sql stored-procedures teradata dynamic-sql