Você está na página 1de 17

Administrao de Banco de Dados Oracle ###### TABELA DE INDICES dba_ind_columns ######## Processo trace de um determinado Usurio EXECUTE DBMS_SYSTEM.

SET_SQL_TRACE_IN_SESSION(SID,SERIAL#,TRUE); Arquivo contendo create controlfile no trace file ALTER DATABASE BACKUP CONTROLFILE TO TRACE; Atualizar estatsticas do schema Para atualizar as estatsticas de todo um schema (tables, indexes e clusters) podemos executar o pacote abaixo. EXECUTE DBMS_UTILITY.ANALYZE_SCHEMA(' ','COMPUTE'); ######## Combinar espaos de Tabelas (coalesce) Para que o processo SMON periodicamente desperte e efetue o coalesce nas tablespaces do Oracle, as mesmas devem possuir PCTINCREASE igual a 1. Caso contrrio podemos efetuar a combinao manualmente com o comando: ALTER TABLESPACE COALESCE; ######## Compilar objetos invlidos do schema Para compilar os objetos de todo um schema (procedures, functions e packages) podemos executar o pacote abaixo. EXECUTE DBMS_UTILITY.COMPILE_SCHEMA(' '); ######## Conteno de Latch (Lock de Memria) COL C1 COL C2 COL C3 SELECT FORMAT a25 HEADING 'Tipo de Latch' FORMAT 999.99999 HEADING 'Misses/Gets (%)' FORMAT 999.99999 HEADING 'Immediate Misses/Immediate Gets (%)' N.NAME C1, MISSES*100/(gets+1) pct_miss C2, IMMEDIATE_MISSES*100/(immediate_gets+1) C3 FROM V$LATCHNAME N, V$LATCH L WHERE N.LATCH# = L.LATCH# AND N.NAME IN ('redo allocation','redo copy'); ######## Conteno do Redo Log Buffer SELECT VALUE FROM V$SYSSTAT WHERE NAME = 'redo log space waittime'; ######## DML's sendo executadas no momento

COL C1 FORMAT A10 HEADING 'Usuario' COL C2 HEADING 'Texto SQL' SELECT S.USERNAME C1, T.SQL_TEXT FROM V$SESSION S, V$SQLTEXT T WHERE S.SQL_ADDRESS = T.ADDRESS AND S.SQL_HASH_VALUE = T.HASH_VALUE AND S.USERNAME IS NOT NULL ORDER BY S.USERNAME, S.PREV_SQL_ADDR, S.PREV_HASH_VALUE, T.PIECE; Efetuar "TRUNCATE TABLE" via procedure CREATE OR REPLACE PROCEDURE TRUNCTAB (N_TAB IN VARCHAR2) IS V_CURSOR INTEGER; IGNORE INTEGER; BEGIN V_CURSOR := DBMS_SQL.OPEN_CURSOR; DBMS_SQL.PARSE(V_CURSOR, 'TRUNCATE TABLE '||N_TAB||' REUSE STORAGE',DBMS_SQL.V7); IGNORE := DBMS_SQL.EXECUTE(V_CURSOR); DBMS_SQL.CLOSE_CURSOR(V_CURSOR); END; / CREATE PUBLIC SYNONYM TRUNCTAB FOR TRUNCTAB; GRANT EXECUTE ON TRUNCTAB TO PUBLIC; Eficincia da Library Cache SELECT ROUND(SUM(PINHITS)/SUM(PINS) * 100,2) FROM V$LIBRARYCACHE; Eficincia da Sort Area SELECT ROUND((SUM(DECODE(NAME, 'sorts (memory)', VALUE, 0))/ (SUM(DECODE(NAME, 'sorts (memory)', VALUE, 0))+ SUM(DECODE(NAME, 'sorts (disk)', VALUE, 0))))* 100,2) SORT FROM V$SYSSTAT; ######## Eficincia do database buffer SELECT ROUND((1-(PR.VALUE/ (BG.VALUE+CG.VALUE)))*100,2) DB_BUFFER FROM V$SYSSTAT PR, V$SYSSTAT BG, V$SYSSTAT CG WHERE PR.NAME = 'physical reads' AND BG.NAME = 'db block gets' AND CG.NAME = 'consistent gets'; Eficincia do Dictionary Cache SELECT ROUND(SUM(GETS)/(SUM(GETS)+SUM(GETMISSES)) * 100,2) DICT FROM V$ROWCACHE; ######## Encolher o rollback segment ALTER ROLLBACK SEGMENT RBS_05 SHRINK; ######## Encolher para 512 Kbytes ALTER ROLLBACK SEGMENT RBS_05 SHRINK TO 512K; Fixar Packages na Shared Pool (SQL Area)

Devido ao seu uso constante eu recomendo que os packages abaixo estejam fixados na Shared Pool. Exemplo de roteiro para ser disparado no Startup: EXECUTE EXECUTE EXECUTE EXECUTE EXECUTE EXECUTE EXECUTE EXECUTE EXECUTE EXECUTE EXECUTE DBMS_SHARED_POOL.KEEP('DBMS_SHARED_POOL'); DBMS_SHARED_POOL.KEEP('DBMS_ALERT'); DBMS_SHARED_POOL.KEEP('DBMS_DDL'); DBMS_SHARED_POOL.KEEP('DBMS_DESCRIBE'); DBMS_SHARED_POOL.KEEP('DBMS_LOCK'); DBMS_SHARED_POOL.KEEP('DBMS_OUTPUT'); DBMS_SHARED_POOL.KEEP('DBMS_PIPE'); DBMS_SHARED_POOL.KEEP('DBMS_SESSION'); DBMS_SHARED_POOL.KEEP('DBMS_STANDARD'); DBMS_SHARED_POOL.KEEP('DBMS_UTILITY'); DBMS_SHARED_POOL.KEEP('STANDARD')

######## Fragmentao nos datafiles SELECT FILE_ID, SEGMENT_NAME, BLOCK_ID, BLOCK_ID+BLOCKS NEXT, BLOCKS, BYTES FROM DBA_EXTENTS UNION SELECT FILE_ID, 'FREE SPACE', BLOCK_ID, BLOCK_ID+BLOCKS NEXT, BLOCKS, BYTES FROM DBA_FREE_SPACE ORDER BY 1, 3; ######## Hora em que a instncia do Oracle foi ativada SELECT TO_CHAR(TO_DATE(D.VALUE,'J'),'MM/DD/YYYY.html')||' '|| TO_CHAR(TO_DATE(S.VALUE,'SSSSS'),'HH24:MI:SS') STARTUP_TIME FROM V$INSTANCE D, V$INSTANCE S WHERE D.KEY = 'STARTUP TIME - JULIAN' AND S.KEY = 'STARTUP TIME - SECONDS'; ######## Job's que esto em Execuo COL C1 COL C2 COL C3 COL C4 COL C5 COL C6 COL C7 COL C8 COL C9 COL C10 SELECT FORMAT 99 HEADING 'Ses' FORMAT 999 HEADING 'Id' FORMAT A10 HEADING 'Submitter' TRUNC FORMAT A10 HEADING 'Security' TRUNC FORMAT A20 HEADING 'Job' WORD_WRAPPED FORMAT A5 HEADING 'Last|Ok|Date' FORMAT A5 HEADING 'Last|Ok|Time' FORMAT A5 HEADING 'This|Run|Date' FORMAT A5 HEADING 'This|Run|Time' FORMAT 99 HEADING 'Err' A.SID C1, A.JOB C2, B.LOG_USER C3, B.PRIV_USER C4, B.WHAT C5, to_char(A.LAST_DATE,'MM/DD.html') C6, substr(A.LAST_SEC,1,5) C7, to_char(A.THIS_DATE,'MM/DD.html') C8, substr(A.THIS_SEC,1,5) C9, A.FAILURES C10 FROM DBA_JOBS B, DBA_JOBS_RUNNING A WHERE A.JOB = B.JOB;

######## Listagem de todas as Tabelas "V$"

SELECT KQFVINAM FROM X$KQFVI; ######## Objetos fragmentados canditatos a reconstrucao COL C1 COL C2 BREACK SELECT FORMAT A14 FORMAT 999,999,999 ON OWNER ON TABLESPACE_NAME OWNER, TABLESPACE_NAME, SEGMENT_NAME|| decode(SEGMENT_TYPE,'TABLE','[T]', 'INDEX', '[I]', 'ROLLBACK','[R]', '[O]') segment_name , sum(BYTES) C2, decode(count(*),1,to_char(count(*)), 2,to_char(count(*)), 3,to_char(count(*)), 4,to_char(count(*)), 5,to_char(count(*)), to_char(count(*))||' < Re-Construir') C1 FROM DBA_EXTENTS WHERE OWNER NOT IN ('SYS','SYSTEM','OWNER1') GROUP BY OWNER, TABLESPACE_NAME, SEGMENT_NAME|| decode(SEGMENT_TYPE,'TABLE','[T]', 'INDEX', '[I]', 'ROLLBACK','[R]', '[O]') HAVING count(*) > 5;

######## Opes instaladas do banco Para verificar as opes instaladas no banco, digite: SELECT * FROM V$OPTION; Opes que o Banco de Dados contempla COL C1 FORMAT A35 COL C2 FORMAT A35 SELECT PARAMETER C1, VALUE C2 FROM X$OPTION; ######## Pacotes que esto fixos em Memria --- **NOTA: execute dbms_shared_pool.keep('nome'); COL C1 HEADING 'Owner' COL C2 HEADING 'Tipo' COL C3 HEADING 'Nome' COL C4 HEADING 'Execucoes' FORMAT 999,999,999 COL C5 HEADING 'Memoria_Usada' FORMAT 999,999,999 SELECT substr(OWNER,1,10) C1, substr(TYPE,1,12) C2, substr(NAME,1,20) C3, EXECUTIONS C4, SHARABLE_MEM C5, substr(KEPT||' ',1,4) 'Fixo?' FROM V$DB_OBJECT_CACHE WHERE TYPE IN ('TRIGGER','PROCEDURE','PACKAGE BODY','PACKAGE') ORDER BY C4 DESC; ######## Parmetros de inicializao do Oracle

SELECT NAME, VALUE FROM V$PARAMETER ORDER BY NAME; ######## Parmetros no documentados no INIT.ORA SELECT KSPPINM FROM X$KSPPI WHERE SUBSTR(KSPPINM, 1, 1) = '_' ORDER BY 1; ######## Porcentagem de Memria Livre na Shared Pool SELECT ROUND((SUM(DECODE(NAME, 'free memory', BYTES, 0)) / SUM(BYTES)) * 100,2) FREE_MEM FROM V$SGASTAT; ######## Processo trace no SQL*Plus Executar antes os arquivos UTLXPLAN.SQL e PLUSTRCE.SQL SQL> SET AUTOTRACE ON ######## Processos do Oracle e Processos do SO SELECT A.USERNAME, A.STATUS, B.USERNAME OS_USER, B.SPID, A.SID, A.SERIAL#, A.MACHINE FROM V$SESSION A, V$PROCESS B WHERE A.PADDR = B.ADDR; ######## Quantidade de objetos nas tablespaces Para verificar a quantidade de objetos dos usurios nas tablespaces, podemos efetuar a DML abaixo: BREAK ON TABLESPACE ON OWNER COL C1 FORMAT A25 HEADING OBJETOS DADOS/INDICES SELECT TABLESPACE_NAME, OWNER COUNT(*) ||' TABELAS' C1 FROM DBA_TABLES GROUP BY TABLESPACE_NAME, OWNER UNION SELECT TABLESPACE_NAME, OWNER COUNT(*) ||' INDICES' C1 FROM DBA_INDEXES GROUP BY TABLESPACE_NAME, OWNER; ######## Reexecues solicitadas no Pool compartilhado COL C1 HEADING 'Objeto(pseudo-codigo)' COL C2 FORMAT 999.999 HEADING 'Reloads' COL C3 FORMAT 999.999 HEADING 'Invalidacoes' SELECT NAMESPACE C1, RELOADS C2, INVALIDATIONS C3 FROM V$LIBRARYCACHE; ######## Renovar as tabelas de Snapshot Para renovar todas as tabelas de snapshot o pacote abaixo pode ser executado a qualquer momento no

siatema de destino. EXECUTE DBMS_SNAPSHOT.REFRESH_ALL; ######## Para forcar a renovao de apenas uma tabela: EXECUTE DBMS_SNAPSHOT.REFRESH('tabela','F'); /*forced refresh*/ ######## Tornar um arquivo autoextend ALTER DATABASE DATAFILE '/u03/oradata/dsv01/tbs_dsv01_usr_dados_01.dbf' AUTOEXTEND ON NEXT 10M MAXSIZE 500M; ALTER DATABASE DATAFILE '/u03/oradata/dsv01/tbs_dsv01_usr_dados_01.dbf' AUTOEXTEND MAXSIZE UNLIMITED; SELECT FILE#, MAXEXTEND* , INC* FROM SYS.FILEXT$; ######## Utilizao do Database Buffer Cache SELECT DECODE (STATE, 0, 'FREE', 1, 'READ AND MODIFIED', 2, 'READ AND NOT MODIFIED', 3, 'CURRENTLY BEING READ','OTHER') BUFFER, COUNT(*) FROM X$BH GROUP BY DECODE (STATE, 0, 'FREE', 1, 'READ AND MODIFIED', 2, 'READ AND NOT MODIFIED', 3, 'CURRENTLY BEING READ','OTHER'); ######## Verso do Banco Para verificar a verso de seu banco de dados, digite: SELECT * FROM V$VERSION; ######## ORA-00001 - Dup val on index O erro ORA-00001 um erro relacionado duplicao de registros do ndice. Provavelmente o que est ocorrendo uma violao de unicidade de uma chave primria ou nica, geralmente comum em operaes de INSERT ou UPDATE. ######## ORA-01403 - No data found O erro ORA-01403 um erro relacionado ao SELECT dentro de uma rotina PL/SQL. Esse erro ocorre quando um SELECT no retorna nenhuma linha. Por exemplo: ...

SELECT nome into v_nome FROM empregados WHERE num = -1; ... esse comando no retornou nada, pois no existe empregado -1,logo ocorreu o erro. Built-in set_lov_property Se um determinado campo dependendo de uma determinada situao, necessitar apresentar ora uma lista de valores ora outra, pode ser utilizada a buit-in set_lov_property. Exemplo: Trata-se de um cardpio eletrnico. List_values: lv_produtos Record_group: rg_frutas Select subcodigo, nome From produtos Where codigo = 1 Order by nome Record_group: rg_bebidas Select subcodigo, nome From produtos Where codigo = 2 Order by nome ######## Se a condio for apresentar apenas a lista de frutas ento: set_lov_property('lv_produtos', group_name, 'rg_frutas'); ######## Se a condio for apresentar apenas a lista de bebidas ento: set_lov_property('lv_produtos', group_name, 'rg_bebidas'); ######## Chamada de um form dentro de outro form A chamada de um Form dentro de outro Form pode ser feita de trs maneiras: CALL_FORM - Chama um form, mantendo o form chamador aberto. Quando o form chamado finalizado, o comando voltar para a linha abaixo do comando call_form. OPEN_FORM - Chama um form, abrindo uma outra seo ou mantendo a mesma seo. utilizado em aplicaes onde podem ser abertos vrios forms, sem ter que fechlos. Obs.: Este tipo de chamada, se no for muito bem controlada, pode ocasionar perda

de foco entre as janelas dos forms. NEW_FORM - Chama um form fechando o form chamador. Condies de query ######## A pesquisa realizada em um bloco base table pode ter filtros. As condies para se realizar a pesquisa podem ser programadas de duas formas: na trigger pre-query - Ser necessrio definir a default_where. Constri-se a clusula condicional que ser atribuda ao default_where atravs da built-in set_block_property. Exemplo: Bloco: pedido Colunas: codigo_pedido data_pedido valor_pedido declare def_where varchar2(500) := null; begin def_where := 'valor_pedido > 500'; set_block_property(pedido, default_where, def_where); end;

na property where clause do bloco basta digitar a condio: valor_pedido > 500 Erros de windows e canvas durante converso 4.5->5

Ao converter um form 4.5 para 5.0, todos os canvas e windows perdem suas referncias. Em forms pequenos (com poucas windows), basta referenci-los novamente. Em forms maiores (com muitas windows, 5 ou mais) podem ocorrer os erros FRM-30161: Inconsistent relationship between window and its primary canvas e FRM-30162 Inconsistent relationship between window and its vertical/horizontal toolbar. Quando este erro ocorre, a nica forma de corrigi-lo : excluir a window e a recriar, associando o canvas respectivo.

Forms 5.0 funcionando como Forms 4.5 Para fazer com que um forms 5.0 se comporte como um forms 4.5, basta alterar a propriedade (nvel de form) chamada Runtime Compatibility Mode. Mensagens de erro As mensagens exibidas pelo form, podem ser tratadas atravs das triggers on-error e on-message. Podem ser utilizadas libraries com a traduo das mensagens, tratando cada cdigo de erro apresentado pelo form. Propriedade highlight no Forms 5 No Forms 5.0 para que um campo apresente um comentrio quando o mouse passado sobre ele, basta definir o comentrio na property tooltip do item. system.message_level

Quando a varivel de sistema :system.message_level alterada pelo programador, podem ser inibidas algumas mensagens apresentadas pelo form. Deve ser verificado o nvel da mensagem apresentada. Os nveis so 0, 5, 10, 15, 20 e 25, sendo que o nvel 0 (zero) default, fazendo com que o form apresente todas as mensagens. Utilizao do Post Cuidado ao utilizar o post, porque no um commit efetivo. Essa built-in funciona como se fosse um commit, porm s faz efeito para a sesso que est realizando o post; as outras sees no "enxergam" as possveis alteraes, incluses ou excluses realizadas pelo post. O post pode alterar o status do form para query e realiza todas as checagens em triggers disparadas pelo commit (por ex.: pre-insert, pre-update). Variveis de data corrente no Forms, cuidado! Para quem gosta de utilizar variveis de sistema na programao, CUIDADO! No forms 4.5, a varivel :system.current_datetime representa a data/hora do servidor.

No forms 5.0, a varivel mudou de nome. a :system.effective_date. E a :system.current_datetime representa a data/hora do sistema operacional do client (micro). Sugesto: Criar uma funo "fdata" no banco para retornar a data do servidor, que seja executada junto com o startup do banco. Utilizar esta funo ao invs da varivel de sistema para no correr o risco de ter que alter-la em todos os programas, caso hajam mudanas como essa. Como logar-se como SYS no 9i ? Para logar-se como SYS no 9i: connect sys/senha_do_sys as sysdba Para acessar normalmente como no Oracle 7/8/8i : altere o seguinte parmetro no init: O7_DICTIONARY_ACCESSIBILITY=TRUE restarte o banco e tente se logar: connect sys/senha_do_sys Como procurar tratamento para mensagem de erro? UNIX: Existe um aplicativo chamado oerr que mostra a mensagem de erro e o que fazer para solucion-la. Simplesmente digite: oerr tipo_do_erro nmero_do_erro Por exemplo: oerr ora 600 vai te orientar o que fazer se der ocorrer o erroORA-0600. Windows: No SQL*Plus: set serverout on exec dbms_output.put_line(sqlerrm(nmero_do_erro ) Porm esse mtodo s mostra a mensagem do erro, e no o que fazer como solucion-lo Definindo um banco de dados padro no login Nas estaes Windows para definir um banco de dados padro basta adicionar uma varivel de ambiente ao sistema operacional chamada LOCAL. Para isso, clique em iniciar->executar e digite REGEDIT. Depois procure dentro das pastas:

Meu Computador->HKEY_LOCAL_MACHINE->SOFTWARE->ORACLE Dentro da pasta Oracle crie uma varavel: clicando com o boto direito do mouse: Novo->Valor da Sequncia->LOCAL Agora d um duplo clique em local e entre com o valor do banco de dados que desejar. Se por acaso no trabalho todo dia vc se loga como: portal/minhasenha@oracle8i coloque na LOCAL o valor "oracle8i". Assim basta voc se logar como portal/minhasenha que ser feita a conexo em oracle8i sem problemas. Diretorios padro no Windows Esses so alguns diretrios que o Oracle usa como padro na instalao: ORACLE_HOME ficava no C:\ORAWIN95 nas verses 7 at 8.0; agora na 8i o ORACLE_HOME fica no C:\ORACLE\OraHome1 Como configurar vrias mquinas clientes

Para clientes com Windows 95 basta voc configurar uma nica mquina e copiar os seguintes arquivos:TNSNAMES.ORA e SQLNET.ORA, que se localizam nos diretrios: C:\ORAWIN95\NETWORK\ADMIN ou C:\ORAWIN95\NET80\ADMIN para os mesmos diretrios nas outras mquinas, alm do arquivo HOSTS, que se localiza no diretrio C:\WINDOWS. Para clientes com Windows NT o procedimento o mesmo, mas os diretrios dos seguintes arquivos: TNSNAMES.ORA e SQLNET.ORA, que se localizam em: C:\ORANT\NETWORK\ADMIN ou C:\ORANT\NET80\ADMIN , alm do arquivo HOSTS, que se localiza no diretrio C:\WINNT\SYSTEM32\DRIVERS\ETC. Finalizando listener em Windows ou UNIX: lsnrctl stop se for Oracle 8.0: lsnrctl80 stop iniciando listener em Windows ou UNIX: lsnrctl start se for Oracle 8.0:

lsnrctl80 start status do listener em Windows ou UNIX: lsnrctl status se for Oracle 8.0: lsnrctl80 status APW - Agenda Pessoal via Web -- URL -- Criado -- Aplicativo : http://www.oracle.trix.net : 14 e 15/8/2000 : Agenda PL/SQL

/* Esta aplicacao foi criada com o proposito totalmente DIDATICO, ou seja, para o aprendizado de aplicacoes web em PL/SQL. Trata-se de um sistema de consulta/cadastro e alteracao bem simples, envolvendo 3 tabelas: CIDADES, PFISICAS (das pessoas fisicas) e PJURIDICAS (das pessoas juridicas). Para o desenvolvimento de algo mais complexo basta adaptar a aplicacao e adicionar rotinas na medida do possivel. Numa futura implementacao poderia existir a mesma aplicacao, porem com suporte a varios usuarios, ou seja, varias agendas de varios usuarios, cada um com sua area publica e privada e cada um com a sua senha. Coloque o seu servidor web no ar (WebDB ou OAS) e chame o endereco: http://seu-site/sua-aplicacao/apw.inicio ========================================= Executar comandos DML (create, alter,etc) no 8i Em uma rotina PL/SQL , para executar um comando DML, como por exemplo um CREATE TABLE, utilize o comando EXECUTE IMMEDIATE da seguinte maneira:

procedure teste_cria_tabela(nome varchar2) as begin execute immediate ' create table '||nome||' ( teste char)' ; end; Essa procedure criar tabelas dinamicamente, basta passar o parmetro correto, por exemplo: teste_cria_tabela('tabela1); teste_cria_tabela('tabela2); ... Tratando qualquer tipo de erro na rotina Numa rotina desse tipo: begin ... ... end; para tratar qualquer tipo de erro adicione as linhas: begin .. .. EXCEPTION when others then ..... end; Exemplo: declare v_nome varchar2(30); begin select nome into v_nome from funcionarios where ID=100; EXCEPTION when OTHERS then raise_application_error(-20000,' Erro no cadastro!'); end; Utilizao das variveis compostas do PL/SQL ------------------------------------------------------------------Exemplo de utilizacao das variaveis compostas do PL/SQL para a leitura de uma tabela e passa-la como parametro. ------------------------------------------------------------------O exemplo utiliza a tabela EMP do usuario SCOTT. ------------------------------------------------------------------Existem no exemplo 4 rotinas: a procedure le_Tabela faz exatamente o que as 3 rotinas restantes fazem: le os dados da tabela EMP e os exibe na tela do SQL*Plus. -le_tabela - procedure que le os dados da EMP e os exibe na tela -pac_tabela - package que possui o tipo emp_tabela_type publico

-le_tabela2 - le a tabela EMP e joga pra variavel TABELA -le_tabela3 - recebe uma variavel do tipo emp_tabela_type e exibe o seu conteudo na tela. ------------------------------------------------------------------Analize o codigo fonte para melhor compreensao. ------------------------------------------------------------------Obs: poderia ter juntado as rotinas le_tabela2 e le_tabela3 dentro da package pac_tabela ------------------------------------------------------------------Rode esses comandos no SQL*Plus para criacao dos 4 objetos ------------------------------------------------------------------create or replace package pac_tabela is -- criando um vetor de linhas da tabela emp type emp_tabela_type is table of scott.emp%rowtype index by binary_integer; end pac_tabela; / ------------------------------------------------------------------create or replace procedure le_tabela as -- criando um vetor de linhas da tabela emp type emp_tabela_type is table of scott.emp%rowtype index by binary_integer; tabela emp_tabela_type ; -- para referenciar linha: tabela(numero) -- para referenciar campo: tabela.campo -- Exemplo: linha 5 , coluna sal: tabela(5).sal cursor c_emp is select * from scott.emp; contador number :=1; begin dbms_output.put_line('Executando a rotina le_tabela...'); -- le dados da tabela for rec_emp in c_emp loop tabela(contador):=rec_emp; contador:=contador+1; end loop; -- le dados da variavel para a tela do SQL*Plus -- nao esqueca de digitar "set serverout on" -- para conseguir ver o resultado for n in reverse 1..contador-1 loop dbms_output.put_line(initcap(tabela(n).ename)||' tem o cargo de '||lower(tabela(n).job)||'.'); end loop; end le_tabela; / ------------------------------------------------------------------create or replace procedure le_tabela2 as tabela pac_tabela.emp_tabela_type ;

-- para referenciar linha: tabela(numero) -- para referenciar campo: tabela.campo -- Exemplo: linha 5 , coluna ename: tabela(5).ename cursor c_emp is select * from scott.emp; contador number :=1; begin dbms_output.put_line('Executando a rotina le_tabela2...'); -- le dados da tabela for rec_emp in c_emp loop tabela(contador):=rec_emp; contador:=contador+1; end loop; -- chama a rotina le_tabela3 passando parametros le_tabela3(tabela); end le_tabela2; / ------------------------------------------------------------------create or replace procedure le_tabela3 (tabela in pac_tabela.emp_tabela_type) as begin dbms_output.put_line('Executando a rotina le_tabela3...'); -- le dados da variavel para a tela do SQL*Plus -- nao esqueca de digitar "set serverout on" -- para conseguir ver o resultado for n in reverse 1..tabela.count loop dbms_output.put_line(initcap(tabela(n).ename)||' tem o cargo de '||lower(tabela(n).job)||'.'); end loop; end le_tabela3; / ------------------------------------------------------------------Esse foi o resultado no sqlplus: ------------------------------------------------------------------SQL> set serverout on SQL> exec le_tabela Executando a rotina le_tabela... Miller tem o cargo de clerk. Ford tem o cargo de analyst. James tem o cargo de clerk. Adams tem o cargo de clerk. Turner tem o cargo de salesman. King tem o cargo de president. Scott tem o cargo de analyst. Clark tem o cargo de manager. Blake tem o cargo de manager. Martin tem o cargo de salesman. Jones tem o cargo de manager. Ward tem o cargo de salesman. Allen tem o cargo de salesman. Smith tem o cargo de clerk.

PL/SQL procedure successfully completed SQL> exec le_tabela2 Executando a rotina le_tabela2... Executando a rotina le_tabela3... Miller tem o cargo de clerk. Ford tem o cargo de analyst. James tem o cargo de clerk. Adams tem o cargo de clerk. Turner tem o cargo de salesman. King tem o cargo de president. Scott tem o cargo de analyst. Clark tem o cargo de manager. Blake tem o cargo de manager. Martin tem o cargo de salesman. Jones tem o cargo de manager. Ward tem o cargo de salesman. Allen tem o cargo de salesman. Smith tem o cargo de clerk. PL/SQL procedure successfully completed ------------------------------------------------------------------Colocar o IAS no ar No NT: inicialize o servico iAS (Apache) No unix: logue-se com o usurio que instalou o produto e digite: inicialize o script: startJserv.sh Colocar um site no ar (OAS verso 3) owsctl start wrb owsctl start www Colocar um site no ar (OAS verso 4) owsctl start ou: owsctl start -orb owsctl start -wrb all owsctl start -l www A porta de administrao: owsctl start -nodemgr Tirar um site do ar (OAS verso 3) owsctl stop admin owsctl stop www owsctl stop owsctl stop wrb Tirar um site do ar (OAS verso 4) owsctl stop A porta de administrao: owsctl stop -nodemgr