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 7263 게시물 읽기
No. 7263
function을 만든후에 호출시
작성자
김병석(byung82)
작성일
2007-11-07 22:08
조회수
6,109

function을 다음과 같이


-- Function: sp_add_new_user(bigint)


-- DROP FUNCTION sp_add_new_user(bigint);


CREATE OR REPLACE FUNCTION sp_add_new_user(bigint)

  RETURNS void AS

'INSERT INTO member( id ) VALUES( $1 );'

  LANGUAGE 'sql' VOLATILE;

ALTER FUNCTION sp_add_new_user(bigint) OWNER TO "IP_PC";

GRANT EXECUTE ON FUNCTION sp_add_new_user(bigint) TO public;

GRANT EXECUTE ON FUNCTION sp_add_new_user(bigint) TO "IP_PC";


만들었습니다.


그런후


EXECUTE sp_add_new_user( 1 );


이렇게 호출을 하면


다음과 같은 에러가 납니다.



ERROR: prepared statement "sp_add_new_user" does not exist

SQL state: 26000


Hint: No function matches the given name and argument types. You may need to add explicit type casts.



그런고 Hint에 저렇게 나오는데 아무리 봐도 잘못한게 없어 보이는데


왜 그런지 답변 부탁드립니다.


function으로 호출하도록 만들려는 중인데 안되면 직접 코드에 쿼리를 넣어야 하나 ㅠ.ㅠ


그럼 답변 기다리겠습니다.


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

excute 는 두가지경우에 사용되어집니다.


쿼리문에서 사용할 경우에는 메세지에도 나와 있듯이

prepare 로 지정된 것을 호출할때 사용합니다.


prepare add_member (bigint) as insert into member (id) values ($1);


excute add_member ('id');


이런 식이죠..

두번째 호출할때는


프로시저나 펑션에서 호출할 경우인데..

다른 언어에서의 eval () 기능 (표현이좀 그런가요?) 을 하는 목적으로상요되어 집니다.



declare

    _txt text;

begin

    _txt := 'select * from table';  -- 쿼리문을 _txt 에 저장합니다.

   excute _txt;

.....


end;


그리고


만든 펑션 을 호출할때는 그냥 select 하시면 됩니다.


select add_member ('id');


이런 식이죠..


물론 펑션의 리턴타입이 tuple (setof record 형 으로 컬럼이 여러개일경우) 일 경우에는


select * from function (args) as t (args list );

형태와 같이 해야 겠죠..

tyro님이 2007-11-07 23:21에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
7266UNICODE / UTF8 ?? [2]
장현성
2007-11-12
6310
7265트리거를 삭제 했는데도 계속 유효한 이유가 무엇인지 모르겠습니다.
김대헌
2007-11-08
5626
7264plpythonu에서 execute후 자료가 없을시
김병석
2007-11-08
5249
7263function을 만든후에 호출시 [1]
김병석
2007-11-07
6109
7262template1 DB 초기화는 어떻게? [2]
tyro
2007-11-07
5741
7261OID 에러 [1]
김대헌
2007-11-07
5304
7260left out join 후의 order by에 대해서. [1]
moons
2007-11-07
5607
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다