我需要通过pl / sql存储过程将数据插入到特定的表中。我的要求是:
答案 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>;
过滤字符串字段,我会在进入数据库之前亲自处理代码(如果可能的话)。众所周知,数据库在处理字符串操作时效率很低。