Ir para conteúdo

Arquivado

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

codexedoc

insert sequence

Recommended Posts

Ola amigos

 

Estou aprendendo oracle e o meu professor passou o seguinte exercicio:

1º - Criar uma tabela TAB_NUMERO, com uma única coluna NUMEROS NUMBER(10);

isso eu fiz :)

2º - Inserir numeros de 1 a 1000000; aqui eu me perdi :(

 

 

Eu criei uma sequencia de nome SEQ_3

com os seguintes parametros:

 

CREATE SEQUENCE SEQ_3

START WITH 1

MAXVALUE 1000000

INCREASED BY 1;

 

E depois tentei:

 

INSERT INTO TAB_NUMERO VALUES (SEQ_3.NEXTVAL);

 

O problema é que só é criado uma linha e não um milhão delas, como pede o problema.

Alguém poderia me dar uma luz?

http://forum.imasters.com.br/public/style_emoticons/default/blush.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nem precisa da seq.

 

BEGIN

FOR I IN 1..1000000

LOOP

INSERT INTO TABELA(I);

END LOOP;

END;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nem precisa da seq.

 

BEGIN

FOR I IN 1..1000000

LOOP

INSERT INTO TABELA(I);

END LOOP;

END;

obrigado pela dica. acredito que seja esse o caminho, porém, esta é uma questão didatica por isso a obrigatoriedade do usa de SEQUNCE

Compartilhar este post


Link para o post
Compartilhar em outros sites

Troca o Insert

 

INSERT INTO TAB_NUMERO VALUES (SEQ_3.NEXTVAL);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Troca o Insert

 

INSERT INTO TAB_NUMERO VALUES (SEQ_3.NEXTVAL);

Obrigado pela ajuda, mas ainda não é essa a resposta desejada porque assim só vai ser adicionado uma única linha nessa tabela. tenho que fazer esse INSERT para um milhão de linhas e sem que seja com / Enter

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem, a minha última aula foi sobre sequence, nextval currval.

O exercicio proposto foi que nós criassemos uma tabela, de nome TAB_NUMEROS, com uma única coluna, a NUMERO que fosse NUMBER(5) e que nós inserissemos um milhão de linhas, de 1 a 1.000.000, o que ficou muito claro é que isso fosse feito usando uma sequencia, a SEQ_3, sitada no acima( no meu primeiro post deste forum). o problema que eu não consegui resolver foi que usando um INSERT INTO TAB_NUMEROS VALUES(SEQ_3.NEXTVAL), só insere uma única linha e não um milhão de linhas, como foi solicitado. O que eu me lembro que o professor disse foi que havia um furo no INSERT que seria relacionado a algum JOIN, mas estou pensando em qual e como fazer isso, porém ainda não descobri e resolvi pedir a ajuda aqui neste forum... ... fui claro em descrever o que o professor pede ?

Grato

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não conheço jeito de inserir 1000000 de linhas sem fazer loop.

 

Quando ele der esta solução gostaria de ve-la.

Compartilhar este post


Link para o post
Compartilhar em outros sites

na verdade isso nao existe "oficialmente"

 

afinal.. o seu professor quer que vcs explorem uma vulnerabilidade ?

se for isso procure por "oracle SQL injection"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom.... pelo que conheço sem LOOP acho meio complicado inserir 100000 num único INSERT!!!

 

Segundo, as vulnerabilidades de SEQUENCES são bem conhecidas, porém, para pegar SEMPRE a próxima sequência será necessário utilizar o SEQUENCE.NEXT_VAL

 

 

O resto é só se tentar inserir utilizando SQL*LOADER, EXTERNAL TABLES ou CREATE TABLE AS SELECT!!!

 

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom.... pelo que conheço sem LOOP acho meio complicado inserir 100000 num único INSERT!!!

 

Segundo, as vulnerabilidades de SEQUENCES são bem conhecidas, porém, para pegar SEMPRE a próxima sequência será necessário utilizar o SEQUENCE.NEXT_VAL

 

 

O resto é só se tentar inserir utilizando SQL*LOADER, EXTERNAL TABLES ou CREATE TABLE AS SELECT!!!

 

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

 

Obrigado pela dica, e tem mesmo que usar SQ_3.NEXTVAL:

Bem, vamos a solução:

 

-- Criando a sequência

 

CREATE SEQUENCE SEQ_3

START WITH 1

MAXVALUE 1000000

INCREMENT BY 1;

 

-- CRIANDO A TABELA

 

CREATE TABLE TAB_NUMERO (

NUMERO NUMBER(7));

 

-- O INSERT

 

INSERT INTO TAB_NUMERO ( SELECT SEQ_3.NEXTVAL FROM EMP A, EMP B, EMP C, EMP D, EMP E WHERE ROWNUM <1000001);

 

 

A razão pra isso é didática e pra responder a uma única pergunta:

com um insert, pode-se inserir apenas uma linha, ou mais? justifique.

essa pergunta foi feita num teste que eu fiz ontem...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara.... PIOR que é verdade. Irá funcionar SIM!!!

 

Eu não tinha pensado dessa maneira. Mas, se tentar executar, perceberá que irá conseguir inserir todos os registros, segue um teste que fiz aqui no banco de dados.

 

SQL> conn rodrigo@pel_dist_dm1
Conectado.
SQL>
SQL>
SQL> create sequence TST
  2  start with 1
  3  maxvalue 10000000
  4  increment by 1;

Sequência criada.

SQL> create table TSTDBA (a number(8));

Tabela criada.

SQL> insert into TSTDBA (select TST.NEXTVAL from NF_VENDA where rownum < 1000000);

999999 linhas criadas.

SQL> select count(*) from TSTDBA;

  COUNT(*)
----------
	999999

SQL> select * from TSTDBA where a between 1 and 11;

		 A
----------
		 1
		 2
		 3
		 4
		 5
		 6
		 7
		 8
		 9
		10
		11

11 linhas selecionadas.

SQL>

Vivendo e aprendendo rapaz!!! Funcionou certinho!!

 

Abraços, :lol:

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.