ORA-01722: недопустимый номер для явного курсора - PullRequest
0 голосов
/ 29 мая 2020

Я пытаюсь выполнить эту процедуру:

CREATE OR REPLACE PROCEDURE ALLPOSITIONS
IS
CURSOR C IS
SELECT *
FROM TRKEMPLOYEE
ORDER BY SUBSTR(NAME, ' ');
BEGIN


FOR TRKEMP IN C
LOOP
DBMS_OUTPUT.PUT_LINE('testing');
/*
DBMS_OUTPUT.PUT_LINE(TRIM(TRKEMP.NAME));

DBMS_OUTPUT.PUT_LINE(TRIM(TRKEMP.NAME) || ':' || CHR(10)|| TRKEMP.DOB);
*/
END LOOP;


END ALLPOSITIONS;
/

, но он продолжает выдавать мне ORA-01722: неверный номер, что происходит?

1 Ответ

1 голос
/ 29 мая 2020

В вашем коде:

ORDER BY SUBSTR(NAME, ' ')

Функция SUBSTR имеет подпись:

SUBSTR( string_value, start_position, [substring_length] )

Итак, она ожидает число в секундах аргумент; ' ' не является числом.

Если ваш столбец NAME содержит firstname lastname и вы пытаетесь указать ORDER BY фамилию, используйте функцию INSTR, чтобы найти позицию первого пробела символ:

ORDER BY SUBSTR( NAME, INSTR( NAME, ' ' ) + 1 )
...