Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

rickab7

Criando Procedure

Recommended Posts

Ola galera!!!...Gostaria de saber como eh q se cria uma procedure no oracle, ateh então eu so sei criar no sql server....= gostaria de saber como se cria as variaveis dentro da procedure e como eu posso atualizar essa variavel dentro da mesma...Muito obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por exemplo:

--Cria a procedurecreate or replace procedure spunico.sp_teste (nCodigo IN NUMBER, sNome OUT varchar)ascursor cs_teste is	select * from tabela WHERE codigo = nCodigo;begin	for recs_teste in cs_teste loop		sNome := recs_teste.nomerazao;	end loop;end sp_teste;

Esta procedure lê uma tabela de acordo com um parametro de entrada e retorna o nome.

 

Veja mais em http://www.psoug.org/reference/procedures.html

Compartilhar este post


Link para o post
Compartilhar em outros sites

É um bom exmplo:

 

Abaixo tenho um exemplo que crie prático sobre a utilização de parametros:

 

create or replace procedure ddltxt (txtOwner IN varchar, txtTabela IN varchar, txtTBS IN varchar) IS		txtArquivo   varchar2(100);		txtSep	   char(1);		numContador  integer;		numRows	  integer;		txtNull	  varchar2(10);		txtCampo	 varchar2(100);		txtTPart	 varchar2(10);		numCPart	 integer;		txtCName	 varchar2(100);		numCOntadorP integer;		txtCheck	 char(3);		txtUTL	   UTL_FILE.FILE_TYPE;		CURSOR SEL_DDL IS SELECT a.table_name, a.column_name, a.data_type, a.data_length, a.nullable						  FROM dba_tab_columns a						  WHERE a.table_name = upper(txtTabela) and a.owner = upper (txtOwner);		CURSOR SEL_PART IS SELECT a.partition_name, a.high_value FROM dba_tab_partitions a						   WHERE a.table_name = upper(txtTabela) and a.table_owner = upper(txtOwner)						   ORDER BY a.partition_position;		vT SEL_DDL%rowtype;		VTP SEL_PART%rowtype;begin		numContador := 1;		txtUTL := UTL_FILE.FOPEN ('/churndb40/exp/scripts/tables/', lower(txtTabela) || '.sql','w');		OPEN SEL_DDL;		UTL_FILE.put_line (txtUTL,'CREATE TABLE CHURN.' || txtTabela || ' (');		SELECT COUNT(*) INTO numRows FROM dba_tab_columns WHERE table_name = upper(txtTabela) and owner = upper(txtOwner);		SELECT A.PARTITIONED INTO txtCheck FROM dba_tables a		WHERE a.owner = upper(txtOwner) and a.table_name = upper(txtTabela);		LOOP		FETCH SEL_DDL INTO vT;		EXIT WHEN SEL_DDL%notfound;		IF numContador < numRows THEN				txtSep := ',';		ELSE				txtSep := null;		END IF;		IF vT.nullable = 'Y' THEN				txtNull := null;		ELSE				txtNull := ' not null';		END IF;		IF vT.data_type = 'DATE' THEN				txtCampo := 'DATE';		ELSE				txtCampo := vT.data_type || '(' || vT.data_length || ')';		END IF;				UTL_FILE.put_line (txtUTL,vT.column_name || ' ' || txtCampo || txtNull || txtSep);		numContador := numContador + 1;		END LOOP;		CLOSE SEL_DDL;		UTL_FILE.put_line (txtUTL,')');		IF txtCheck = 'YES' THEN		SELECT a.partitioning_type INTO txtTPart FROM dba_part_tables a		WHERE a.owner = upper(txtOwner) and a.table_name = upper(txtTabela);		SELECT a.partition_count INTO numCPart FROM dba_part_tables a		WHERE a.owner = upper(txtOwner) and a.table_name = upper(txtTabela);		SELECT a.column_name INTO txtCName FROM dba_part_key_columns a WHERE a.name = upper(txtTabela)		AND a.owner = upper(txtOwner);		IF txtTPart = 'RANGE' THEN				numContadorP := 1;				OPEN SEL_PART;				UTL_FILE.put_line (txtUTL,'PARTITION BY RANGE (' || txtCName || ')');				UTL_FILE.put_line (txtUTL,'(');				LOOP				FETCH SEL_PART INTO vTP;				EXIT WHEN SEL_PART%notfound;				IF numContadorP < numCPart THEN						txtSep := ',';				ELSE						txtSep := null;				END IF;				UTL_FILE.put_line (txtUTL,'PARTITION ' || vTP.partition_name || ' VALUES LESS THAN (''' ||vTP.high_value||'')');				UTL_FILE.put_line (txtUTL,'TABLESPACE ' || txtTBS || txtSep);				numContadorP := numContadorP + 1;				END LOOP;		END IF;		UTL_FILE.put_line (txtUTL,')');		END IF;		UTL_FILE.put_line (txtUTL,'TABLESPACE ' || txtTBS || ';');		UTL_FILE.FFLUSH (txtUTL);		UTL_FILE.FCLOSE (txtUTL);end;/

No exemplo utilizei UTL_FILE, para geração de arquivos TXT. O objetivo era pegar as estruturas DDL das Tabelas particionadas ou não.

 

Abraços, http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito Obrigado pela ajuda de vcs!!!....alphamek, gostaria de saber, quando você cria variavel de paramentro o q quer dizer o valor IN Varcher ou Out Varchar...ja vi isso em alguns codigo fonte...quer dizer q o time de variavel q eu estou criando eh do tipo varchar???....+ por q colocar o valor IN...o q quer dizer a palavara cursor???, o q você fez com a variavel vT e VTP q eu ñ entend????....O oracle eh bem diferente do SQL Server, + to gostando de ta aprendendo ele....+ d qualquer jeito...valeu mesmo pela ajuda d vcs doisFalou um abraço e q Deus abençõe a familia e vcs tds....Valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.