相关疑难解决方法(0)

使用PL/pgSQL将查询结果存储在变量中

如何将查询结果分配给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

108
推荐指数
3
解决办法
18万
查看次数

使用Postgres一次在3个表中插入数据

我想通过一个查询将数据插入到3个表中.
我的表如下所示:

CREATE TABLE sample (
   id        bigserial PRIMARY KEY,
   lastname  varchar(20),
   firstname varchar(20)
);

CREATE TABLE sample1(
   user_id    bigserial PRIMARY KEY,
   sample_id  bigint REFERENCES sample,
   adddetails varchar(20)
);

CREATE TABLE sample2(
   id      bigserial PRIMARY KEY,
   user_id bigint REFERENCES sample1,
   value   varchar(10)
);
Run Code Online (Sandbox Code Playgroud)

我将获得一个密钥以换取每次插入,我需要在下一个表中插入该密钥.
我的查询是:

insert into sample(firstname,lastname) values('fai55','shaggk') RETURNING id;
insert into sample1(sample_id, adddetails) values($id,'ss') RETURNING user_id;
insert into sample2(user_id, value) values($id,'ss') RETURNING id;
Run Code Online (Sandbox Code Playgroud)

但是,如果我运行单个查询,他们只是向我返回值,我不能立即在下一个查询中重用它们.

怎么做到这一点?

sql postgresql common-table-expression sql-insert sql-returning

64
推荐指数
4
解决办法
4万
查看次数

PostgreSQL表变量

在T-SQL中有什么类似表变量的吗?
在Sql Server中,它看起来像这样:

DECLARE @ProductTotals TABLE
(
  ProductID int,
  Revenue money
)
Run Code Online (Sandbox Code Playgroud)

然后在程序中我可以:

INSERT INTO @ProductTotals (ProductID, Revenue)
  SELECT ProductID, SUM(UnitPrice * Quantity)
  FROM [Order Details]
  GROUP BY ProductID
Run Code Online (Sandbox Code Playgroud)

并像普通表一样操纵这个变量.

这是描述:http://odetocode.com/Articles/365.aspx

sql postgresql plpgsql table-variable

19
推荐指数
2
解决办法
4万
查看次数

在PL/pgSQL中声明行类型变量

正如我发现的SELECT * FROM t INTO my_data;作品只有:

DO $$
DECLARE
my_data t%ROWTYPE;
BEGIN
SELECT * FROM t INTO my_data WHERE id = ?;
END $$;
Run Code Online (Sandbox Code Playgroud)

我对吗?

如果我想只获得2-3列而不是所有列.我该如何定义my_data

那是,

DO $$
DECLARE
my_data <WHAT HERE??>;
BEGIN
SELECT id,name,surname FROM t INTO my_data WHERE id = ?;
END $$;
Run Code Online (Sandbox Code Playgroud)

postgresql types plpgsql declare select-into

17
推荐指数
1
解决办法
2万
查看次数

如何在plpgsql中使用记录类型变量?

如何将存储在记录类型变量中的查询结果用于同一存储函数中的另一个查询?我使用Postgres 9.4.4.

用这样的表:

create table test (id int, tags text[]);
insert into test values (1,'{a,b,c}'),
                        (2,'{c,d,e}');
Run Code Online (Sandbox Code Playgroud)

我写了一个函数(简化),如下所示:

CREATE OR REPLACE FUNCTION func(_tbl regclass)
RETURNS TABLE (t TEXT[], e TEXT[])
LANGUAGE plpgsql AS $$
DECLARE
  t RECORD;
  c INT;
BEGIN
  EXECUTE format('SELECT id, tags FROM %s', _tbl) INTO t;
  SELECT count(*) FROM t INTO c;
  RAISE NOTICE '% results', c;
  SELECT * FROM t;
END
$$;
Run Code Online (Sandbox Code Playgroud)

......但没有奏效:

select func('test');
Run Code Online (Sandbox Code Playgroud)
ERROR:  42P01: relation "t" does not exist
LINE 1: SELECT count(*) FROM …
Run Code Online (Sandbox Code Playgroud)

postgresql variables function plpgsql table-variable

16
推荐指数
1
解决办法
3万
查看次数

SELECT*FROM有快捷方式吗?

psql控制台中有许多有用的快捷方式,如\d\l.
我想知道有一个SELECT * FROM table_name吗?
我经常将这个查询用于学习目的,所以不必一直写select * from ....

sql postgresql syntax psql

11
推荐指数
1
解决办法
3061
查看次数