![](/user_photo/528_5NJmi.jpg)
- •Создание пакетов
- •3 Procedure reset_comm
- •4 (V_comm in number);
- •5 End comm_package;
- •2 Function validate_comm
- •V_mgr in emp.Mgr%type,
- •V_empno number;
- •Index by binary integer;
- •2 Emp_table emp_package.Emp_table type;
- •Index by binary_integer;
- •Into g_comm
- •Interest real; -- общая переменная
- •Interest number
- •Into interest --процедуры
- •V_message varchar2(50);
- •V_proc_name || ‘ end;’;
- •V_cursor integer;
- •V_return integer;
- •V_ename emp.Ename%type;
- •V_sal emp.Sal%type;
- •V_column_value varchar(30) ;
- •Var v_out1 varchar2(10);
- •Var v_out2 number;
- •Контрольные вопросы.
V_proc_name || ‘ end;’;
V_cursor integer;
V_return integer;
BEGIN
v_cursor := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(v_cursor, v_sql_statement,
DBMS_SQL.NATIVE);
v_return := DBMS_SQL.EXECUTE(v_cursor);
DBMS_SQL.CLOSE_CURSOR(v_cursor);
END exec_procedure;
Теперь, если была посылка сообщения по программному каналу:
SQL> EXECUTE send_message('Testing dynamic SQL');
То можно использовать динамический SQLдля выполнения процедуры приёма сообщения:
SQL> EXECUTE exec_procedure('receive_message');
Testing dynamic SQL
Функции пакета DBMS_SQL
Процедура или функция |
Описание | |
OPEN_CURSOR |
Открывает новый курсор и возвращает идентификатор (ID) курсора. | |
PARSE |
Производит разбор команд DDLилиDML: проверяет его синтаксис и связывает с открытым курсором. ОператорыDDLвыполняются сразу после анализа. | |
BIND_VARIABLE |
Связывает заданное значение с переменной, имя которой содержится в разобранном операторе в заданном курсоре. | |
DEFINE_COLUMN |
Определяет поля, выбираемые из курсора, их позицию и размерность (только для команды SELECT). | |
EXECUTE |
Выполняет SQL-команду и возвращает количество обработанных строк. | |
FETCH_ROWS |
Извлекает строку из заданного курсора. Если строк больше одной, функция вызывается в цикле. | |
EXECUTE_AND_FETCH |
Выполняет команду EXECUTEи извлекает строку для заданного курсора. Эта функция более эффективна, чем командыEXECUTEиFETCHдля одной итерации. | |
COLUMN_VALUE |
Возвращает значение поля в заданной позиции заданного курсора (допустимые типы данных - NUMBER,DATE,VARCHAR2иMLSLABEL). Используется для доступа к данным, выбранным с помощью функцииFETCH_ROWS. | |
COLUMN_VALUE_CHAR COLUMN_VALUE_RAW COLUMN_VALUE_ROWID |
Возвращает такую же информацию для CHAR, дляRAWили дляROWID | |
VARIABLE_VALUE |
Возвращает значение названной переменной для заданного курсора (допустимые типы данных - NUMBER,DATE,VARCHAR2иMLSLABEL). Используется для выборки значений, присваиваемых выходным переменным процедур PL/SQL, когда они выполняются. | |
VARIABLE_VALUE_CHAR VARIABLE_VALUE_RAW VARIABLE_VALUE_ROWID |
Возвращает такую же информацию для CHAR Возвращает такую же информацию для RAW Возвращает такую же информацию для ROWID | |
IS_OPEN |
Проверяет, открыт ли заданный курсор. | |
CLOSE_CURSOR |
Закрывает заданный курсор. | |
Функции обнаружения ошибок | ||
LAST_ERROR_POSITION |
Возвращает символьную позицию, в которой обнаружена ошибка, в виде смещения в байтах от начала текста оператора SQL (0 -это первый символ). | |
LAST_ROW_COUNT |
Возвращает нарастающий счетчик выбранных строк. | |
LAST_ROWID |
Возвращает адрес (ROWID) последней выбранной строки. | |
LAST_SQL_FUNCTION_CODE |
Возвращает код функции SQL для команды. Эта функция должны быть выполнена сразу же после команды SQL. В противном случае значение, возвращенное функцией, будет некорректным. |
Пример: SQL-команда хранится в виде символьной строки и анализируется с помощьюDBMS_SQL.
CREATE OR REPLACE PROCEDURE exec_select
(p_table_name IN VARCHAR2,
p_column_name IN VARCHAR2,
p_column_value IN VARCHAR2,
p_name OUT VARCHAR2,
p_salary OUT NUMBER)
IS
mycursor INTEGER;
myretun INTEGER;
-- Локальные переменные