테이블에 타임 스탬프 값을 삽입해야합니다. 저장 프로 시저를 작성하여 값을 삽입합니다.
이것은 내 저장 프로 시저에 대한 코드입니다. 내가 쿼리 Select * From dataInsert_Schedule();
를 쓸 때 포스트 그레스에서 타임 스탬프 선언하기
CREATE OR REPLACE FUNCTION dataInsert_Schedule() RETURNS boolean As
$$
DECLARE
i integer;
j integer;
dur integer;
tup Channel%rowtype;
BEGIN
FOR tup IN SELECT * FROM Channel
LOOP
for i in 0..6 LOOP --days
for j in 0..23 LOOP --hours
dur = round((random() * 2) + 1);
IF i + dur > 24 then
dur = 24 - i;
END IF;
INSERT INTO Schedule VALUES(tup.Channel_ID, round((random() * 999) + 1),(current_date + (integer to_char(i,'9')))+ (interval to_char(j,'99') || ' hour'), (interval dur ||' hour'));
i = i + dur - 1;
END LOOP;
END LOOP;
END LOOP;
return true;
END
$$ LANGUAGE plpgsql;
나는 다음과 같은 오류 있어요 :
ERROR: syntax error at or near "to_char"
LINE 1: ...d((random() * 999) + 1),(current_date + (integer to_char($...
^
QUERY: INSERT INTO Schedule VALUES($1 , round((random() * 999) + 1),(current_date + (integer to_char($2 ,'9')))+ (interval to_char($3 ,'99') || ' hour'), (interval $4 ||' hour'))
CONTEXT: SQL statement in PL/PgSQL function "datainsert_schedule" near line 15
********** Error **********
ERROR: syntax error at or near "to_char"
SQL state: 42601
Context: SQL statement in PL/PgSQL function "datainsert_schedule" near line 15
내가 먼저 삽입이
INSERT INTO Schedule VALUES(tup.Channel_ID, round((random() * 999) + 1),(current_date + (integer ''||i))+ (interval (j ||' hour')), (interval dur ||' hour'));
방법을 시도했다, 그러나 나는이었다 같은 종류의 오류가 발생했습니다.
왜이 오류가 발생합니까?
그리고 schedule
테이블이 다음과 같이 정의된다 :
CREATE TABLE Schedule(
Channel_ID Integer REFERENCES Channel(Channel_ID),
Program_ID Integer REFERENCES Program(Program_ID),
Start_Time Timestamp NOT NULL,
Duration Interval NOT NULL,
CONSTRAINT Schedule_Key PRIMARY KEY(Channel_ID, Program_ID)
);
채널 테이블 용 만들기를 추가하면 유용합니다. – Borys