Quando preciamos criar uma estrutura DDL ou DML em tempo de execução, usamos o SQL Dinâmico.
Para utilizar a SQL Dinâmica na PL/SQL pode-se usar duas técnicas, a BDMS_SQL e a SQL Dinâmica nativa.
EX SQL Dinâmica Nativa:
declare
v_sql varchar2(300);
v_plsql varchar2(300);
begin
execute immediate 'create table teste_sql_din(coluna varchar2(10))';
for reg in 1..50 loop
v_sql:= 'insert into teste_sql_din
values ('||reg||')';
EXECUTE IMMEDIATE v_sql;
end loop;
v_plsql:= 'begin
for reg in (select * from teste_sql_din) loop
dbms_output.put_line(reg.coluna);
end loop;
end;';
EXECUTE IMMEDIATE v_plsql;
EXECUTE IMMEDIATE 'drop table teste_sql_din';
end;
-----------------------------------------------------------------
Criar uma tabela através de uma procedure:
create or replace procedure prc_create_table
(p_nome_tabela varchar2
,p_colunas varchar2) is
begin
EXECUTE IMMEDIATE 'create table '||p_nome_tabela||' (' ||p_colunas||' )';
end;
-- Chamando a procedure
begin
prc_create_table('tabela_teste','coluna1 number , coluna2 varchar2(10)');
end;
-----------------------------------------------------------------
Deletar linhas de uma tabela:
Create or replace function fnc_deletar_linhas(p_tabela varchar2) return number is
begin
EXECUTE IMMEDIATE 'delete '||p_tabela;
return sql%rowcount;
end;
-- Chamando a função
begin
dbms_output.put_line(fnc_deletar_linhas('tabela_teste')||' linhas deletadas');
end;
----------------------------------------------------------------
Inserir linhas na tabela Regions(2 colunas)
create or replace procedure prc_insere_linhas(p_tabela varchar2
,p_coluna1 number
,p_coluna2 varchar2) is
begin
EXECUTE IMMEDIATE 'insert into ' ||p_tabela|| ' values (:1, :2)' using p_coluna1, p_coluna2;
end;
-- chamando a procedure
begin
prc_insere_linhas('regions',5, 'teste');
end;
Inserir linhas na tabela Regions(2 colunas)
create or replace procedure prc_insere_linhas(p_tabela varchar2
,p_coluna1 number
,p_coluna2 varchar2) is
begin
EXECUTE IMMEDIATE 'insert into ' ||p_tabela|| ' values (:1, :2)' using p_coluna1, p_coluna2;
end;
-- chamando a procedure
begin
prc_insere_linhas('regions',5, 'teste');
end;
Nenhum comentário:
Postar um comentário