2016-07-29 2 views
0

Пожалуйста, обратите внимание ниже процедурыКак вставить случайное число в один раз в SQL

begin 
for i in 0..99 
loop 
insert into cx_vf_Test_ids values (100+i,'STB','N'); 
end loop; 
commit; 
end; 

Это вставит 100 значений последовательно от 100 до 199 и для каждого значения «СТБ» и «N» будет оставаться таким же.

Мое требование, чтобы вставить случайные значения, которые я получаю от моей команды, например 101,187,193,138,189 ...... в этом случае я имею только 100 значений и STB и N будет оставаться таким же

Пожалуйста, дайте ваше предложение.

+0

разрешены дубликаты? – vercelli

+2

«случайные значения, которые я получаю от своей команды» - так как они случайны? И вы все еще получаете все 100 значений (от 100 до 199) только в случайном порядке, что неуместно, поскольку база данных не будет хранить их в том порядке, в котором они были вставлены? Или будут ли цифры вне этого диапазона, и/или пробелы и дубликаты? –

+0

У меня есть 89441000300300020009,894410003003000200017,89441000300300020003, 89441000300300020012, как у меня есть всего 100 нет, что я получаю от своей команды в текстовом файле, поэтому только те числа, которые записаны в файле, мне нужно вставить только те и каждые 2 дня, я получаю этот файл содержащий новый номер 100 и снова необходимо вставить этот файл. у вас есть какое-то решение –

ответ

0
create table temp 
(
num number(4), 
varc varchar(5), 
varc1 varchar (5)) 
; 
begin 
for i in 0..99 
loop 
insert into temp values (trunc(dbms_random.value(100,199)),'STB','N'); 
end loop; 
end; 

Выход: select * from temp;

109 STB N 
163 STB N 
169 STB N 
137 STB N 
145 STB N 
184 STB N 
107 STB N 

Так что вы должны что-то неправильно. Он отлично работает в моем SQLDev.

+0

Привет, Михал, спасибо за ваше предложение, но я хочу вставить число, которое у меня сейчас есть 89441000300300020009,894410003003000200017,89441000300300020003 –

+1

Итак, случайные числа Михала не были случайными числами, которые вы искали? Что означает "как 89441000300300020009,894410003003000200017,89441000300300020003" означает? После того, как вы определили требование, мы можем перейти к части «в одном месте в SQL». –

+0

Редактирование было сделано –

0

Получите вашу команду, чтобы вставить «случайные» значения в таблицу, а затем сделать выбор вставки. Например. этот путь:

create table so58a_t (num number); 

insert into so58a_t values (101); 
insert into so58a_t values (187); 
insert into so58a_t values (193); 
insert into so58a_t values (138); 
insert into so58a_t values (189); 

create table so58b_t (num number, foo varchar2(10), bar varchar2(10)); 

insert into so58b_t(num, foo, bar) 
select 
100 + num 
,'STB' 
,'N' 
from so58a_t; 

дает результат:

select * from so58b_t order by num; 

     NUM FOO  BAR 
---------- ---------- ---------- 
     201 STB  N 
     238 STB  N 
     287 STB  N 
     289 STB  N 
     293 STB  N 

Таблица также может быть внешняя таблица.

+0

У меня есть 89441000300300020009,894410003003000200017,89441000300300020003, 89441000300300020012 вот так у меня есть всего 100 нет, что я получаю от своей команды в текстовом файле, поэтому только те числа, которые записаны в файл, мне нужно вставить только те и каждые 2 дня Я получаю этот файл, содержащий новый номер 100, и снова нужно вставить этот файл. у вас есть решение –

+0

@RshiKant Да, у меня есть. Первый вариант - импортировать значения чисел из текстового файла в таблицу базы данных (например, с помощью SQL Developer). В этом случае вы можете применить решение выше. Второй вариант заключается в использовании _external table_ (используйте ваш google-fu для деталей) при загрузке номеров в базу данных. – user272735

+0

Пожалуйста, объясните второй вариант –

0

Пример для генерации случайного числа знаков после запятой witout:

DECLARE 
    N NUMBER; 
BEGIN 
    N := DBMS_RANDOM.VALUE(100, 199); 
    --Number without deimals 
    N := TRUNC(N, 0); 
    -- Print output on screen 
    DBMS_OUTPUT.PUT_LINE(N); 
END; 
/
+0

У меня есть 89441000300300020009,894410003003000200017,89441000300300020003, 89441000300300020012, как у меня есть всего 100 нет, что я получаю от своей команды в текстовом файле, поэтому только те числа, которые записаны в файл, мне нужно вставить только те и каждые 2 дней я получаю этот файл, содержащий новый номер 100, и снова нужно вставить этот файл. есть ли у вас какое-либо решение? –

Смежные вопросы