2016-04-09 8 views
0

シリアル番号を作成するためにcreate record triggerでoracleで次のコードを使用しています。私はLM0001のようなシリアルナンバーが欲しい。 LM000 STRING WITH NUMBERを使用して、シリアル番号を生成するために両方を連結します。エラーora-06502が表示されます。私が間違っているところで助けが必要です。ここで、私は、コードを変更する必要がありますoracleで文字列を使用してシリアル番号を作成

DECLARE 
VCAN varchar2(40); 
L number (10); 
BEGIN 
SELECT MAX(SL_NO)INTO VCAN FROM LAND_MANAGEMENT; 
IF VCAN > 0 THEN 
    L := VCAN + 1; 
    :LAND_MANAGEMENT.SL_NO := 'LM000' || L; 
ELSE 
    :LAND_MANAGEMENT.SL_NO := 'LM000' || 1; 
END IF; 
EXCEPTION 
WHEN NO_DATA_FOUND THEN 
    :LAND_MANAGEMENT.SL_NO := 'LM000'|| 1; 
END; 
+2

を使用して問題を解決しましたそれにはLMが含まれています。追加する前にLMを削除する必要があります。1. dbms_outputを使用して変数の内容を確認し、デバッグします。そして、4つの固定されたゼロを持つことは、あなたが#1のためにしたいと言っているパターンと一致しません。 Lが10、または100のときはどうなりますか?とにかく、なぜあなたはシーケンスを使用していないのですか? –

+0

LMを保存しないでください。番号の値を保存し、希望の文字を表示にのみ連結してください。 –

答えて

0

はVCANをsシーケンス

シーケンスを作成

CREATE SEQUENCE LMANAGEMENT_SEQ 
    START WITH 21 
MAXVALUE 9999999999999999999999999999 
MINVALUE 0 
NOCYCLE 
CACHE 20 
NOORDER; 

when-create-recordトリガのSQLクエリー

select 'LM' || to_char(lmanagement_seq.nextval, '000000') INTO  
:land_management.sl_no 
from dual; 
関連する問題