[oracle_br] Re: Criacao de sequence e dar select no novo valor gerado..

2007-05-03 Por tôpico Aleksandro
Utilize também dessa forma caso ache que é mais prático

Depois que criar uma sequence faça o seguinte

INSERT INTO TABELA (NUMERO,CAMPO1,CAMPO2)
VALUES (NOME_DA_SEQUENCE.NEXTVAL,'BLABLA','TESTE','SEQUENCE')


--- Em oracle_br@yahoogrupos.com.br, "Andre Santos"
<[EMAIL PROTECTED]> escreveu
>
> Só acrescentando, ao que o Marco já explicou, é possível criar um
trigger
> para "insert", obtendo o valor da sequence (dessa forma ficaria bem
> semelhante ao uma coluna do tipo "autonumeração").
> 
> [ ]'s
> 
> André
> 
> 
> Em 02/05/07, FERNANDES Marco A SOFTTEK <
> [EMAIL PROTECTED]> escreveu:
> 
> >   Renan,
> > pequeno detalhe no seu select vc não usa mais a sequence !
> > Use-a apenas no insert.
> >
> > O currentval da sequence não é o que vc procura.
> > Vc precisa especificar o código na busca e não o valor da sequence.
> > Como te disse, a sequence não tem relação com a tabela. É apenas um
> > artifício para controlar um sequencia numérica.
> >
> > Portanto, não use o currentval no select, pois ele não serve para
isso.
> >
> > Caso vc queira consultar o último registro inserido utilize a cláusula
> > where usando max(campo_id).
> >
> > valeu, abraço,
> > Marco.
> >
> > 
> >
> > From: oracle_br@yahoogrupos.com.br
[mailto:
> > oracle_br@yahoogrupos.com.br ] On
Behalf
> > Of PUB: Renan Nucci - CSM Soft
> > Sent: quarta-feira, 2 de maio de 2007 17:52
> > To: oracle_br@yahoogrupos.com.br 
> > Subject: Re: [oracle_br] Criacao de sequence e dar select no novo
valor
> > gerado..
> >
> > Criei conforme vossa orientação, mas nao consigo selecionar o que foi
> > inserido..
> > O que esta errado no que fiz abaixo??
> >
> > /*cria a sequencia*/
> > create sequence produtos_codigo increment by 1 minvalue 1
nomaxvalue start
> > with 1
> > commit
> >
> > /*tenta nserir usando sequence*/
> > ALTER SESSION SET NLS_DATE_FORMAT = 'YY/MM/DD' /*altera formato da
> > sessao*/
> > insert into Produtos values(produtos_codigo.NEXTVAL, 'produto1', 5, 2,
> > '2001-01-01') ;
> > commit;
> > /*seleciona o que foi inserido*/
> > select * from produtos where codigo = produtos_codigo.CURRVAL;
> >
> > 
> > * Renan S. Nucci *
> > * Desenvolvedor *
> > * CSM Software *
> > 
> > - Original Message -
> > From: FERNANDES Marco A SOFTTEK
> > To: oracle_br@yahoogrupos.com.br 
 > oracle_br%40yahoogrupos.com.br>
> > Sent: Wednesday, May 02, 2007 5:10 PM
> > Subject: RE: [oracle_br] Criacao de sequence e dar select no novo
valor
> > gerado..
> >
> > Renan, a tabela não tem ligação direta com a sequence.
> > A tabela tem uma coluna tipo Number normal.
> > O vínculo estará apenas no insert na tabela da seguinte forma:
> >
> > insert into tabela (coluna_ID, coluna_2, coluna_3)
> > values (nome_sequence.nextval(), valor_2, valor_3);
> >
> > A sequence quando criada vc especifica o valor inicial, incremento,
> > máximo, ciclicidade, etc.
> > Portanto, vc deve iniciar com 1 e máximo de 9 onde o número de
noves
> > depende do
> > tamanho do seu number... se for number(3) o máximo é 999 o
incremento
> > põe 1, ou seja,
> > soma sempre 1 (incremento normalmente usado).
> >
> > Ou seja, na criação da tabela não tem segredo... cria ela normal.
> > Aí nos inserts tem que tratar... não é recomendado reaproveitamento de
> > chave nesse
> > caso pois vc teria que tratar também a sequence.
> >
> > Eu já vi muita gente usar sequence mas tbem já vi muita gente usar o
> > select max + 1.
> >
> > Abraço,
> > Marco.
> >
> > 
> >
> > From: oracle_br@yahoogrupos.com.br
 > oracle_br%40yahoogrupos.com.br>
[mailto:oracle_br@yahoogrupos.com.br > oracle_br%40yahoogrupos.com.br> ] On Behalf Of PUB: Renan Nucci -
CSM Soft
> > Sent: quarta-feira, 2 de maio de 2007 16:45
> > To: oracle_br@yahoogrupos.com.br 
 > oracle_br%40yahoogrupos.com.br>
> > Subject: Re: [oracle_br] Criacao de sequence e dar select no novo
valor
> > gerado..
> >
> > O que me impediu de criar a sequence eh o primeiro valor, pois nas
minhas
> > tentativas estavao dando erros. lembro de ter lido que para usar uma
> > sequence o campo deve ter o valor gerado pela sequence.. :/
> >
> > eh por isso q pedi um exemplo que me mostrasse a "traducao" de uma
tabela
> > do ss para o oracle..
> >
> > 
> > * Renan S. Nucci *
> > * Desenvolvedor *
> > * CSM Software *
> > 
> > - Original Message -
> > From: FERNANDES Marco A SOFTTEK
> > To: oracle_br@yahoogrupos.com.br 
 > oracle_br%40yahoogrupos.com.br>

> > Sent: Wednesday, May 02, 2007 4:04 PM
> > Subject: RE: [oracle_br] Criacao de sequence e dar select no novo
valor
> > gerado..
> >
> > Para se encriptar uma procedure é necessário o uso da ferramenta WRAP
> > existente no oracle... cada versão de banco tem sua própria ferramenta
> > wrap.
> >
> > Dá uma olhada no Help d

[oracle_br] Re: Criacao de sequence e dar select no novo valor gerado..

2007-05-03 Por tôpico jlchiappa
http://asktom.oracle.com/pls/asktom/f?
p=100:11:0P11_QUESTION_ID:1544606261686 e 
http://asktom.oracle.com/pls/asktom/f?
p=100:11:0P11_QUESTION_ID:1205168148688#1205970300992 são os 
testes e discussões a respeito, mas acrescento que pra performance o 
que diferencia explícito de implícito é que um vc faz 
open/fetch/close na mão, e outro vc usa dentro dum FOR que já faz 
tudo automaticamente, então o exemplo do colega lá está dentro dum 
FOR, portanto é SIm pra todos os efeitos que interessam implícito, é 
o banco que o controle automaticamente, é portanto algo mais 
eficiente que o explícito (ie, o que tem open/fetch/close). A 
diferença normalmente não é tão enorme mas existe sim...

[]s

 Chiappa
--- Em oracle_br@yahoogrupos.com.br, "FERNANDES Marco ASOFTTEK" 
<[EMAIL PROTECTED]> escreveu
>
> Rafael,
> desculpe mas essa história de cursor explícito é mais rápido é 
balela num é não ? risos
> Alguém pode esclarecer isso.
> Já fiz trocentos testes e nunca vi diferença alguma entre os dois.
> Acho que é mais um mito oracleano !
> Rola alguém dar uma colher de chá pra lista ?
>  
> André, eu tinha pedido exemplo daquela trigger que cria a sequencia.
> Vc mandou ela em outro email ?
> No seu email só vi o exemplo do refcursor.
>  
> valeu,
> Marco.
> 
> 
> 
> From: oracle_br@yahoogrupos.com.br 
[mailto:[EMAIL PROTECTED] On Behalf Of PUB: Rafael 
Alexandre Schmitt
> Sent: quinta-feira, 3 de maio de 2007 14:51
> To: oracle_br@yahoogrupos.com.br
> Subject: Re: [oracle_br] Criacao de sequence e dar select no novo 
valor gerado..
> 
> 
> 
> Eu faria :
> 
> Declare
> cursor x is 
> 
> select t.campo1, t.campo2...from table t
> where t.codigo = parâmetro;
> 
> begin
> 
> for c1 in x loop
> 
> -- faça alguma coisa... 
> 
> end loop;
> 
> end;
> 
> Lembrando que não há motivo para selecionar todos os campos se você 
não irá utilizá-los.
> De preferência use sempre cursores explícitos, segundo a 
documentação isto melhora a perfomance.
> 
> --
> Rafael Alexandre Schmitt
> [EMAIL PROTECTED]   || www.hbtec.com.br
> Blumenau - Santa Catarina
> 
> - Original Message - 
> From: FERNANDES Marco A SOFTTEK 
> To: oracle_br@yahoogrupos.com.br   
> Sent: Thursday, May 03, 2007 11:35 AM
> Subject: RE: [oracle_br] Criacao de sequence e dar select no novo 
valor gerado..
> 
> Renan,
> concordo com seu argumento sobre a coluna identidade... acredito 
que seria no mínimo útil
> que se tivesse criado isso no oracle como existe em outros bancos. 
Mas enfim, isso não é
> o fim do mundo pois é facilmente contornável !
> 
> Com relação à procedure que retorna resultset eu já discordo em 
parte... acho que a forma
> de trabalhar no oracle é diferente dos outros bancos e acredito que 
não se faz necessário
> o uso desse tipo de procedure no oracle pelo uso de cursores ! os 
cursores são muito
> úteis e fáceis de se trabalhar. Tão simples como o próprio SELECT 
da sua proc !!!
> Se vc precisa por exemplo varrer o resultset pode fazer assim:
> 
> for c_sql in ( select * from tabela where codigo = 'XXX')
> loop
> -- aqui vc coloca seu código
> end loop;
> 
> Concordo se formos pensar que é de interesse da Oracle apresentar 
um BD que é compatível
> com outros bancos e facilidade para migração de banco (de banco XYZ 
para Oracle).
> 
> Bom, se puder mostrar em que pontos de sua aplicação vc faz uso 
dessas procedures a
> gente pode te ajudar a adaptar da melhor forma dentro do oracle.
> 
> Abraço,
> Marco.
> 
> 
> 
> From: oracle_br@yahoogrupos.com.br   [mailto:oracle_br@yahoogrupos.com.br 
 ] On Behalf Of PUB: Renan 
Nucci - CSM Soft
> Sent: quinta-feira, 3 de maio de 2007 11:19
> To: oracle_br@yahoogrupos.com.br  
> Subject: Re: [oracle_br] Criacao de sequence e dar select no novo 
valor gerado..
> 
> Blz,, agradeço as respostas,, 
> agora sinceramente, acho o cumulo o banco de dados mais utilizado 
do mundo nao ter uma maneira mais facil para esse tipo de 
problemas
> 
> Um outro ponto que eu nao estou acertando eh em relacao a 
procedures.. 
> 
> Pois se tenhu que fazer um select dentro de uma procedure eu 
preciso declarar um vetor ou jogar o resultado do select em uma 
variavel???
> 
> como faço pra declarar uma variavel pra acertar a procedure abaixo?
> 
> create procedure teste (:cod in varchar)
> is
> begin
> select * from tabela where codigo = :cod;
> end
> 
> 
> * Renan S. Nucci *
> * Desenvolvedor *
> * CSM Software *
> 
> - Original Message - 
> From: Andre Santos 
> To: oracle_br@yahoogrupos.com.br    
> Sent: Thursday, May 03, 2007 11:02 AM
> Subject: Re: [oracle_br] Criacao de sequen

[oracle_br] Re: Criacao de sequence e dar select no novo valor gerado..

2007-05-03 Por tôpico jlchiappa
Colega, "fácil" é relativo, tudo que vc sabe é "fácil", o que vc não 
sabe é "difícil" - eu sempre usei as sequences, não vejo assim 
taaanta dificuldade... E cito também que necessariamente, Oracle é 
DIFERENTE de SQLServer, MUITOS dos conceitos que vc tem em um não são 
os mesmos no outro, até porque o perfil de utilização, os volumes 
típicos, etc, são diferente... No caso em questão, inclusive, é o que 
ocorre, o Oracle implementa sequences porque as sequences podem ser 
cacheadas E não implicam em nenhum tipo de enqueue para se assegurar 
ausência de duplicidade, implica em performance superior via de regra 
cfrme citado em http://asktom.oracle.com/pls/asktom/f?
p=100:11:0P11_QUESTION_ID:6575961912937#6597836737589 . 

Quanto à pergunta de retorno de resultset via procedure, REF CURSOR é 
a resposta, em http://asktom.oracle.com/tkyte/ResultSets/index.html 
vc tem um exemplo, mas novamente o CONCEITO aqui é diferente, 
novamente , Oracle <> SQLServer Eu recomendaria fortemente que vc 
estudasse os manuais de Concepts e o Guia de Desenvolvedores Oracle, 
** justamente ** para que vc fique conhecendo os conceitos e 
recomendações da Oracle para se desenvolver em banco Oracle, 
necessariamente MUITO, mas MUITO MESMO do que vc já usa e conhece em 
SQLServer vai ser diferente Pra complementar os manuais, eu 
recomendo os livros "Expert Oracle Database Architecture: 9i and 10g 
Programming Techniques and Solutions", e o "Effective Oracle by 
Design" , ambos do autor Thomas Kyte, vão ser inestimáveis no seu dia 
a dia, se o teu objetivo é construir uma aplicação eficiente com o bd 
Oracle.

[]s

 Chiappa
 
--- Em oracle_br@yahoogrupos.com.br, "Renan Nucci - CSM Soft" 
<[EMAIL PROTECTED]> escreveu
>
> Blz,, agradeço as respostas,, 
> agora sinceramente, acho o cumulo o banco de dados mais utilizado 
do mundo nao ter uma maneira mais facil para esse tipo de 
problemas
> 
> Um outro ponto que eu nao estou acertando eh em relacao a 
procedures.. 
> 
> Pois se tenhu que fazer um select dentro de uma procedure eu 
preciso declarar um vetor ou jogar o resultado do select em uma 
variavel???
> 
> como faço pra declarar uma variavel pra acertar a procedure abaixo?
> 
> create procedure teste (:cod in varchar)
> is
> begin
> select * from tabela where codigo = :cod;
> end
> 
> 
> 
> * Renan S. Nucci *
> * Desenvolvedor *
> * CSM Software *
> 
>   - Original Message - 
>   From: Andre Santos 
>   To: oracle_br@yahoogrupos.com.br 
>   Sent: Thursday, May 03, 2007 11:02 AM
>   Subject: Re: [oracle_br] Criacao de sequence e dar select no novo 
valor gerado..
> 
> 
>   Só acrescentando, ao que o Marco já explicou, é possível criar um 
trigger
>   para "insert", obtendo o valor da sequence (dessa forma ficaria 
bem
>   semelhante ao uma coluna do tipo "autonumeração").
> 
>   [ ]'s
> 
>   André
> 
>   Em 02/05/07, FERNANDES Marco A SOFTTEK <
>   [EMAIL PROTECTED]> escreveu:
> 
>   > Renan,
>   > pequeno detalhe no seu select vc não usa mais a sequence !
>   > Use-a apenas no insert.
>   >
>   > O currentval da sequence não é o que vc procura.
>   > Vc precisa especificar o código na busca e não o valor da 
sequence.
>   > Como te disse, a sequence não tem relação com a tabela. É 
apenas um
>   > artifício para controlar um sequencia numérica.
>   >
>   > Portanto, não use o currentval no select, pois ele não serve 
para isso.
>   >
>   > Caso vc queira consultar o último registro inserido utilize a 
cláusula
>   > where usando max(campo_id).
>   >
>   > valeu, abraço,
>   > Marco.
>   >
>   > 
>   >
>   > From: oracle_br@yahoogrupos.com.br [mailto:
>   > oracle_br@yahoogrupos.com.br ] 
On Behalf
>   > Of PUB: Renan Nucci - CSM Soft
>   > Sent: quarta-feira, 2 de maio de 2007 17:52
>   > To: oracle_br@yahoogrupos.com.br 
>   > Subject: Re: [oracle_br] Criacao de sequence e dar select no 
novo valor
>   > gerado..
>   >
>   > Criei conforme vossa orientação, mas nao consigo selecionar o 
que foi
>   > inserido..
>   > O que esta errado no que fiz abaixo??
>   >
>   > /*cria a sequencia*/
>   > create sequence produtos_codigo increment by 1 minvalue 1 
nomaxvalue start
>   > with 1
>   > commit
>   >
>   > /*tenta nserir usando sequence*/
>   > ALTER SESSION SET NLS_DATE_FORMAT = 'YY/MM/DD' /*altera formato 
da
>   > sessao*/
>   > insert into Produtos values
(produtos_codigo.NEXTVAL, 'produto1', 5, 2,
>   > '2001-01-01') ;
>   > commit;
>   > /*seleciona o que foi inserido*/
>   > select * from produtos where codigo = produtos_codigo.CURRVAL;
>   >
>   > 
>   > * Renan S. Nucci *
>   > * Desenvolvedor *
>   > * CSM Software *
>   > 
>   > - Original Message -
>   > From: FERNANDES Marco A SOFTTEK
>   > To: oracle_br@yahoogrupos.com.br > oracle_br%40yahoogrupos.com.br>
>   > Sent: