用plpgsql写了一个函数不能成功,不知道错在哪里

[复制链接]
查看11 | 回复3 | 2021-1-27 07:16:22 | 显示全部楼层 |阅读模式
CREATEORREPLACEFUNCTIONcreate_init_tables(table_cntINTEGER)RETURNSvoidAS$$
DECLARE
numINTEGER;
table_nameVARCHAR;
index_nameVARCHAR;
num_strVARCHAR;
BEGIN
--创建基本UNLOGGED
CREATEUNLOGGEDTABLEbase_table
(
serial_nochar(16),
table_nochar(8),
report_timetimestampwithtimezone,
)
WITH(
OIDS=FALSE
);
ALTERTABLEbase_tableOWNERTOpostgres;
num:=1;
BEGIN
WHILEnum[table]table_name='table_';
index_name=table_name||'_sn_index';
CREATEUNLOGGEDTABLEtable_name(
CHECK(report_time>=DATE'2016-10-01'ANDreport_time -->
回复

使用道具 举报

千问 | 2021-1-27 07:16:22 | 显示全部楼层
语法错误,两个begin是干嘛用的?
回复

使用道具 举报

千问 | 2021-1-27 07:16:22 | 显示全部楼层
CREATEORREPLACEFUNCTIONcreate_init_tables(table_cntINTEGER)RETURNSvoidAS$$
DECLARE
numINTEGER;
table_nameVARCHAR;
index_nameVARCHAR;
num_strVARCHAR;
BEGIN
--创建基本UNLOGGED
CREATEUNLOGGEDTABLEbase_table
(
serial_nochar(16),
table_nochar(8),
report_timetimestampwithtimezone
)
WITH(
OIDS=FALSE
);
ALTERTABLEbase_tableOWNERTOpostgres;
num:=1;
WHILEnum[table]table_name:='table_';
index_name:=table_name||'_sn_index';
CREATEUNLOGGEDTABLEtable_name(
CHECK(report_time>=DATE'2016-10-01'ANDreport_time<DATE'2016-12-01')
)INHERITS(base_table)WITH(OIDS=FALSE);
ALTERTABLEtable_nameOWNERTOpostgres;
CREATEINDEXindex_nameontable_name(serial_no);
num=num+1;
ENDLOOP;
END;
$$LANGUAGEplpgsql;
回复

使用道具 举报

千问 | 2021-1-27 07:16:22 | 显示全部楼层
对象名不能为变量
CREATEUNLOGGEDTABLEtable_name。。。。
table_name是变量。
只能购造动态语句执行,
sql='CREATEUNLOGGED'||table_name||'.....';
executesql;
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行