插入前的网页插入和触发器

时间:2009-12-09 16:49:38

标签: sql oracle oracle10g

我有一个名为:

的oracle表
create table InsertHere(
    generate_id varchar2(10),
    name varchar2(100)
);

我必须从网上插入此表中的数据。在网络表单中有两个 要素:

  

类型和名称

。我必须从用户选择的类型中生成'generate_id'。

  

任务:

在插入InsertHere表之前,我必须生成 generate_id 。然后我必须插入 'generate_id'和'name'进入InsertHere表。但是ID的生成必须在内部完成 数据库(可能有程序)。

问题:

如何有效地完成这件事?

我需要建议。

提前致谢

1 个答案:

答案 0 :(得分:1)

这完全取决于“生成ID”的含义。 ID是我假定的主键,因此无论TYPE如何,它的值必须是唯一的。那么您想要将哪些规则应用于其生成?

这是一个指示性方法。这会使用序列来获取值并预先设置一个字符,具体取决于type

SQL> create or replace function generator
  2      (p_type varchar2
  3       , p_name in inserthere.name%type)
  4      return inserthere.generate_id%type
  5  is
  6      c char(1);
  7      return_value inserthere.generate_id%type;
  8  begin
  9      case p_type
 10          when 'EXTREME' then
 11              c := 'X';
 12          when 'REGULAR' then
 13              c := 'R';
 14          when 'JUMBO' then
 15              c := 'J';
 16          else
 17              c := 'P';
 18      end case;
 19
 20      insert into inserthere
 21          ( generate_id,
 22          name)
 23      values
 24          (c || lpad(trim(to_char(my_seq.nextval)), 9, '0')
 25           , p_name )
 26      returning generate_id into return_value;
 27
 28      return return_value;
 29  end;
 30  /

Function created.

SQL>

这里正在行动

SQL> var n varchar2(10)
SQL> exec :n := generator ('EXTREME', 'ABC')

PL/SQL procedure successfully completed.

SQL> print n

N
--------------------------------
X000000001

SQL> exec :n := generator ('WHATEVER', 'SOMETHING')

PL/SQL procedure successfully completed.

SQL> print n

N
--------------------------------
P000000002

SQL>

您可以根据您的调用方式改变精确的实施方式。通常情况下,细节很重要,更多信息往往会产生更相关的答案。