我有这个工作代码。每次运行INSERT INTO "HR"."CITY" (CITY_ID) VALUES (0);
时,CITY_ID
中的数据将会增加一个像这样的CT0001, CT0002 ... CT0015
。用组合字符创建触发器
CREATE TABLE "HR"."CITY"
(
"CITY_ID" VARCHAR2(40 BYTE)
) ;
CREATE OR REPLACE TRIGGER "HR"."PK_MAX_TRIGGER_CITY"
BEFORE INSERT ON CITY
FOR EACH ROW
DECLARE
CNT NUMBER;
PKV CITY.CITY_ID%TYPE;
NO NUMBER;
BEGIN
SELECT COUNT(*)INTO CNT FROM CITY;
IF CNT=0 THEN
PKV:='CT0001';
ELSE
SELECT 'CT'||LPAD(MAX(TO_NUMBER(SUBSTR(CITY_ID,3,LENGTH(CITY_ID)))+1),4,'0') INTO PKV
FROM CITY;
END IF;
:NEW.CITY_ID:=PKV;
END;
/
ALTER TRIGGER "HR"."PK_MAX_TRIGGER_CITY" ENABLE;
我想要做的是这个E1, E2 ... E15
。
我的代码更改为:
IF CNT=0 THEN
PKV:='E1';
ELSE
SELECT 'E'||LPAD(MAX(TO_NUMBER(SUBSTR(CITY_ID,3,LENGTH(CITY_ID)))+1),4,'0') INTO PKV
它工作在第一添加E1
到数据库,但没有第二次。括号内的内容只是让我难以消化。我希望这里的任何人都能向我解释在托架中究竟发生了什么,并帮助我解决这个问题。
在此先感谢。
嗨,我真的很感谢你的解释。如果我正确理解这个'SELECT MAX(TO_NUMBER(SUBSTR(CITY_ID,2)))+ 1 FROM CITY;'选择最大数字,然后递增1?并且比'E'||'是否意味着'E或',因为符号'||'? – sg552
我的建议代码出现错误。 'TRIGGER HR.PK_MAX_TRIGGER_CITY错误:'错误是'PL/SQL:语句被忽略'和'PLS-00357:表,视图或序列参考'CITY_ID_SEQ.NEXTVAL'在此上下文中不允许。任何想法? – sg552
@ sg552:你使用的是哪个版本的oracle,这种语法在Oracle 11g中有效,否则在触发器中使用select语句来获取序列 –