如何通过pl / sql存储过程将数据插入表中时生成主键值

时间:2010-04-10 15:38:39

标签: sql plsql oracle10g

我需要通过pl / sql存储过程将数据插入到特定的表中。我的要求是:

    插入时,
  • 应为特定列生成PRIMARY KEY值;
  • 它应该将PRIMARY KEY值返回给输出变量;和
  • 对于另一列,它应该验证我的字符串,使其只包含字符,而不是整数。

2 个答案:

答案 0 :(得分:3)

您可以使用Oracle SEQUENCE生成主键值作为代理键。您可以对使用TRANSLATE的列创建约束,以检查新插入/更新的数据中是否存在数字。

一些适用于SQL * Plus的示例代码:

CREATE SEQUENCE mysequence;
/

CREATE TABLE mytable (
   pkidcol NUMBER PRIMARY KEY,
   stringcol VARCHAR2(100)
);
/

ALTER TABLE mytable ADD (
   CONSTRAINT stringnonnumeric
   CHECK (stringcol = TRANSLATE(stringcol,'A0123456789','A'))
);
/

DECLARE
   mystring mytable.stringcol%TYPE := 'Hello World';
   myid     mytable.pkidcol%TYPE;
BEGIN    
   INSERT INTO mytable (pkidcol, stringcol)
   VALUES (mysequence.NEXTVAL, mystring)
   RETURNING pkidcol INTO myid;
END;
/

答案 1 :(得分:1)

在oracle中我相信“identity”列最好用一个序列和一个insert触发器来检查主键列是否为null,如果是,则获取下一个序列并插入它。

然后您可以使用“returns”子句来获取新创建的主键:

insert into <table> (<columns>) values (<values>) returning <prim_key> into <variable>;

过滤字符串字段,我会在进入数据库之前亲自处理代码(如果可能的话)。众所周知,数据库在处理字符串操作时效率很低。