database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Q&A 7404 게시물 읽기
No. 7404
function에 array전달하기질문입니다 - 트랜잭션도 질문드려요
작성자
서정주(moreta)
작성일
2008-04-17 10:44ⓒ
2008-04-17 10:46ⓜ
조회수
6,980

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입니다... 좀 구버젼인가요 ;;;

이 글에 대한 댓글이 총 3건 있습니다.

1.
배열은

예로 int[] 배열 타입이라면 ARRAY[1,2,3] 요런식으로 ^-^

text[] 라면 ARRAY['1', '2' , '3' ] 이게 되겠죠 >.<;

SQL 로는

select * from insert_priv( ARRAY['test1','test2'] , ARRAY['test3','test4'] );

요렇게 ^-^;


2.
루프는 
http://www.postgresql.org/docs/8.3/interactive/plpgsql-control-structures.html#PLPGSQL-RECORDS-ITERATING

3. 네~

4. 
http://developer.postgresql.org/pgdocs/postgres/sql-savepoint.html
^-^님이 2008-04-17 16:19에 작성한 댓글입니다.
이 댓글은 2008-04-17 16:19에 마지막으로 수정되었습니다. Edit

감사합니다. 

그런데 문서들이 8.x인데요.. 

7.3에서 적용이 가능할런지..


2. 사실은 루프를 돌리는 방식보다는 받아온 array의 size를 어떻게 아느냐가 궁금했던건데요 제가 설명을 잘못드렸나보네요
3. 되는군요 ㅋ
4. 이것도 8.x대 문서인것같은데요... 테스트해보고 결과를 올려보겠습니다.

서정주(moreta)님이 2008-04-17 17:33에 작성한 댓글입니다.

7.3이면 가능하면 업글을 생각해보세요.

pgsql은 마이너 업그레이드도 엄청 개선이 되기 때문에...

그리고 7.4도 상당히 변화된 버전이었던 것 같아요.


무엇보다 어레이 갯수 얻는 함수가 7.4 부터...;;;


array_lower()와 array_upper()가 그것입니다.

님이 2008-04-18 10:44에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
7408- [1]
아무개
2008-04-21
5843
7406PostgreSQL 에서 자동증가 필드를 만들고 싶습니다. [2]
이태영
2008-04-21
6337
7405질문입니다. [1]
처리
2008-04-17
5793
7404function에 array전달하기질문입니다 - 트랜잭션도 질문드려요 [3]
서정주
2008-04-17
6980
7401sql구문강조머쓰세요? [2]
서정주
2008-04-16
6437
7400[UNICODE] 업그레이드 시 restore에 문제가 발생합니다. [7]
강현웅
2008-04-16
6117
7399UTF-8 DB의 한글을 ORACLE KSC locale에 넣을려고 합니다. [2]
정진기
2008-04-16
6135
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.027초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다