开发者社区> 问答> 正文

如何在execute执行中将字符串变量加上引号?报错

大虾们,如今遇到了一个问题,字符串变量在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
请大虾们帮助解决,共同进步。

展开
收起
爱吃鱼的程序员 2020-06-22 15:21:08 523 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    你的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”的,所以报错,好好分析分析吧
    2020-06-22 15:21:24
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载