У меня есть следующий запрос, который возвращает 1 при выполнении:
SELECT COUNT(*) FROM TABLE_NAME WHERE Column1='x' AND Column2='y';
В моем блоке PL/SQL мне нужно оценить приведенное выше условие, чтобы выполнить бизнес-логику. Ниже приведен упрощенный вариант:
DECLARE
column1 VARCHAR(20):='x';
column2 VARCHAR(20):='y';
rows_no NUMBER :=0;
sql_query VARCHAR2(200) :='SELECT COUNT(*) FROM TABLE_NAME WHERE Column1=:1 AND Column2=:2';
BEGIN
EXECUTE IMMEDIATE sql_query INTO rows_no USING column1, column2;
DBMS_OUTPUT.PUT_LINE('ROWS NO: '|| rows_no);
END;
Результатом выполнения блока PL/SQL является 0, что отличается от результата при выполнении запроса, который равен 1. Я думаю, что придерживаюсь правил привязки параметра для выбора запроса в PL/SQL. Буду признателен за любую помощь или руководство.
С уважением, Рандо.
P.S
Когда я делаю модификацию ниже:
DECLARE
column1 VARCHAR(20):='x';
column2 VARCHAR(20):='y';
rows_no NUMBER :=0;
sql_query VARCHAR2(200) :='SELECT COUNT(*) FROM TABLE_NAME WHERE Column1=''x'' AND Column2=''y''';
BEGIN
EXECUTE IMMEDIATE sql_query INTO rows_no;
DBMS_OUTPUT.PUT_LINE('ROWS NO: '|| rows_no);
END;
Результат: 1
У меня есть цикл, который читает файл excel и вставляет его в таблицу базы данных (Table_name). Приведенный выше результат необходим для предотвращения вставки повторяющихся записей. Коммит выдается в конце процедуры.
Это означает, что если запись добавляется из процедуры, она остается незафиксированной до завершения процедуры.
Я сомневаюсь, что это проблема, незафиксированные вставки недоступны из других соединений, но в текущем соединении они должны быть доступны. Ниже приведена вся упрощенная логика блока plsql:
DECLARE;
--declaration variables
BEGIN
LOOP
-- fetching information from excel file
EXECUTE IMMEDIATE sql_query INTO rows_no;
DBMS_OUTPUT.PUT_LINE('ROWS NO: '|| rows_no);
IF rows_no=0 THEN
-- insert the information read from excel in database table
rows_inserted:=rows_inserted+1;
END IF;
END LOOP;
IF rows_inserted>0 THEN
COMMIT;
DBMS_OUTPUT.PUT_LINE('ROWS INSERTED: '||rows_inserted);
ELSE
DBMS_OUTPUT.PUT_LINE('No rows were inserted');
END IF;
END
COMMIT
проверили данные?) - person MT0   schedule 26.11.2020