【发布时间】:2020-04-03 13:02:56
【问题描述】:
我正在尝试编写一个 Oracle SQL 表,以便每当插入一行时(通过 Oracle APEX 表单),PK 都会自动填充一个自动递增的 varchar 类型。例如。 TNT00000001, TNT00000002, TNT00000003...
create table sample (
Tnt_ID CHAR(8) NOT NULL,
wtv NUMBER(3)
);
CREATE SEQUENCE Tnt_ID_Auto
MINVALUE 1 START WITH 1 INCREMENT BY 1 CACHE 10;
CREATE OR REPLACE TRIGGER sample_on_insert
BEFORE INSERT ON sample
FOR EACH ROW
BEGIN
SELECT CONCAT('TNT', LPAD(Tnt_ID_Auto.nextval, 5, '0'))
INTO :new.Tnt_ID
FROM dual;
END;
当我尝试运行时:
INSERT INTO SAMPLE (wtv) VALUES (1);
我得到了错误
PLS-00103:遇到符号“INSERT”
【问题讨论】:
-
LPAD(Tnt_ID_Auto.nextval, 5, '0')不会为您提供TNT00000001btw 所需的零个数 -
敢说你也可以将触发器简化为
:new.Tnt_ID := CONCAT('TNT', LPAD(Tnt_ID_Auto.nextval, 8, '0')); -
脚本中的 INSERT 上方是什么?
-
我不确定你的意思。插入语句之前的代码是从创建表到结束的东西
-
基本上the same as this - 缺少一个斜线。