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 7893 게시물 읽기
No. 7893
Function호출 Error
작성자
penzer21(penzer21)
작성일
2009-06-03 17:33
조회수
8,287

pgAdmin으로 아래와 같은 사용자 함수를 만들었습니다.

CREATE OR REPLACE FUNCTION "InsertData2"(integer)
  RETURNS timestamp without time zone AS
$BODY$
begin
insert into testtable2 values($1);
return now();
end;$BODY$
  LANGUAGE 'plpgsql' VOLATILE


쿼리 분석기에서 위 함수를 아래와 같이 호출했습니다.

select InsertData2(1);

아래와 같은 Error가 발생했는데 그 원인을 도통 모르겠습니다.

당연히 tabletest2라는 table에 integer형을 갖는 column은 있습니다.

많은 가르침 부탁드립니다.

ERROR:  function insertdata2(integer) does not exist
LINE 1: select InsertData2(1);
               ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.

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

함수 이름에 큰 따옴표를 사용했네요.

그 경우는 대소문자를 구분하겠다는 뜻입니다.


이럴 때는 select 명령에서 그 함수를 호출 할 때도 대소문자를 구분한다고 큰따옴표로 둘러쌓야합니다.


큰 따옴표로 둘러쌓지 않으면 대소문자를 구분하지 않거든요.

김상기(ioseph)님이 2009-06-04 02:50에 작성한 댓글입니다.

우선 답변 감사합니다.

select "InsertData2"(1);


이렇게 하니까 잘 되네요


근데 pgAdmin으로 하면 무조건 "Function명"이렇게 만들던데


""빼고 만들수는 없나요?

penzer21(penzer21)님이 2009-06-04 09:32에 작성한 댓글입니다.

함수 이름을 모두 소문자로 쓰면 되겠죠.

김상기(ioseph)님이 2009-06-04 10:07에 작성한 댓글입니다.

"를 빼면 대소문자 구분하지 않기 때문에 ^^;

꼭 대소문자 구분을 하게 하시려면 어쩔수 없은 " 넣어주셔야 합니다.

김병석(byung82)님이 2009-06-04 14:07에 작성한 댓글입니다.

답변 정말 감사드립니다.

한가지 더 질문이 있는데요

아래와 같이 만든 integer형을 받아서 만족하는 모든 record를 리턴하는 함수integer형을 받아서 만족하는 모든 record를 리턴하는 Function을 호출하려고 하는데 Error가 발생했습니다.

왜 그런건가요?

CREATE OR REPLACE FUNCTION "SelectData"(integer) RETURNS SETOF record AS
$BODY$declare
result testtable2;
begin

result := 'select * from testtable2 where nonumber = $1';

execute result;
end;
$BODY$


Error내용:
ERROR:  cannot assign non-composite value to a row variable
CONTEXT:  PL/pgSQL function "SelectData" line 6 at assignment

penzer21(penzer21)님이 2009-06-04 14:08에 작성한 댓글입니다.

result := 'select .....';

이부분은 result 에 문자열을 담는 것입니다.


근데 result 를 testtable2 타입으로 정의하셨습니다.


table (record ) 타입으로 정의하면서

문자열을 담을려면 에러가 나는건 당연한 겁니다.

tyro님이 2009-06-04 22:04에 작성한 댓글입니다. Edit

우선 답변 감사합니다.

그런데

result := 'select * from testtable2 where nonumber = $1';

이부분에서 ''빼고

result := select * from testtable2 where nonumber = $1;

했는데도 select근처에 문법error가 나네요

뭐가 잘못된건지 도통 모르겠어요

알려주세요

penzer21님이 2009-06-05 11:32에 작성한 댓글입니다. Edit

이렇게 해보시기 바랍니다


declrea

r testtable2

begin

select * into r from testable2 where nonumber = $1

end;

김병석(byung82)님이 2009-06-06 14:08에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
7904pgadmin III에서 default로 UHC를 setting 하는 법을 알고 싶습니다. [1]
박춘삼
2009-06-05
6704
7902LEFT OUTER JOIN 과 LEFT JOIN 차이? [1]
초보
2009-06-05
7454
7898bytea[] dbtyte형은 [1]
궁굼이
2009-06-04
6736
7893Function호출 Error [8]
penzer21
2009-06-03
8287
7892테이블 생성시 칼럼 정의를 넣으려고 하는데요. [2]
박춘삼
2009-06-03
6566
7888pgAdmin3 테이블 만들시 varchar 데이터형... [1]
안녕하세요
2009-06-02
6812
7861트리거가 오동작 하는것 같아요 [1]
megabit
2009-05-30
6442
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다