大虾们,如今遇到了一个问题,字符串变量在execute中执行时没法加上引号造成报错。具体代码如下
create or replace function testadd() returns void as $$ declare arrow record; tmp char(20); begin for arrow in SELECT * FROM EMP LOOP TMP := ARROW.ENAME; execute 'INSERT INTO EMP2 SELECT * FROM EMP WHERE ENAME= '||TMP; END LOOP; END; $$ LANGUAGE PLPGSQL; select testadd();
出现的报错信息如下
错误: 字段 "smith" 不存在 LINE 1: INSERT INTO EMP2 SELECT * FROM EMP WHERE ENAME= SMITH ^ QUERY: INSERT INTO EMP2 SELECT * FROM EMP WHERE ENAME= SMITH CONTEXT: 在EXECUTE 语句的第9行的PL/pgSQL函数testadd() ********** 错误 ********** 错误: 字段 "smith" 不存在 SQL 状态: 42703
请大虾们帮助解决,共同进步。
你的SQL写的有问题正确INSERT语句应该是这样的:
INERTINTOTableName(column1,column2,....)VALUES(value1,value2,...)而你写的是:
INSERTINTOEMP2SELECT*FROMEMPWHEREENAME='||TMP 因为查询出来的TMP值为“SMITH”字符串,那么数据库认为你写的是: INSERTINTOEMP2(SMITH... 因为表EMP2中没有 字段名为“ SMITH”的,所以报错,好好分析分析吧两个表的字段一样吗属性都是一样的,只是emp2是张空表,从emp中抽取数据到emp2中。你的SQL写的有问题正确INSERT语句应该是这样的:
INERTINTOTableName(column1,column2,....)VALUES(value1,value2,...)而你写的是:
INSERTINTOEMP2SELECT*FROMEMPWHEREENAME='||TMP 因为查询出来的TMP值为“SMITH”字符串,那么数据库认为你写的是: INSERTINTOEMP2(SMITH... 因为表EMP2中没有 字段名为“ SMITH”的,所以报错,好好分析分析吧版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。