8.1. SQL-запросы
8.1.1. Предварительные действия
Прежде, чем приступать к действиям, описанным далее, следует выполнить SQL-запросы к данному шагу.
8.1.2. Создание функции, возвращающей имя файла
CREATE OR REPLACE FUNCTION f_get_filename(_filename bytea)
RETURNS text AS
$BODY$
declare
len integer;
begin
len := "position"(_filename, E'\\000'::bytea)-1;
if len > 0 then
return convert_from("substring"(_filename, 1, len ), 'WIN1251');
end if;
return NULL::text;
end;
$BODY$
LANGUAGE plpgsql VOLATILE;
8.1.3. Создание представления для отображения файлов
CREATE OR REPLACE VIEW vw_files AS
SELECT t_files.file_id,
t_files.dttmcr,
t_files.dttmup,
t_files.dttmcl,
t_files.userid,
t_files.comment_id,
f_get_filename(t_files.comment_file) AS filename
FROM t_files;
8.1.4. Создание функции для загрузки файла из БД
CREATE OR REPLACE FUNCTION f_get_file("1210.file_id" integer)
RETURNS SETOF bytea AS
$BODY$
BEGIN
RETURN QUERY
SELECT comment_file
FROM t_files
WHERE file_id = $1;
END;
$BODY$
LANGUAGE plpgsql VOLATILE;
8.1.5. Создание функции для загрузки файла в БД
CREATE OR REPLACE FUNCTION f_upload_file(
pdb_userid integer,
"1202.comment_id" integer,
pdb_file_data bytea)
RETURNS boolean AS
$BODY$
BEGIN
INSERT INTO t_files (userid, comment_id, comment_file)
VALUES (pdb_userid, "1202.comment_id", pdb_file_data);
RETURN true;
END
$BODY$
LANGUAGE plpgsql VOLATILE;
8.1.6. Создание функции для закрытия файла
CREATE OR REPLACE FUNCTION f_close_file("1210.file_id" integer)
RETURNS boolean AS
$BODY$
BEGIN
UPDATE t_files
SET dttmcl = now() WHERE t_files.file_id = "1210.file_id";
RETURN true;
END
$BODY$
LANGUAGE plpgsql VOLATILE;
8.1.7. Далее