domingo, 4 de maio de 2008

“DBMS_SQL package” & “EXECUTE IMMEDIATE” - PL/SQL

“DBMS_SQL package” & “EXECUTE IMMEDIATE”

Aproveitando o gancho deixado pelo comentário do Malta(no post anterior), acho que cabe um exemplo mostrando a aplicação das pls da package “DBMS_SQL” na abordagem de SQL dinâmico no Oracle.

Usando a Package

CREATE OR REPALCE PROCEDURE insert_ZNtable (
ZN_ID NUMBER,
NameZN VARCHAR2) IS
ZNcursor_Manipulador INTEGER;
DynSQLZn VARCHAR2(280);
rows_processed BINARY_INTEGER;

BEGIN
DynSQLZn := 'INSERT INTO MyTableZN VALUES (:ZN_ID, :NameZN)';

-- Ao Abrir o cursor atribui valor para o "Handle" , o cursor ID.
ZNcursor_Manipulador := dbms_sql.open_cursor;

-- efetuando o parse
dbms_sql.parse(ZNcursor_Manipulador, DynSQLZn,
dbms_sql.native);

-- fazando o BIND_VARIABLE
dbms_sql.bind_variable
(ZNcursor_Manipulador, ':ZN_ID', ZN_ID);
dbms_sql.bind_variable
(ZNcursor_Manipulador, ':NameZN', NameZN);

-- Executando o cursor
rows_processed :=
dbms_sql.execute(ZNcursor_Manipulador);

-- Fechando o cursor
dbms_sql.close_cursor(ZNcursor_Manipulador);

END;


Usando SQL dinâmico nativo

CREATE PROCEDURE insert_ZNtableExecuteImm(
ZN_ID NUMBER,
NameZN VARCHAR2) IS
DynSQLZn VARCHAR2(280);

BEGIN
DynSQLZn := 'INSERT INTO MyTableZN VALUES (:ZN_ID, :NameZN)';
-- parse e execução no mesmo comando
EXECUTE IMMEDIATE DynSQLZn
USING ZN_ID, NameZN;

END;

Nenhum comentário:

Postar um comentário