我有一个名为的表Product:
create table product (
ProductNumber varchar(10),
ProductName varchar(10),
SalesQuantity int,
Salescountry varchar(10)
);
Run Code Online (Sandbox Code Playgroud)
样本值:
insert into product values
('P1', 'PenDrive', 50, 'US')
, ('P2', 'Mouse', 100, 'UK')
, ('P3', 'KeyBoard', 250, 'US')
, ('P1', 'PenDrive', 300, 'US')
, ('P2', 'Mouse', 450, 'UK')
, ('P5', 'Dvd', 50, 'UAE');
Run Code Online (Sandbox Code Playgroud)
我想Salescountry's动态生成名称并显示该SalesQuantity国家/地区的销售总额。
预期结果:
ProductName US UK UAE
----------------------------
PenDrive 350 0 0
Mouse 0 550 0
KeyBoard 250 0 0
Dvd 0 0 50
Run Code Online (Sandbox Code Playgroud)
我使用SQL Server 2008 …
我想检查数据库中是否存在该表.
IF NOT EXISTS (SELECT * from INFORMATION_SCHEMA.Tables WHERE Table_name = 'test') THEN
RAISE INFO 'Not exists';
else
RAISE INFO 'Exists';
end if;
Run Code Online (Sandbox Code Playgroud)
得到错误:
ERROR: syntax error at or near "IF"
Run Code Online (Sandbox Code Playgroud) 我用11个参数创建了以下函数,如下所示:
函数调用:
SELECT * FROM function_TableDetails
(
NULL::Type_Table,
'2671ffdb-28a4-4ce4-a226-e5a21d66509e',
'D09636DC-0185-4FFC-AEDD-63895B445CD8',
'Xyz',
'Cola',
'20028243-52c2-4d23-a6fe-c3694aab84a2',
'01-01-2000',
'01-01-2016',
'00:00:01',
'23:59:59',
'Al'
);
Run Code Online (Sandbox Code Playgroud)
对接以下错误:
ERROR: function function_TableDetails(Type_Table, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown) is not unique
LINE 1: SELECT * FROM function_TableDetails
^
HINT: Could not choose a best candidate function. You might need to add explicit type casts.
Run Code Online (Sandbox Code Playgroud)
我对此有两个问题:
第一:如何解决以上错误?(因为它甚至不在函数内,并且没有显示错误的确切位置)
第二:如何调试功能?(特别是必须处理此类错误)
我想添加QUARTER到TIMESTAMPPostgreSQL中9.3版本。
添加:
SELECT TIMESTAMP '2016-01-01' + INTERVAL '01 QUARTER';
Run Code Online (Sandbox Code Playgroud)
对于删除:
SELECT TIMESTAMP '2016-01-01' - INTERVAL '01 QUARTER';
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)********** Error ********** ERROR: invalid input syntax for type interval: "01 QUARTER" SQL state: 22007 Character: 42
我想要你位于另一个数据库中的表。
我正在为此使用dblink。
程序:
第 1 步:创建扩展。
CREATE EXTENSION dblink;
Run Code Online (Sandbox Code Playgroud)
第二步:制作dblink连接字符串。
select dblink_connect('con','host=127.0.0.1 dbname=makdb user=postgres password=postgres');
Run Code Online (Sandbox Code Playgroud)
第 3 步:
select * from dblink('con','select cola,colb from tbl_test') as tbl(cola int,colb varchar(10));
Run Code Online (Sandbox Code Playgroud)
我的问题:如何在步骤 2 中隐藏密码?
通过搜索,我知道我需要创建.pgpass文件。但是在如何创建以及在哪个步骤中我需要使用该文件名时陷入了困境。
我有下表,其中包含两个字段:
create table tbl_jtest
(
cola int,
colb varchar(10)
);
Run Code Online (Sandbox Code Playgroud)
插入一些记录:
insert into tbl_jtest values(1,'a');
insert into tbl_jtest values(2,'b');
insert into tbl_jtest values(3,'c');
insert into tbl_jtest values(4,'d');
Run Code Online (Sandbox Code Playgroud)
功能:
CREATE OR REPLACE FUNCTION ufn_jtest1(pcola int)
RETURNS json AS
$$
BEGIN
IF pcola = 1
THEN
RETURN QUERY SELECT to_json(a.cola) FROM tbl_jtest a;
ELSE
RETURN QUERY SELECT to_json(a.colb) FROM tbl_jtest a;
END IF;
END;
$$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)
错误详情:
错误:不能在非 SETOF 函数中使用 RETURN QUERY 第 7 行:RETURN QUERY SELECT to_json(a.cola) FROM …
我正在使用PostgreSQL 9.3版本来创建数据库.
我有一些列列表的下表测试.
create table test
(
cola varchar(10),
colb varchar(10),
colc varchar(10),
cold varchar(10)
);
Run Code Online (Sandbox Code Playgroud)
现在我想在一些列上创建索引.
例如:
我想创建一个列聚集索引cola和colb.
我想创建一个列非聚集索引colc和cold.
正如我提到这个和这个,我才知道,有在PostgreSQL里没有聚集和非聚集索引.
我的问题:我可以使用什么类型的索引而不是PostgreSQL中的聚簇索引和非聚簇索引,它与集群索引和非聚簇索引的作用相同?
我有以下功能:
我通过使用加入其他数据库表来更新一个数据库表dblink().
我安装了:
create extension dblink;
Run Code Online (Sandbox Code Playgroud)
更多细节如下图所示:
CREATE OR REPLACE FUNCTION Fun_test
(
Table_Name varchar
)
RETURNS void AS
$BODY$
DECLARE
dynamic_statement varchar;
BEGIN
perform dblink_connect('port=5234 dbname=testdb user=postgres password=****');
dynamic_statement := 'With CTE AS
(
Select HNumber,JoiningDate,Name,Address
From '|| Table_Name ||'c
)
, Test_A
AS
(
Select Row_Number() over ( Partition by PNumber order by Date1 Desc,Date2 Desc) AS roNum,
Name,PNumber,Date1,Address
From dblink(
''Select distinct PNumber,
(
case when fname is null then '' else fname end || …Run Code Online (Sandbox Code Playgroud) 我需要从函数检查给定的文本是否为数字。
创建功能isnumeric():
CREATE OR REPLACE FUNCTION isnumeric(text) RETURNS BOOLEAN AS $$
DECLARE x NUMERIC;
BEGIN
x = $1::NUMERIC;
RETURN TRUE;
EXCEPTION WHEN others THEN
RETURN FALSE;
END;
$$ LANGUAGE plpgsql IMMUTABLE;
Run Code Online (Sandbox Code Playgroud)
我从中调用该isnumeric()函数的函数:
create or replace function tm(var text)
returns varchar as
$$
begin
if (select isnumeric(var))=t::BOOLEAN then
raise info 'Is numeric value';
else
raise info 'Not numeric';
end if;
end;
$$
language plpgsql;
Run Code Online (Sandbox Code Playgroud)
呼叫functon:
select tm('1');
Run Code Online (Sandbox Code Playgroud)
出现错误:
错误详细信息如下:
ERROR: column "t" does not exist
LINE 1: …Run Code Online (Sandbox Code Playgroud) 我有2个数据库DB1和DB2.
我有一个被称为View1存储在数据库中的视图DB2.现在我想ALTER VIEW从DB1数据库.
我的尝试:
ALTER VIEW DB2..View1
AS
SELECT * FROM DB2..Test;
Run Code Online (Sandbox Code Playgroud)
但我收到一个错误:
'CREATE/ALTER VIEW'不允许将数据库名称指定为对象名称的前缀
postgresql ×9
dblink ×2
plpgsql ×2
crosstab ×1
indexing ×1
intervals ×1
isnumeric ×1
pivot ×1
sql-server ×1
timestamp ×1