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

 
BlogBlogs.Com.Br