CREATE OR REPLACE FUNCTION insert_priv(text[], text[]) RETURNS integer AS $$
DECLARE
v_name ALIAS FOR $1;
v_user ALIAS FOR $2;
BEGIN
--여기서부터 loop / text[]의 크기만큼
INSERT INTO privilege(user, name)
VALUES(v_user, v_name);
IF NOT FOUND THEN
RAISE EXCEPTION 'insert_fail';
RETURN -1;
END IF;
--여기까지
END;
$$ LANGUAGE plpgsql;
대충 이런식으로 짜고 싶은데요.. php에서 배열값으로 전달해준것을 fuction에서 배열로 받아서
그 배열의 크기만큼 루프돌면서 insert를 하고 싶은데요
FOR record IN SELEC * FROM table로 루프를 돌리는것은 알겠는데 배열의 크기만큼도 돌릴수 있을까요?
그리고 function에 배열값을 전달하는것도 가능한건지 모르겠네요
아 그리고 위처럼 exception을 발생시키고 바로 다음에 return하면 return값이 리턴되나요? 아니면 exception에서 멈추나요?
또 루프돌다가 중간에 insert가 실패하면 rollback을 시키고 싶은데요.. 검색을 해보니
postgresql은 function안에서는 rollback이 안된다고 하던데(오라클은 되나? 되던것같던데).. 그럼 디비단에서의 롤백은 불가능한건지요?
질문이 잡다하게 많네요..
정리하면
1. function에 배열값을 전달할수있습니까?
2. 전달받은 배열을 function안에서 루프를 돌릴수 있나요? 그 방법은?
3. exception 발생뒤 리턴값은 전달되나요?
4. DML실패시 롤백방법은?
PostgreSQL 7.2입니다... 좀 구버젼인가요 ;;; |