我正在开发一个简单的函数,它可以自动更新表格中的内容。
create or replace function total()
returns void as $$
declare
sum int;
begin
sum = (SELECT count(copy_id) FROM copies);
update totalbooks
set all_books = sum
where num = 1;
end;
$$ language plpgsql;
如果我执行"select total();“,它工作得很好,所以我做了一个函数触发器,让它自动更新:
我得到了以下错误,谁能给我一个例子来避免它:
ERROR: cannot begin/end transactions in PL/pgSQL
HINT: Use a BEGIN block with an EXCEPTION clause instead.
CONTEXT: PL/pgSQL function transfer(integer,integer,numeric) line 13 at SQL statement
PL/pgSQL function inline_code_block line 2 at EXECUTE
SQL state: 0A000
START TRAN
我在pgsql中有一个函数
CREATE OR REPLACE FUNCTION core.date_bs_from_ad(date_in_ad date)
RETURNS character varying AS
$$
BEGIN
RETURN(
SELECT date_in_bs FROM core.date_conversion
WHERE date_in_ad = $1
);
END
$$
LANGUAGE plpgsql;
它是在没有错误的情况下创建的,但是当我使用这个函数时,它是通过以下错误创建的:
ERROR: colu
以下代码:
Copy ( select bla
from some_table p,
some_procedure (par1 := null,
par2 := null ) as sp
where p.var1 = sp.var1
order
by some_table_id) to stdout;
..。在脚本中工作(即使用psql),但它在Pl/pgSQL函数中失败。
在函数内部的错误消息如下:
"ERROR: can
当我需要使用触发器时,我使用PostgreSQL 11.8并面临任务。主要目标--当从表产品中设置或更新某些行时,在执行update或INXERT之后,对于具有相同created_at products的表products中的所有存在行,都需要set group_identity数据。我烧了这个扳机。
CREATE OR REPLACE FUNCTION maint_sales_summary_bytime() RETURNS TRIGGER
AS $maint_sales_summary_bytime$
DECLARE
delta_time_key
我正在使用带有PostgreSQL12的MyBatis 3.3.0。我想在我的xml映射器中注入一些pl/pgsql 例如:使用for循环插入数据 <update id="generateNumbers" parameterType="tn.tt.nbms.dto.RangeDTO" statementType="CALLABLE">
<![CDATA[
declare
.....
begin
for number in ......
insert i
是否有方法在PostgreSQL断言消息中包含参数。
示例:
do $$
declare
c integer;
begin
c := (select count(*) from pg_database);
assert c = 7, 'not 7!';
assert c = 8, 'not 8!';
assert c = 5, ('% not 5!' , c);
end;$$;
这样做是可行的:
assert c = 8, 'not 8!';
这一主张:
assert c = 5, (
如果使用“引发通知”,则每次执行时都会收到上下文消息。我能把它们关掉然后收到通知吗?
NOTICE: d = [2,1] ,tn: (1,2,"{NULL,NULL}","{{-1,4},{-1,-1}}",1)
CONTEXT: SQL statement "SELECT aPt( vl , tn_id, color ) from tnodes where tnode_id = tn_id"
PL/pgSQL function "apt" line 42 at PERFORM
SQL statement "sele
我正在尝试将java中的一个函数转换为pl/pgsql,我发现的一个问题是,当我试图对2个负数求和,而a得到一个正数时,更具体地说:
public void sum(){
int n1 = -1808642602;
int n2 = -904321301;
System.out.println(n1 + n2);// result is 1582003393
}
在pl/pgsql中,我得到一个整数超出范围的错误,如果我将变量类型更改为bigint,我会得到2个负数的正常和,即-2712963903,而不是1582003393
怎样才能让pl/pgsql得到相同的结果,
我希望通过PL/pgSQL命令行将一个参数传递给匿名psql块,然后在条件中检查该参数。
SQL的相关部分如下:
do $$
begin
if (':para' = 1) then
-- statements;
end if;
end $$
;
我称之为这样的脚本:
psql -d dbname -v para=1 < script.sql
我收到错误:
ERROR: invalid input syntax for integer: ":para"
LINE 1: SELECT (':para' = 1)
我目前正在开发一个系统,用于处理学校建筑中班级和隔间的不同预留。我有这样一种方式,当你预订教室时,你会自动预订里面的每个隔间。
我需要在不使用PL/pgSQL的情况下在纯SQL中迭代select的结果来实现这种保留,因为在查询教室之前不能确切地知道教室有多少个隔间。
我已经尝试过PL/pgSQL,虽然它工作得很好,但我需要一种不使用PL/pgSQL来满足类要求的方法。下面是我使用FOR关键字实现PL/pgSQL的示例。
CREATE OR REPLACE FUNCTION createReservationClass(p_codeBuilding CHAR(2),p_codeClass INT
我试图从PL/pgSQL函数返回一个行构造函数,但由于以下错误而失败:返回的类型记录与第1列中的预期类型整数不匹配
下面是一个简化的版本,其中有一个简单的SQL函数作为比较。SQL函数运行良好,PL/pgSQL函数引发以下错误。我在这里错过了什么?
测试函数
CREATE FUNCTION test_sql()
RETURNS TABLE (
a int,
b int
)
LANGUAGE SQL
IMMUTABLE
AS $$
SELECT (1, 1);
$$;
CREATE FUNCTION test_plpgsql()
RETURNS TABLE (
我有三个表和一个视图,名为"trees",连接这三个表。 我有一个PL/pgSQL函数,它允许向“tree”视图插入数据 如何准确地在PL/pgSQL中编写一些类似于when (if)属性没有插入(指定),在函数中跳过一些步骤(操作)的内容。 编辑:找到解决方案: IF attribute1 IS NOT NULL AND attribute2 IS NOT NULL THEN ...
我需要做这个功能,以加载团队从pl_raw到新的表名为游戏。在pl_raw中是所有的数据。现在.。这个函数是为了订购表格的数据..。
CREATE OR REPLACE FUNCTION loadGames() RETURNS void AS $$
BEGIN
IF (SELECT * from pldata.pl_raw where venue = 'Away') THEN
INSERT INTO definitiu.game (date_game, home_team, away_team)
SELECT game_date, opposition_id,team_id
我正在处理Postgres 8.3数据库,并尝试使用PL/pgSQL创建函数,该函数根据输入到表中的日期生成表名:
我必须创建一系列按日期索引的表,例如:
drop table one_day_11_13 cascade;
create table one_day_11_13 as
select * from master_table where
timestamp < '2012-11-14' and timestamp >= '2012-11-13';
drop table one_day_11_14 cascade;
create tab
我想在PL/pgsql中创建一个目录:
CREATE OR REPLACE FUNCTION getNextId() RETURNS VARCHAR(200) AS
$BODY$
DECLARE
mfId integer;
rootDir varchar(50) := 'mfdata/';
createDir text := 'mkdir --mode=777 -p mfdata';
dir varchar(100);
BEGIN
INSERT INTO copy.history(time) values(now())
我正在尝试将oracle存储过程(plsql)移植到postgresql函数(pl/pgsql)。
在oracle中,我可以使用In和OUT参数定义存储过程。
CREATE OR REPLACE PROCEDURE MY_TEST(foo IN NUMBER,
bar OUT NUMBER)
IS
BEGIN
bar := 1
END
这将在传递给存储过程的变量中存储值1。我可以这样称呼它:
DECLARE
outValue NUMBER ;
BEGIN
Exec MY_TEST(10, outValue);
DBMS
登录到PSQL,如下所示:
su postgres
psql -d database_name
我可以查看数据库中的所有表。但是,当我更新表(UPDATE table set column='blue')中的数据时,会出现以下错误:
ERROR: User: 'postgres' not found in aco_user table
CONTEXT: SQL statement "SELECT aco_message1( 'USER_NOT_FOUND', true, current_user )"
PL/pgSQL fun
我在DBMS中有这个存储过程(Postgresql)
CREATE OR REPLACE FUNCTION getallentree()
RETURNS SETOF entree AS
$BODY$
begin
select * from entree ;
end;
$BODY$
LANGUAGE plpgsql
调用此过程后:
select * from getAllEntree();
我收到这个错误:
ERROR: query has no destination for result data
HINT: If you want to discard the
我试图将表中的值转换为数组,数组定义与表的列定义不同。我试过做演员,但没有用。基本上,我需要作为一个数组(tab_small_str)表中的值。有谁能建议一下:
CREATE TYPE tab_small_str AS (
str CHARACTER VARYING(50)
);
create table test_emp(emp_id integer, ename character varying (10));
insert into test_emp values(1,'a1')
insert into test_emp values(2,'a2