表table1(id,name1)
表table2(id,name2)在增加表table1中一条记录的时候,根据生成的ID,同时在表table2中增加一列,列前加'A'标志。我写了触发器出错。帮忙分析一下:
由于我的columnname是动态的,所以要用到变量,目前我用固定的变量测试都会出错的。
-------------------------------------------------------------------------------
最初的写法:
BEGIN
if new.id is not null then
alter table table2 add column 'A'+new.id NUMERIC(10,2);
end if; RETURN NULL;
END;
-------------------------------------------------------------------------------
后来的写法:
DECLARE
columnname varchar;
BEGIN
columnname:='1';
if new.id is not null then
alter table table2 add column columnname NUMERIC(10,2);
end if; RETURN NULL;
END;-------------------------------------------------------------------------------
都要出错??? 无法编译过去,但是用固定的一个列名是可以的,是否不能用变量???
表table2(id,name2)在增加表table1中一条记录的时候,根据生成的ID,同时在表table2中增加一列,列前加'A'标志。我写了触发器出错。帮忙分析一下:
由于我的columnname是动态的,所以要用到变量,目前我用固定的变量测试都会出错的。
-------------------------------------------------------------------------------
最初的写法:
BEGIN
if new.id is not null then
alter table table2 add column 'A'+new.id NUMERIC(10,2);
end if; RETURN NULL;
END;
-------------------------------------------------------------------------------
后来的写法:
DECLARE
columnname varchar;
BEGIN
columnname:='1';
if new.id is not null then
alter table table2 add column columnname NUMERIC(10,2);
end if; RETURN NULL;
END;-------------------------------------------------------------------------------
都要出错??? 无法编译过去,但是用固定的一个列名是可以的,是否不能用变量???
解决方案 »
- sql中in和=的区别,大数据量哪个性能更好?
- C++调用mysql_query的问题,unicode相关
- 关于MYSQL一个奇怪的编码问题
- mysql用max(id) 方法有时查不到最大ID号?内有代码
- mysql中如何查询varchar类型字段为空的纪录
- 求一SQL语句,谢谢了
- 求助Mysql的一个查询语句
- MySQL中使用load data infile的汉文问题
- vc中使用mysql出现的问题(急等求助!!!)
- 问个弱智问题如果查询条件是选出某字段为空的纪录,应如何设where?(再线等待)
- fedora 9 使用 mysql-query-browser,选择数据库就死。
- 任命 liangCK 为MySQL/Postgresql版 版主!
需动态构造SQL语句
S_SQL:='alter table table2 add column'||columnname||'NUMERIC(10,2)';
EXECUTE S_SQL;
EXEC SQL END DECLARE SECTION;
stmt:='alter table table2 add column'||columnname||'NUMERIC(10,2)';
EXEC SQL PREPARE mystmt FROM :stmt;
...
EXEC SQL EXECUTE mystm
EXEC SQL DEALLOCATE PREPARE mystm;
类似MYSQL的PREPARE、EXECUTE
ERROR: EXECUTE of SELECT ... INTO is not implemented yet
我查了一下,但是E文不是很好,看得有些糊涂,帮解释下 http://archives.postgresql.org/pgsql-bugs/2008-05/msg00215.php就是说用构造的语句来执行下面的语句会出错,是版本原因?无法升级的情况下,有解决办法么?
S_SQL:='select count(*) into ...';
EXECUTE S_SQL;这是我的语句:
DECLARE
S_SQL varchar;
A_SQL varchar;
p_count integer;
columnname varchar;
BEGIN
/* New function body */
p_count:=0;
if old.id is not null then
columnname:='A'||old.id;
S_SQL:='select count(*) into p_count from rlzy.tb_salary_detail where ' || columnname ||' is not null limit 1;';
--raise exception 'S_SQL';
EXECUTE S_SQL;
if (p_count>0) then
A_SQL:='alter table rlzy.tb_salary_detail drop column' || columnname || ';';
EXECUTE A_SQL;
end if;
end if; RETURN old;
END;
2楼的就是只有用游标了,
S_SQL:='select * from rlzy.tb_salary_detail where ' || columnname ||' is not null limit 1;';
用游标打开记录集,判断是否有记录