PostgreSQL 8.1.3 를 리눅스에서 설치 했습니다
Procedure 를 정의하려하니 에러가 나네요.
create or replace procedure cs_test is
begin
.......
end;
이런식으로 설치하면되는거 아닌가요?
pgsql에는 create [or replace] procedure 라는 문법이 없습니다~
create [or replace] function 쪽을 보시면 되겠습니다~
http://database.sarang.net/database/postgres/manual/manual-8.0/sql-createtrigger.html
http://database.sarang.net/database/postgres/manual/manual-8.0/xplang.html
답변 감사합니다
그렇다면 function 이 procedure 와 이름만 틀릴뿐 기능은 똑같은건가요
구현하시는 것에 따라 다른데 부족한 점이 있어도 다양한 확장으로 가능하실 겁니다 ㅎㅎ
지원되는 프로시저 언어가 많거든요. 서버에 특정 값을 유지시키게 할 수도 있고요 ㅋ
답변감사합니다
예제를 보고 해보는데 문서마다 예제가 틀리고....
해봐도 에러만나고...
create or replace function cs_test is
select * from test;
이런식으로 간단하게 예제 하나만 보여주실수 있나요.
그리고 프로시저를 정의 하다가 중간에 ';' 를 만나면 명령이 실행이 되버립니다
MySql 의 delimiter // (';' 대신에 임시로 '//' 를 실행으로) 같은 명령어는 없나요
샘플에 보시면요
CREATE FUNCTION add(integer, integer) RETURNS integer AS 'select $1 + $2;' LANGUAGE SQL IMMUTABLE RETURNS NULL ON NULL INPUT;
CREATE OR REPLACE FUNCTION increment(i integer) RETURNS integer AS $$ BEGIN RETURN i + 1; END;$$ LANGUAGE plpgsql;
라고 되어 있습니다. 문법을 보시면 함수이름(integer, integer) 처럼 함수의 원형을 지정하고 RETURNS integer로 이 함수의 리턴타입을 지정해 줍니다.
그리고 AS 후에 ' 나 $$ 로 감싸지는 함수의 내용을 적어주시면 됩니다.
이것을 그대로 pgsql 에서 사용한다면 이런식이 되겠쬬
create or replace function cs_test() returns setop record as $$
$$ language sql;
이러면 될거 같은데..
오라클이나 다른 DB 를 보면 function 과 procedure 를 구분하고 있습니다. (전 그것이 맞다고 봅니다.)
차이는 리턴값이 있느냐 없느냐 입니다.
function 은 리턴값을 가지고 procedure 의 경우 어떤 내용을 실행하고 끝내는 것을 말합니다.
pgsql 의 경우 상황에 따라 두가지 모두를 function 으로 처리할 수 있습니다.
굳이 따로 두실 필요는 없습니다.
네 답변 감사합니다~^^
좋은 하루 되세요~