我有一个接受多个参数的存储过程(即 pName、pHeight、pTeam)
我有这样的查询:
SQLQuery VARCHAR2(6000);
TestCursor T_CURSOR;
SQLQuery := 'SELECT ID, Name, Height, Team FROM MyTable WHERE ID IS NOT NULL ';
-- Build the query based on the parameters passed.
IF pName IS NOT NULL
SQLQuery := SQLQuery || 'AND Name LIKE :pName ';
END IF;
IF pHeight IS > 0
SQLQuery := SQLQuery || 'AND Height = :pHeight ';
END IF;
IF pTeam IS NOT NULL
SQLQuery := SQLQuery || 'AND Team LIKE :pTeam ';
END IF;
OPEN TestCursor FOR SQLQuery USING pName, pHeight, pTeam;
如果我执行传递所有参数的过程,它会正常运行。
但是如果我只传递了一个或两个参数,那么程序就会出错:
ORA-01006: bind variable does not exist
如何根据使用参数值的位置有选择地将变量与参数绑定?例如,如果只传递了 pName,那么我将只执行查询:
OPEN TestCursor FOR SQLQuery USING pName;
或者如果 pName 和 pTeam 都通过了,那么:
OPEN TestCursor FOR SQLQuery USING pName, pTeam;
希望有人可以提出更多解决此问题的方法。谢谢。
编辑:我实际上可以使用以下内容:
-- 根据传递的参数构建查询。如果 pName 不是 NULL SQLQuery := SQLQuery || '和名字一样''' || 姓名 || ''''; 万一;
IF pHeight IS > 0
SQLQuery := SQLQuery || 'AND Height = pHeight ';
END IF;
IF pTeam IS NOT NULL
SQLQuery := SQLQuery || 'AND Team LIKE ''' || pTeam || ''' ';
END IF;
OPEN TestCursor FOR SQLQuery;
但这很容易受到 SQL 注入的影响......