“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