【问题标题】:SQL Fiddle - ORACLE 11G and Stored procedureSQL Fiddle - ORACLE 11G 和存储过程
【发布时间】:2020-07-11 11:57:25
【问题描述】:

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

例如,我想使用 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

【问题讨论】:

标签: oracle sqlfiddle


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-07
    • 2014-05-07
    • 2020-06-15
    • 1970-01-01
    • 2012-09-02
    • 1970-01-01
    • 2021-05-22
    相关资源
    最近更新 更多