如何在mysql中声明一个变量,以便我的第二个查询可以使用它?
我想写一些类似的东西:
SET start = 1;
SET finish = 10;
SELECT * FROM places WHERE place BETWEEN start AND finish;
Run Code Online (Sandbox Code Playgroud) 有谁知道在PostgreSQL(9.1)中查询数据库服务器设置是否可行(以及如何,如果是)?
我需要查看max_connections(最大打开数据库连接数)设置.
有没有办法在PostgreSQL查询中定义命名常量?例如:
MY_ID = 5;
SELECT * FROM users WHERE id = MY_ID;
Run Code Online (Sandbox Code Playgroud) 我正在使用PostgreSQL 9.1.我的数据库是结构化的,以便我的应用程序使用实际的表.对于每个表,都有历史表,仅存储更改历史记录.历史表包含相同的字段,实际表格和字段形成一些额外信息,例如.编辑时间.历史表仅由触发器处理.
我有两种触发器:
Before INSERT 触发器在创建表时向表添加一些额外信息(例如,create_time).Before UPDATE触发器和before DELETE触发器将旧值从实际表复制到历史表.问题是我想使用触发器来存储进行这些更改的用户的ID.而id我是来自php应用程序的id,而不是PostgreSQL用户id.
有没有合理的方法呢?
使用INSERT和UPDATE,可以只将id的额外字段添加到实际表中,并将用户id作为SQL查询的一部分传递给SQL.据我所知,这不适用于DELETE.
所有触发器的结构如下:
CREATE OR REPLACE FUNCTION before_delete_customer() RETURNS trigger AS $BODY$
BEGIN
INSERT INTO _customer (
edited_by,
edit_time,
field1,
field2,
...,
fieldN
) VALUES (
-1, // <- This should be user id.
NOW(),
OLD.field1,
OLD.field2,
...,
OLD.fieldN
);
RETURN OLD;
END; $BODY$
LANGUAGE plpgsql
Run Code Online (Sandbox Code Playgroud) 我正在对PostgreSQL与SQLServer进行比较,以便进行迁移.现在我正在评估T-SQL与PL/pgSQL,事实是在T-SQL中你可以使用循环或声明变量,例如:
declare @counter int
set @counter = 0
while @counter < 10
begin
set @counter = @counter + 1
print 'The counter is ' + cast(@counter as char)
end
Run Code Online (Sandbox Code Playgroud)
没有必要将它放在函数或过程中.我可以在PostgreSQL中做到吗?
在网上搜索我在MySQL中找到了一个否定的答案,但我没有找到Postgres的答案.
我有以下MySQL脚本,我想在PostgreSQL中实现.
SET @statement = search_address_query;
PREPARE dynquery FROM @statement;
EXECUTE dynquery;
DEALLOCATE PREPARE dynquery;
Run Code Online (Sandbox Code Playgroud)
如何使用PostgreSQL定义用户定义的变量"@statement".