sábado, 29 de agosto de 2015

Oracle - Procedures (Exemplos)

1
CREATE OR REPLACE PROCEDURE TESTE (COLUNA IN VARCHAR2,TABELA IN VARCHAR2 ) IS
CUR_PESSOA INTEGER;
TEXTO VARCHAR(100);
TEMP NUMBER;
BEGIN
CUR_PESSOA:=DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.parse(CUR_PESSOA,'SELECT  '||COLUNA|| '  FROM  '|| TABELA, DBMS_SQL.V7);
DBMS_SQL.DEFINE_COLUMN (CUR_PESSOA,1,TEXTO,100);
TEMP:=DBMS_SQL.EXECUTE(CUR_PESSOA);
LOOP
IF DBMS_SQL.FETCH_ROWS (CUR_PESSOA)=0
THEN EXIT;
ELSE
DBMS_SQL.COLUMN_VALUE (CUR_PESSOA,1,TEXTO);
DBMS_OUTPUT.PUT_LINE (TEXTO);
END IF;
END LOOP;
DBMS_SQL.CLOSE_CURSOR (CUR_PESSOA);
END TESTE;

2
CREATE OR REPLACE PROCEDURE QUERY (QUERY_IN IN VARCHAR2) IS

CUR_HANDLE INTEGER;
TEMP NUMBER;
BEGIN
  CUR_HANDLE:=DBMS_SQL.OPEN_CURSOR;
  DBMS_SQL.PARSE(CUR_HANDLE,QUERY_IN,DBMS_SQL.V7);
  TEMP:=DBMS_SQL.EXECUTE(CUR_HANDLE);
  DBMS_SQL.CLOSE_CURSOR (CUR_HANDLE);
 
  DBMS_OUTPUT.PUT_LINE (Num. de linha tratadas:' || temp);
 
  end query ;

3
DECLARE
V_TABELA VARCHAR2 (100);
V_COLUNA VARCHAR2 (100);
LINHA VARCHAR2 (200);


out_file UTL_File.File_type;

CURSOR TAB IS

SELECT TABLE_NAME TABELA ,COLUMN_NAME COLUNA FROM ALL_TAB_COLUMNS WHERE COLUMN_NAME LIKE 'CODCOLI%';

BEGIN

 out_file := Utl_File.Fopen ('C:\TEMP','DELCOL.SQL','w');

 FOR REG_TAB IN TAB   LOOP
  V_TABELA := REG_TAB.TABELA;
  V_COLUNA := REG_TAB.COLUNA;
  LINHA := 'DELETE FROM ' ||REG_TAB.TABELA || ' WHERE ' || REG_TAB.COLUNA || '=1;';
  
   UTL_FILE.PUT_LINE (OUT_FILE,LINHA);
  END LOOP;
   Utl_File.FClose (out_file);
  Dbms_Output.Put_Line ('ARQUIVO GERADO COM SUCESSO');

 EXCEPTION
  WHEN UTL_FILE.INVALID_OPERATION THEN
  Dbms_Output.Put_Line ('OPERAÇÃO INVALIDA NO ARQUIVO.');
  Utl_File.FClose (OUT_FILE);
  WHEN UTL_FILE.INVALID_PATH THEN
  Dbms_Output.Put_Line ('DIRETORIO INVÁLIDO');
  Utl_File.FClose (OUT_FILE);
END ;