存储过程中遇到的一个问题

PredixDev 2017-04-27 04:10:59
这是建表语句
CREATE TABLE DailyEngGen (DATE date , PRIMARY KEY (date), WF_A float NOT NULL DEFAULT 0, WF_B float NOT NULL DEFAULT 0,WF_C float NOT NULL DEFAULT 0)


这是存储过程
CREATE OR REPLACE FUNCTION INSERT_DAILY() RETURNS integer AS
$body$
DECLARE
cl integer;
_column varchar(10);
BEGIN
cl = 1;
FOR cl IN 1..21 LOOP
IF(cl < 10) THEN
_column = 'A_0'||cl;
ALTER TABLE dailyenggen ADD _column FLOAT(2) NOT NULL DEFAULT random()*5 + 15;
ELSE
_column = 'A_'||cl;
ALTER TABLE dailyenggen ADD _column FLOAT(2) NOT NULL DEFAULT random()*5 + 15;
END IF;
END LOOP;
RETURN cl;
END
$body$
language plpgsql;
SELECT * FROM INSERT_DAILY();

这是错误
ERROR: column "_column" of relation "dailyenggen" already exists
Where: SQL statement "ALTER TABLE dailyenggen ADD _column FLOAT(2) NOT NULL DEFAULT random()*5 + 15"
PL/pgSQL function insert_daily() line 11 at SQL statement

无论在_column的位置写什么,比如“CCC”,也会出现同样错误,不知道有没有这方面的专家或大神,谢谢大家
...全文
174 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
PredixDev 2017-06-02
  • 打赏
  • 举报
回复
引用 1 楼 trainee 的回复:
对象名(如talble,column等)不能是动态变量。 你必须整个语句动态构建,再执行它 sql:="ALTER TABLE dailyenggen ADD "|| _column||" FLOAT(2) NOT NULL DEFAULT random()*5 + 15"; execute sql;
厉害厉害,怎么采纳啊
trainee 2017-05-06
  • 打赏
  • 举报
回复
对象名(如talble,column等)不能是动态变量。 你必须整个语句动态构建,再执行它 sql:="ALTER TABLE dailyenggen ADD "|| _column||" FLOAT(2) NOT NULL DEFAULT random()*5 + 15"; execute sql;

954

社区成员

发帖
与我相关
我的任务
社区描述
PostgreSQL相关内容讨论
sql数据库数据库架构 技术论坛(原bbs)
社区管理员
  • PostgreSQL社区
  • yang_z_1
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧