“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