我有一个名为:
的oracle表create table InsertHere(
generate_id varchar2(10),
name varchar2(100)
);
我必须从网上插入此表中的数据。在网络表单中有两个 要素:
类型和名称
。我必须从用户选择的类型中生成'generate_id'。
任务:
在插入InsertHere表之前,我必须生成 generate_id 。然后我必须插入 'generate_id'和'name'进入InsertHere表。但是ID的生成必须在内部完成 数据库(可能有程序)。
问题:
如何有效地完成这件事?
我需要建议。
提前致谢
答案 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>
您可以根据您的调用方式改变精确的实施方式。通常情况下,细节很重要,更多信息往往会产生更相关的答案。