【发布时间】:2022-01-07 11:05:29
【问题描述】:
我正在尝试在 Postgres 中编写一个存储过程,在其中我将使用传递给 SP 的参数作为 SELECT 中的列值(而不是列名):
CREATE OR REPLACE PROCEDURE create_log
(_contractCode varchar,
_signedOn timestamp,
_contractAmount numeric,
_feePercentage numeric,
_fee numeric,
_projectCode varchar,
_contractType varchar)
AS $$
BEGIN
INSERT INTO Contracts (ContractCode, SignedOn, ContractAmount, FeePercentage, Fee, ProjectId, ContractType)
SELECT _contractCode, _signedOn, _contractAmount, _feePercentage, _fee, p.Id AS ProjectId, _contractType
FROM Projects p WHERE p.Code = _projectCode LIMIT 1;
END;
$$
LANGUAGE plpgsql ;
当我调用它时:
CALL public.create_log("contractcode",'2021-12-24T02:55:39',1000.7,3.2,3.232,'test','New');
我来了
SQL 错误 [42703]:错误:列“contractcode”不存在位置:24
这意味着它正在尝试使用参数值作为列名。我想使用参数值作为 SELECT 返回的值。
谢谢
【问题讨论】:
-
哪些参数是列名,哪些是要插入表
contracts的常量值?另请注意,不带引号的名称在 Postgresql 中会转换为小写。 -
当然没有名为“ContractCode”的列。这是我要插入到 Contracts 表中的值,而不是任何列名。所有参数名称前面都有下划线。
标签: postgresql stored-procedures string-constant