如何在简单的 PostgreSQL 脚本中使用变量?
例如,在 MS-SQL 中,您可以打开一个查询窗口并运行以下命令:
DECLARE @List AS VARCHAR(8)
SELECT @List = 'foobar'
SELECT * FROM dbo.PubLists WHERE Name = @List
在 PostgreSQL 中这是如何完成的? 能做到吗?
For example, in MS-SQL, you can open up a query window and run the following:
DECLARE @List AS VARCHAR(8)
SELECT @List = 'foobar'
SELECT * FROM dbo.PubLists WHERE Name = @List
How is this done in PostgreSQL? Can it be done?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(12)
完整的答案位于官方 PostgreSQL 文档。
您可以使用新的 PG9.0 匿名代码块功能 (http://www.postgresql.org/ docs/9.1/static/sql-do.html )
您也可以获取最后一个 插入 ID:
Complete answer is located in the official PostgreSQL documentation.
You can use new PG9.0 anonymous code block feature (http://www.postgresql.org/docs/9.1/static/sql-do.html )
Also you can get the last insert id:
你可以使用:
这样就可以了
You can use:
That will do
以下是在 plpgsql 中使用变量的示例:
查看 plpgsql 文档 了解更多信息。
Here's an example of using a variable in plpgsql:
Have a look at the plpgsql docs for more information.
我遇到过一些其他文档,它们使用
\set
来声明脚本变量,但该值似乎像常量值,我正在寻找可以充当变量而不是变量的方法常数变量。例如:
这里
sal
是表“emp”中存在的值,comm
是常量值。I've came across some other documents which they use
\set
to declare scripting variable but the value is seems to be like constant value and I'm finding for way that can be acts like a variable not a constant variable.Ex:
Here
sal
is the value that is present in the table 'emp' andcomm
is the constant value.Postgresql 没有裸变量,您可以使用临时表。
变量仅在代码块中或作为用户界面功能可用。
如果您需要一个裸变量,您可以使用临时表:
Postgresql does not have bare variables, you could use a temporary table.
variables are only available in code blocks or as a user-interface feature.
If you need a bare variable you could use a temporary table:
基于 @nad2000 的答案和 @Pavel 的答案,这就是我最终获得 Flyway 迁移脚本的地方。 处理手动修改数据库架构的场景。
Building on @nad2000's answer and @Pavel's answer here, this is where I ended up for my Flyway migration scripts. Handling for scenarios where the database schema was manually modified.
例如,在 alter table 中使用变量:
For use variables in for example alter table:
我不得不做这样的事情
I had to do something like this
您还可以简单地创建一个在实际查询中使用的常量查询:
You can also simply make a constant query that you use in the actual query:
鉴于受欢迎程度和有些不完整的答案,我将提供两种解决方案。
下面我将使用一个过度烘焙的示例,将右下角“blurb”上的推文更新为“hello world”。
一个简单的 do 块
一个函数
Given the popularity, and somewhat incomplete answers I'll provide two solutions.
Below I'll use an over-baked example of updating the tweet on the bottom right "blurb" with "hello world".
A simple do block
A function
您可以在
DECLARE
子句中使用:=
、=
声明局部变量,如下所示:*Memos:
:=
、=
和DEFAULT
是相同的。value4
会出错。value5
为NULL
。DO
语句中使用DECLARE
子句声明局部变量。You can declare local variables with
:=
,=
inDECLARE
clause as shown below:*Memos:
:=
,=
andDEFAULT
are the same.value4
gets error.value5
isNULL
.DECLARE
clause in a PL/pgSQL function and procedure andDO
statement.