다음은 필드 id, id_user, order_id가있는 테이블입니다. 마지막 사용자 수를 찾기 위해 레코드를 생성하고 다음을 순서대로 삽입 할 때 필요합니다. 사용자에게 다음 주문 번호를 사용하는 저장 프로 시저를 작성했지만 고유 주문 번호도 제공하지 않습니다.0 번 순서로 고유 번호 필드를 지정하는 방법
CREATE OR REPLACE FUNCTION get_next_order()
RETURNS TRIGGER
LANGUAGE plpgsql
AS $function$
DECLARE
next_order_num bigint;
BEGIN
select order_id + 1 INTO next_order_num
from payment_out
where payment_out.id_usr = NEW.id_usr
and payment_out.order_id is not null
order by payment_out.order_id desc
limit 1;
-- if payments does't exist, return 1
NEW.order_id = coalesce(next_order_num, 1);
return NEW;
END;
$function$
CREATE TRIGGER get_next_order
BEFORE INSERT
ON payment_out
FOR EACH ROW EXECUTE
PROCEDURE get_next_order()
중복 주문 번호는 어떻게 피할 수 있습니까?
http://www.postgresql.org/docs/current/static/sql-createsequence.html에 대한 사용자 정의 '시퀀스'를 만들 수 있습니다. 또는 (더 간단하게) 해당 필드를 '직렬'로 정의 할 수 있습니다. ('create table'에서만 작동하고'alter table'에서는 작동하지 않습니다.) – pozs
나는 composite "sequence"를 한번도 해 보지 않았습니다. 예를 들어 주시면 감사하겠습니다. – gregman
* 복합 *되지 않습니다. 모든 테이블은 모든 수의 시퀀스를 소유 할 수 있습니다. 실제로는 해당 시퀀스를 소유 할 필요가 없습니다. 즉, 해당 열의 '기본'표현으로 충분할 수 있습니다. 당신이 알고 있어야하는 유일한 점은, 이러한 시퀀스는 * hole *을 가질 수 있지만, 그 열을 순서 지정에만 사용한다면 그것은 중요하지 않을 것입니다. – pozs