я получаю следующее сообщение об ошибке при компиляции этой функции:Oracle ошибка функции компиляции PLS-00103 (Встречающиеся символ "SELECT" ...)
ошибки компиляции для МЕТОДИКА INV.USP_MSC_MODIFICA_ESTADO
Error: PLS-00103: Encountered the symbol "SELECT" when expecting one of the following:(- + case mod new not null <an identifier> <a double-quoted delimited-identifier> <a bind variable> continue avg count current exists max min prior sql stddev sum variance execute forall merge time timestamp interval date <a string literal with character set specification> <a number> <a single-quoted SQL string> pipe <an alternatively-quoted string literal with character set specification> <an alternat Line: 14 Text: IF SELECT TRUNC((SYSDATE) -TO_DATE(@FCH_GRABACION, 'DD/MM/YYYY HH24:MI:SS')) From DUAL=1 THEN
CREATE OR REPLACE PROCEDURE "USP_MSC_MODIFICA_ESTADO" AS
BEGIN
DECLARE
CURSOR reservar IS
SELECT
id_reserva,
fch_grabacion
FROM tb_msc_reserva
WHERE to_date(to_char(fch_grabacion, 'dd/mm/yyyy')) = to_date(to_char(SYSDATE, 'dd/mm/yyyy')) - 1;
id_reserva VARCHAR2(50);
fch_grabacion DATE;
BEGIN
OPEN reservar;
FETCH reservar INTO id_reserva, fch_grabacion;
IF SELECT TRUNC((SYSDATE) - TO_DATE(@fch_grabacion, 'DD/MM/YYYY HH24:MI:SS')) FROM dual=1 THEN
UPDATE inv.tb_msc_reserva t
SET t.flg_estado = 'C'
WHERE id_reserva = @id_reserva;
COMMIT;
END if;
WHILE (@@fetch_status = 0)
CLOSE RESERVAR;
END;
Вау, это просто большой беспорядок. Сожалею. Это не sql-сервер, поэтому вы можете потратить некоторое время на чтение [pl/sql documenation] (https://docs.oracle.com/database/121/LNPLS/toc.htm) – OldProgrammer
Если 'fch_grabacion' является 'date', почему вы делаете' to_char', а затем 'to_date' на нем? Почему вы делаете то же самое в 'sysdate'?Если ваш запрос уже проверяет, что часть дня 'fch_grabacion' на 1 день позже, чем дневная часть' sysdate', почему отдельный оператор 'IF' снова проверяет его? Если вы хотите это сделать, вам не нужно 'select', но само утверждение бессмысленно. Вы не используете '@' для префикса локальных переменных. Вы не хотите использовать имена для локальных переменных, которые конфликтуют с именами столбцов. И вы можете делать все в одном «обновлении» без цикла. –