SQL Fiddle - ORACLE 11G 和存储过程

SQL Fiddle - ORACLE 11G and Stored procedure

我想再问一个问题,结果又出来了一个;)

例如,我想使用 SQL Fiddle,但是创建 table 和生成随机数据的过程对我来说不起作用...

为什么这个例子不起作用(构建模式不起作用)?

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

程序必须以斜杠结束;所以你需要添加它,并将 build-schema 命令分隔符从默认的 ; 更改为 / - 然后将代码中的所有其他分隔符从分号更改为斜杠:

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