SQL Fiddle - ORACLE 11G и хранимая процедура - PullRequest
0 голосов
/ 11 июля 2020

Я хотел спросить о другой проблеме, и возникла еще одна;)

Я хотел использовать, например, SQL Fiddle, но у меня не получается создать таблицу и процедуру, которая генерирует случайные данные ...

Почему этот пример не работает (не работает схема сборки)?

http://sqlfiddle.com/#! 4 / 6915f / 2

create table tab (
     id_tab integer not null,
     val1 integer,
     val2 integer,
     val3 integer,
     val4 integer,
     val5 integer,
     val6 integer,
     val7 integer,
     val8 integer,
     val9 integer,
     CONSTRAINT tab_pk PRIMARY KEY (id_tab)
  );
  
  create index val1_index on tab (val1);
  create index val2_index on tab (val2);
  create index val3_index on tab (val3);
  create index val4_index on tab (val4);
  create index val5_index on tab (val5);
  create index val6_index on tab (val6);
  create index val7_index on tab (val7);
  create index val8_index on tab (val8);
  create index val9_index on tab (val9);
  
  create procedure test1 as
  begin
    for x in 1..1000
    loop
      insert into tab(id_tab, val1, val2, val3, val4, val5, val6, val7, val8, val9)
      values ((select nvl(max(id_tab), 0) + 1 from tab), 
              dbms_random.value(1,9), 
              dbms_random.value(1,9), 
              dbms_random.value(1,9), 
              dbms_random.value(1,9), 
              dbms_random.value(1,9), 
              dbms_random.value(1,9),
              dbms_random.value(1,9), 
              dbms_random.value(1,9), 
              dbms_random.value(1,9));
    end loop;
  end;

результат:

ORA-00900: invalid SQL statement

1 Ответ

1 голос
/ 11 июля 2020

Процедура должна заканчиваться косой чертой; поэтому вам нужно добавить это и изменить разделитель команд схемы сборки с ; по умолчанию на /, а затем изменить все другие разделители в вашем коде с точки с запятой на косую черту:

create table tab (
     id_tab integer not null,
     val1 integer,
     val2 integer,
     val3 integer,
     val4 integer,
     val5 integer,
     val6 integer,
     val7 integer,
     val8 integer,
     val9 integer,
     CONSTRAINT tab_pk PRIMARY KEY (id_tab)
)
/
  
create index val1_index on tab (val1)
/
create index val2_index on tab (val2)
/
create index val3_index on tab (val3)
/
create index val4_index on tab (val4)
/
create index val5_index on tab (val5)
/
create index val6_index on tab (val6)
/
create index val7_index on tab (val7)
/
create index val8_index on tab (val8)
/  
create index val9_index on tab (val9)
/
  
create procedure test1 as
begin
  for x in 1..1000
  loop
    insert into tab(id_tab, val1, val2, val3, val4, val5, val6, val7, val8, val9)
    values ((select nvl(max(id_tab), 0) + 1 from tab), 
            dbms_random.value(1,9), 
            dbms_random.value(1,9), 
            dbms_random.value(1,9), 
            dbms_random.value(1,9), 
            dbms_random.value(1,9), 
            dbms_random.value(1,9),
            dbms_random.value(1,9), 
            dbms_random.value(1,9), 
            dbms_random.value(1,9));
  end loop;
end;
/

Поскольку вам нужен анонимный блок для вызова процедуры, вам нужно сделать то же самое - включая изменение разделителя по умолчанию - и в другом разделе:

begin
  test1;
end;
/

select * from tab
/

SQL Fiddle

...