我有這個工作代碼。每次運行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語句來獲取序列 –