Это:
select create_ts from WORKFLOW_CODES where id =' || p_id
должно возвращать только одну строку (одно значение CREATE_TS
), но возвращает две (или более) строки, поэтому Oracle жалуется на это.Либо примените другое условие (я), чтобы ограничить число возвращаемых строк, либо - если идентификатор должен быть уникальным , убедитесь, что оно действительно (например, удалив дубликаты и применив первичный или уникальный ключ / индекс)к нему).
Чтобы проиллюстрировать то, что я говорю:
SQL> create table workflow_codes(id number, create_ts number);
Table created.
SQL> insert into workflow_codes
2 select 1, 100 from dual union all
3 select 1, 200 from dual union all
4 --
5 select 3, 300 from dual;
3 rows created.
Есть 2 строки для ID = 1, поэтому он выдаст ошибку:
SQL> declare
2 l_create_ts number;
3 begin
4 select create_ts into l_create_ts from workflow_codes where id = 1;
5 end;
6 /
declare
*
ERROR at line 1:
ORA-01422: exact fetch returns more than requested number of rows
ORA-06512: at line 4
Будет в порядке для ID = 3:
SQL> l4
4* select create_ts into l_create_ts from workflow_codes where id = 1;
SQL> c/1/3
4* select create_ts into l_create_ts from workflow_codes where id = 3;
SQL> l
1 declare
2 l_create_ts number;
3 begin
4 select create_ts into l_create_ts from workflow_codes where id = 3;
5* end;
SQL> /
PL/SQL procedure successfully completed.
SQL>