codexedoc 0 Denunciar post Postado Abril 11, 2008 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
Motta 645 Denunciar post Postado Abril 11, 2008 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
codexedoc 0 Denunciar post Postado Abril 11, 2008 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
Motta 645 Denunciar post Postado Abril 11, 2008 Troca o Insert INSERT INTO TAB_NUMERO VALUES (SEQ_3.NEXTVAL); Compartilhar este post Link para o post Compartilhar em outros sites
codexedoc 0 Denunciar post Postado Abril 11, 2008 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
Motta 645 Denunciar post Postado Abril 11, 2008 Não entendo o que seu professor quer. Compartilhar este post Link para o post Compartilhar em outros sites
codexedoc 0 Denunciar post Postado Abril 12, 2008 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
Motta 645 Denunciar post Postado Abril 14, 2008 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
hinom 5 Denunciar post Postado Abril 14, 2008 o seu professor mencionou a versão do banco de dados ? 9i, 10g, 11g .. ?? Compartilhar este post Link para o post Compartilhar em outros sites
codexedoc 0 Denunciar post Postado Abril 14, 2008 o seu professor mencionou a versão do banco de dados ? 9i, 10g, 11g .. ?? ESTAMOS USANDO A 10G Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Abril 16, 2008 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
alphamek 2 Denunciar post Postado Abril 18, 2008 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
codexedoc 0 Denunciar post Postado Abril 18, 2008 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
alphamek 2 Denunciar post Postado Abril 18, 2008 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
hinom 5 Denunciar post Postado Abril 20, 2008 legal, mas pensei que fosse alguma vulnerabilidade Compartilhar este post Link para o post Compartilhar em outros sites
alphamek 2 Denunciar post Postado Abril 22, 2008 Na verdade não é vulnerabilidade, e sim, apenas um opção para a instrução INSERT. :blick: Compartilhar este post Link para o post Compartilhar em outros sites