当前位置: 首页 > 知识库问答 >
问题:

为什么选择语句存储过程中PostgreSQL抛出错误列不存在...?

辛健
2023-03-14

我在PostgreSQL中有一个存储过程,我想在表中进行插入。我从这个过程中得到了一些参数,并使用它们尝试在其他表上选择其他属性。

这是我的存储过程:

CREATE OR REPLACE FUNCTION "public"."prc_sales_invoice_header_insert"("customercode" varchar, "sales_note" varchar, "automatic_payment_id" int4, "cash_register_code" varchar,...etc)

RETURNS "pg_catalog"."void" AS $BODY$

    --declaring variables to store data from the tables
    DECLARE 
    salesdate date;
    salesdocumentserial varchar;
    currencycode varchar;
    currencycode2 varchar;
    customername varchar;
    warehousecode varchar;
    ......etc.

BEGIN
--getting values from tables and storing to variables
SELECT "name" into customername from public."customers" where "customer_code" = customercode;

SELECT CURRENT_DATE into salesdate;
SELECT max(sales_invoice_header_id) into salesdocumentserial from public."sales_invoice_header";
.....

--inserting values
    INSERT INTO public."sales_invoice_header"("sales_date", 
    "sales_document_serial", 
    "currency_code", 
    "currency_code2", 
    "customer_code", 
  ....
VALUES(
    salesdate, 
    salesdocumentserial, 
    currencycode, 
    currencycode2, 
    customer_code,
  .....)
END
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100

当我试图执行时,它抛出一个错误,说:“错误:列“customer_code”不存在”,“提示:表“sales_invoice_header”中有一个名为“customer_code”的列,但不能从查询的这一部分引用它。”

表客户是存在的,有一个名为costomer_code的列,但我不明白为什么它不能引用它。

表客户:

-- ----------------------------
-- Table structure for customers
-- ----------------------------
DROP TABLE IF EXISTS "public"."customers";
CREATE TABLE "public"."customers" (
  "customer_id" int4 NOT NULL DEFAULT nextval('"Customers_CustomerId_seq"'::regclass),
  "customer_code" varchar COLLATE "pg_catalog"."default",
  "barcode" varchar COLLATE "pg_catalog"."default",
  "qr_code" varchar COLLATE "pg_catalog"."default",
  "tax_id" varchar COLLATE "pg_catalog"."default",
  "business_id" varchar COLLATE "pg_catalog"."default",
  "city_id" int8,
  "mobile" varchar COLLATE "pg_catalog"."default",
  "accounting_number" varchar COLLATE "pg_catalog"."default",
  "name" varchar COLLATE "pg_catalog"."default"
);

有人能帮我吗,我做错了什么?或者这是正确的做事方式吗?

提前谢谢。

共有1个答案

许承悦
2023-03-14
    INSERT INTO public."sales_invoice_header"("sales_date", 
    "sales_document_serial", 
    "currency_code", 
    "currency_code2", 
    "customer_code", 
  ....
VALUES(
    salesdate, 
    salesdocumentserial, 
    currencycode, 
    currencycode2, 
    customer_code,

这里的customer\u code不是变量,也不是文字,而是列名。然而,如果您不从表中选择它——您试图在值中使用它————将不起作用。要么使用

insert into ... select ...,customer_code from sales_invoice_header

或者

insert into ... values(..., VAR_customer_code)

或者

insert into ... values(..., 'value_customer_code')

编辑:

当一个没有名字的马注意到我的VAR\u customer\u code时,一定是你的customercode第一个参数?。。

 类似资料:
  • 我是MySQL存储过程的新手。不知道为什么我会出现以下错误。请帮我调试一下。 1064年的今天,您的SQL语法出现错误;查看与您的MySQL服务器版本对应的手册,以获得正确的语法,以便在第3行的user_-username=@th'中使用near'作为该用户的id,该用户的全名 表名:user_master 用户id密码密码密码密码密码密码密码密码密码密码密码密码密码密码密码密码密码密码密码密码密

  • 我正在为db2创建一个存储过程。但是它给出了一个错误 SQL错误[42601]:在“SS_token_BAK”之后发现意外的标记“END-OF-STATEMENT”。预期的标记可能包括:“END IF”。.SQLCODE=-104,SQLSTATE=42601,DRIVER=4.23.42。 以下是我的存储过程。 是否有人面临此类问题。任何这方面的帮助将不胜感激。

  • 问题内容: 我一直在拔头发。我有一个非常简单的postgre数据库,一个特定的表有一个名为lName(大写N)的列。现在我知道使用postgre我必须引用lName,因为它包含一个大写的N。 我正在尝试使用以下语句查询数据库: 但我收到此错误: 警告:pg_query()[function.pg-query]:查询失败:错误:..中不存在列“ Smith”。 这是什么问题?为什么说该列为“史密斯”

  • 问题内容: 众所周知,您无法在Oracle或SQL Server(可能是大多数其他主流RDBMS产品)中的存储过程中执行操作。 一般来说,从存储过程中进行选择有几个明显的“问题”,只有两个是: a)由存储过程产生的列是不确定的(直到运行时才知道) b)由于存储过程的不确定性,因此在建立数据库统计信息和制定有效的查询计划时会出现问题 由于用户经常需要此功能,因此随着时间的推移,已开发出许多解决方法:

  • 问题内容: 这让我发疯。 还给我 那将是线 怎么了 我尝试了一些小的更改,但总是收到相同的错误。我检查了文档,但看不到语法错误。我知道这是一个愚蠢的错误,但是我坚持了大约半个小时。是一个游标,它迭代每一行并为每一行执行一个存储过程;我已经用存储函数完成了它(它的工作原理很像魅力),但是在服务器上发布时,我看到我的共享主机不支持存储函数,只支持存储过程:(因此,这是我最好的方法我发现了。 问题答案:

  • 本文向大家介绍mysql存储过程之引发存储过程中的错误条件(SIGNAL和RESIGNAL语句)实例分析,包括了mysql存储过程之引发存储过程中的错误条件(SIGNAL和RESIGNAL语句)实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了mysql引发存储过程中的错误条件(SIGNAL和RESIGNAL语句)。分享给大家供大家参考,具体如下: 在mysql中,我们可以使用SIG