如何使用存储过程参数作为 Postgres 中的 select 列值?
How to use stored procedure parameter as the select column value in Postgres?
我正在尝试在 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 Error [42703]: ERROR: column "contractcode" does not exist Position: 24
这意味着它正在尝试使用参数值作为列名。我想使用参数值作为从 SELECT.
返回的值
谢谢
问题在于您如何调用函数,而不是在函数内部。
您在 contract_code
周围加上了双引号,因此需要一个列名,但找不到。您必须使用单引号
CALL public.create_log('contractcode','2021-12-24T02:55:39',1000.7,3.2,3.232,'test','New');
select "a";
ERROR: column "a" does not exist
LINE 1: select "a";
^
select 'b';
?column?
----------
b
(1 row)
我正在尝试在 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 Error [42703]: ERROR: column "contractcode" does not exist Position: 24
这意味着它正在尝试使用参数值作为列名。我想使用参数值作为从 SELECT.
返回的值谢谢
问题在于您如何调用函数,而不是在函数内部。
您在 contract_code
周围加上了双引号,因此需要一个列名,但找不到。您必须使用单引号
CALL public.create_log('contractcode','2021-12-24T02:55:39',1000.7,3.2,3.232,'test','New');
select "a";
ERROR: column "a" does not exist
LINE 1: select "a";
^
select 'b';
?column?
----------
b
(1 row)