如何声明变量以用于PostgreSQL 8.3查询?
在MS SQL Server中,我可以这样做:
DECLARE @myvar INT
SET @myvar = 5
SELECT *
FROM somewhere
WHERE something = @myvar
Run Code Online (Sandbox Code Playgroud)
我如何在PostgreSQL中做同样的事情?根据文档变量被简单地声明为"名称类型;",但这给了我一个语法错误:
myvar INTEGER;
Run Code Online (Sandbox Code Playgroud)
有人能给我一个正确语法的例子吗?
如何将查询结果分配给PL/pgSQL中的变量,这是PostgreSQL的过程语言?
我有一个功能:
CREATE OR REPLACE FUNCTION test(x numeric)
RETURNS character varying AS
$BODY$
DECLARE
name character varying(255);
begin
name ='SELECT name FROM test_table where id='||x;
if(name='test')then
--do somthing
else
--do the else part
end if;
end;
return -- return my process result here
$BODY$
LANGUAGE plpgsql VOLATILE
Run Code Online (Sandbox Code Playgroud)
在上面的函数中我需要存储此查询的结果:
'SELECT name FROM test_table where id='||x;
Run Code Online (Sandbox Code Playgroud)
到变量name.
怎么处理这个?
database postgresql stored-procedures plpgsql postgresql-9.1
有没有办法在PostgreSQL查询中定义命名常量?例如:
MY_ID = 5;
SELECT * FROM users WHERE id = MY_ID;
Run Code Online (Sandbox Code Playgroud) 我想将以下SQL代码从MS SQL-Server移植到PostgreSQL.
DECLARE @iStartYear integer
DECLARE @iStartMonth integer
DECLARE @iEndYear integer
DECLARE @iEndMonth integer
SET @iStartYear = 2012
SET @iStartMonth = 4
SET @iEndYear = 2016
SET @iEndMonth = 1
;WITH CTE
AS
(
SELECT
--@iStartYear AS TheStartYear
@iStartMonth AS TheRunningMonth
,@iStartYear AS TheYear
,@iStartMonth AS TheMonth
UNION ALL
SELECT
--CTE.TheStartYear AS TheStartYear
--@iStartYear AS TheStartYear
CTE.TheRunningMonth + 1 AS TheRunningMonth
--,CTE.TheStartYear + (CTE.TheRunningMonth / 12) AS TheYear
,@iStartYear + (CTE.TheRunningMonth / 12) AS TheYear
,(CTE.TheMonth + 1 -1) % …Run Code Online (Sandbox Code Playgroud) 我对 Postgres 还很陌生,我不敢相信仅仅声明一个变量就这么困难。我确实遇到过其他 SO 帖子,但没有一个对我的情况有帮助。我想要的只是在 postgres 中编写如下所示的脚本:
declare @age int = 10;
select * from person p where p.age > @age;
Run Code Online (Sandbox Code Playgroud)
根据这里的SO帖子,我尝试过:
DO
$$
DECLARE
overTheAgeOf int := 15;
BEGIN
select *
from person
where age > overTheAgeOf;
END
$$;
Run Code Online (Sandbox Code Playgroud)
这给了我错误:[42601] ERROR: query has no destination for result data
然后我尝试返回脚本的结果:
return (select *
from person
where age > overTheAgeOf);
Run Code Online (Sandbox Code Playgroud)
这给了我另一个错误:ERROR: RETURN cannot have a parameter in function returning void
如何声明变量并在后面的脚本中使用它?