DECLARE -- оператор для создания таблицы vCreateTable VARCHAR2(200) := 'CREATE TABLE demo_tbl (ID NUMBER(3), NAME VARCHAR2(50))'; -- оператор для удаления таблицы vDropTable VARCHAR2(200) := 'DROP TABLE demo_tbl'; -- оператор для вставки в таблицу vInsertTable VARCHAR2(200) := 'INSERT INTO demo_tbl(ID, NAME) VALUES(:id, :name)'; -- оператор для удаления строки из таблицы vDeleteTable VARCHAR2(200) := 'DELETE FROM demo_tbl WHERE ID=:id'; -- оператор для считывания строк из таблицы vSelectTable VARCHAR2(200) := 'SELECT ID, NAME FROM demo_tbl WHERE ID BETWEEN :id_l AND :id_h'; vResult INTEGER; -- выходные переменные для оператора SELECT vId NUMBER(3); vName VARCHAR2(50); -- объявляем курсорную переменную TYPE ref_cur IS REF CURSOR; c ref_cur; BEGIN -- создадим таблицу EXECUTE IMMEDIATE vCreateTable; -- вставим данные в таблицу FOR vId IN 1..5 LOOP EXECUTE IMMEDIATE vInsertTable USING vId, 'Name ╪'||vId ; END LOOP; -- зафиксируем изменения COMMIT; -- удалим строку с ID=3 из таблицы EXECUTE IMMEDIATE vDeleteTable USING 3; -- зафиксируем изменения COMMIT; -- считаем строки с ID=2,3,5 -- здесь используются фактические значения, -- но можно передавать и переменные, например USING v1, v2 OPEN c FOR vSelectTable USING 2, 5; LOOP FETCH c INTO vId, vName; EXIT WHEN c%NOTFOUND; -- распечатаем полученные данные DBMS_OUTPUT.PUT_LINE(vId||' '||vName); END LOOP; CLOSE c; -- если запрос возврашает не более одной строки можно записать так -- возврашается строка с ID=4, так как сторока с ID=3 удалена EXECUTE IMMEDIATE vSelectTable INTO vId, vName USING 3, 4; -- распечатаем полученные данные DBMS_OUTPUT.PUT_LINE('-------------------'); DBMS_OUTPUT.PUT_LINE(vId||' '||vName); -- удалим таблицу EXECUTE IMMEDIATE vDropTable; END;