2017-02-06 7 views
0

Простой таблицы:PL/SQL, где положение с помощью IN() для массива

CREATE TABLE Users (
    PersonID int, 
    Name varchar(255), 
    Salary int 
); 

Я должен написать курсор, который будет использоваться в процедуре. Предполагается, что курсор должен возвращать записи, чье поле Name принадлежит массиву.

CREATE OR REPLACE TYPE namesArray AS TABLE OF int; 
/

CURSOR luckyPeople(names IN namesArray) IS 
select PersonID from Users 
where Name IN(namesArray); //how this can be solved? 

Как использовать массив в предложении select?

благодаря

ответ

2

Одна из вашей проблемы в том, что вы определяете тип namesArray как Int, но вы запрашиваете столбец имя, которое VARCHAR. Другая проблема заключается в том, что вы должны изменить свою позицию where и параметр параметра курсора.

Если вы хотите, чтобы проверить имя столбца, вы должны попробовать код ниже:

CREATE OR REPLACE TYPE namesArray AS TABLE OF varchar(255); 

/

CURSOR luckyPeople(names namesArray) IS 
select PersonID from Users 
where Name IN(select Name from table(namesArray)); 
+0

Внутри vs varchar была ошибка копирования. Предоставлено решение. спасибо –

1

Конечно

CREATE OR REPLACE TYPE namesArray AS TABLE OF varchar(255); 

и

CURSOR luckyPeople(names IN namesArray) IS 
select PersonID from Users, table(names) tnames 
where Name = tnames.column_value;