我想在Where in
子句
以下是我尝试的内容
首先创建数组类型
create or replace type p_emp_arr as table of number
功能
create or replace
FUNCTION getEmployee_func ( empId_arr IN p_emp_arr)
RETURN number IS
total number(2) := 0;
BEGIN
IF(empId_arr is null)
THEN
empIdClause := '';
ELSE
empIdClause := 'AND Employee.empId in (select column_value from table('||empId_arr||'))';
END IF;
....
RETURN total;
END;
但是给出错误
Error(17,23): PLS-00306: wrong number or types of arguments in call to '||'
答案 0 :(得分:1)
错误是因为CONCAT (||)
运算符只接受标量变量(字符串/数字),因此无法将数组传递给它。
您需要将其作为动态PL / SQL块执行。
如果你想动态绑定数组,请尝试这样的事情
适当地使用IN
和OUT
关键字绑定变量。
在您的匿名块字符串中,使用colon (:)
EXECUTE IMMEDIATE '
BEGIN
SELECT
COLUM1,COLUMN2..
INTO
:VAR1, :VAR2..
FROM .... WHERE...
AND Employee.empId in (select column_value from table(:empId_arr));
END;
'
USING OUT VAR1, OUT VAR2... IN empId_arr;
它也可以是简单的,
OPEN EMP_CURSOR FOR
'SELECT * FROM Employee
where empId in SELECT COLUMN_VALUE FROM TABLE(:empId_arr)'
USING empId_arr ;
如果将输出作为光标;
AS Wernfried提到..使用MEMBER OF
运算符。
OPEN EMP_CURSOR FOR
'SELECT * FROM Employee
where empId member of :empId_arr'
USING empId_arr ;