rickab7 0 Denunciar post Postado Maio 22, 2006 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
walace 1 Denunciar post Postado Maio 23, 2006 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
alphamek 2 Denunciar post Postado Maio 23, 2006 É 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
rickab7 0 Denunciar post Postado Maio 23, 2006 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