2013-01-25 3 views
1

BPM 웹 응용 프로그램 내에서 특정 페이지에 인보이스 # 필드가 있지만 사용자가 송장을 첨부하고 해당 페이지를 볼 때마다 자동 생성되도록해야합니다. 이 번호는 고유해야하며 자동으로 증가해야합니다. 외부 MYSQL 데이터베이스에서 테이블을 조회하면 인보이스 번호 필드의 값을 표시 할 수 있습니다. 따라서 사용자가 특정 페이지를 방문 할 때마다 SELECT 쿼리 문이 실행될 수 있습니다.BPM 응용 프로그램에 대한 자동 증분 ID 생성

MySQL 끝에서 어떻게 설정합니까? 그래서 기본적으로, 예를 들어, 쿼리를 실행하는 해당 송장 # 필드에 대한 쿼리를 설치하고 싶습니다. invoice_nener FROM invoice_generator

이 매 쿼리가 실행될 때마다 다음 증분 값이 반환됩니다.

답변

1
현재 MySQL의 트리거 개념을 사용할 수 있습니다

.... 나는 하나의 예를 여기에 추가 한 ... 유 (이 링크를 참조하는 것은 매우 유용 할 것입니다 : HTTP : //www.freemindsystems.com/mysql를 -triggers-A-실제 - 예 /) 당신이 제품을 테이블에 삽입을 실행하면

CREATE TABLE `products` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `name` varchar(50) NOT NULL DEFAULT '', 
    `price` int(20) NOT NULL DEFAULT '0', 
    `other` varchar(50) DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    KEY `products_name_idx` (`name`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 


CREATE TABLE `freetags` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `tag` varchar(50) NOT NULL DEFAULT '', 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 


CREATE TABLE `freetagged_objects` (
    `tag_id` int(20) NOT NULL DEFAULT '0', 
    `object_id` int(20) NOT NULL DEFAULT '0', 
    `tagged_on` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    `module` varchar(50) NOT NULL DEFAULT '', 
    PRIMARY KEY (`tag_id`, `object_id`), 
    KEY `freetagged_objects_tag_id_object_id_idx` (`tag_id`, `object_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 

지금

DELIMITER || 
DROP TRIGGER IF EXISTS insert_products_tags; 
|| 
DELIMITER @@ 
CREATE TRIGGER insert_products_tags AFTER INSERT ON products 
    FOR EACH ROW 
    BEGIN 
    DECLARE current_id integer; 
    DECLARE tag_id integer; 
    DECLARE next integer; 
    DECLARE tag_field varchar(255); 
    DECLARE next_sep integer; 
    DECLARE current_tag varchar(255); 
    DECLARE right_tag varchar(255); 

    -- We use the field other as comma-separated tag_field 
    SET tag_field = NEW.other; 

    -- Check for empty tags 
    IF (CHAR_LENGTH(tag_field) <> 0) THEN 
     -- Loop until no more ocurrencies 
     set next = 1; 
     WHILE next = 1 DO 
     -- Find possition of the next "," 
     SELECT INSTR(tag_field, ',') INTO next_sep; 
     IF (next_sep > 0) THEN 
      SELECT SUBSTR(tag_field, 1, next_sep - 1) INTO current_tag; 
      SELECT SUBSTR(tag_field, next_sep + 1, CHAR_LENGTH(tag_field)) INTO right_tag; 
      set tag_field = right_tag; 
     ELSE 
      set next = 0; 
      set current_tag = tag_field; 
     END IF; 

     -- Drop spaces between comas 
     SELECT TRIM(current_tag) INTO current_tag; 

     -- Insert the tag if not already present 
     IF (NOT EXISTS (SELECT tag FROM freetags WHERE tag = current_tag)) THEN 
      -- Insert the tag 
      INSERT INTO freetags (tag) values (current_tag); 
      SELECT LAST_INSERT_ID() INTO tag_id; 
     ELSE 
      -- Or get the id 
      SELECT id FROM freetags WHERE tag = current_tag INTO tag_id; 
     END IF; 

     -- Link the object tagged with the tag 
     INSERT INTO freetagged_objects 
      (tag_id, object_id, module) 
      values 
      (tag_id, NEW.id, 'products'); 
     END WHILE; 
    END IF; 
    END; 
@@ 

을 INSERT_PRODUCTS_TAGS :

INSERT INTO PRODUCTS 
    (name, price, other) 
    values 
    ("product1", 2, "tag1, tag2,tag3 , tag 4"); 
+0

감사합니다. 올바른 방향으로 안내해주었습니다. – justWired