agora inbox for pgsql-sql@postgresql.org
help / color / mirror / Atom feedFrom: 卢迪 <ludi_1981@hotmail.com>
To: Alexander Shereshevsky <shereshevsky@gmail.com>
Cc: pgsql-sql@postgresql.org <pgsql-sql@postgresql.org>
Subject: Re: plpgsql: how to use a composite type varray
Date: Thu, 19 Nov 2015 19:48:35 +0800
Message-ID: <COL128-W74602F4316A6793752E4F3851B0@phx.gbl> (raw)
In-Reply-To: <CAJMMYvpxOv0d_9T0nVfP9SrmTgyTLkRNCWqddELmW7i+HBhMqw@mail.gmail.com>
References: <COL128-W5878F97E17ACA914C3EA3B851B0@phx.gbl>
<COL128-W93EDC4CCC061CDD1FADFDA851B0@phx.gbl>
<CAJMMYvo0F38WBBowZ1vXykhPeEB4VOiL48QxjsqgFxRNJ=6qRg@mail.gmail.com>
<COL128-W517CF62C7F44E5DD7F42D7851B0@phx.gbl>
<CAJMMYvpxOv0d_9T0nVfP9SrmTgyTLkRNCWqddELmW7i+HBhMqw@mail.gmail.com>
List-Unsubscribe: <mailto:majordomo@postgresql.org?body=unsub%20pgsql-sql>
Sure. thanks. Let me try it.
From: shereshevsky@gmail.com
Date: Thu, 19 Nov 2015 13:24:55 +0200
Subject: Re: [SQL] plpgsql: how to use a composite type varray
To: ludi_1981@hotmail.com
CC: pgsql-sql@postgresql.org
Not security related.8.2 is very old and not supported:http://www.postgresql.org/support/versioning/
Can you install newer version?I tested on 9.4 - works fine.
BR
On Thu, Nov 19, 2015 at 12:23 PM, 卢迪 <ludi_1981@hotmail.com> wrote:
Hi Alexander,
thank you for reply my email.
My PGADMIN still shows this:ERROR: type "p_dailyinfo_r[]" does not existCONTEXT: compile of PL/pgSQL function "test" near line 2.
I created this type by a test role and run this sciprt by this test role again. Should I check the security options?
BTW: This is my postgresql version. Is this a problem against database version?psql --versionpsql (PostgreSQL) 8.2.15contains support for command-line editing
From: shereshevsky@gmail.com
Date: Thu, 19 Nov 2015 11:21:04 +0200
Subject: Re: [SQL] plpgsql: how to use a composite type varray
To: ludi_1981@hotmail.com
CC: pgsql-sql@postgresql.org
On Thu, Nov 19, 2015 at 10:09 AM, 卢迪 <ludi_1981@hotmail.com> wrote:
Hello everyone,
In ORACLE, I have this kind of code:PROCEDURE dailyinfo_noexg(p_date IN DATE, p_num_of_date IN NUMBER) IS.....TYPE p_dailyinfo_r IS RECORD( dailyinfo_pk dailyinfo.wc_fund_dailyinfo_pk%TYPE, fund_account dailyinfo.fund_account%TYPE, client_id dailyinfo.client_id%TYPE, fund_code dailyinfo.fund_code%TYPE, trade_date dailyinfo.trade_date%TYPE, apply_amount dailyinfo.apply_amount%TYPE, redeem_amount dailyinfo.redeem_amount%TYPE, daily_return dailyinfo.daily_return%TYPE, total_return dailyinfo.total_return%TYPE, daily_profit dailyinfo.daily_profit%TYPE, latestweekly_yield dailyinfo.latestweekly_yield%TYPE, next_settle_date dailyinfo.next_settle_date%TYPE, sys_created_by dailyinfo.sys_created_by%TYPE, sys_created_date dailyinfo.sys_created_date%TYPE, sys_updated_by dailyinfo.sys_updated_by%TYPE, sys_updated_date dailyinfo.sys_updated_date%TYPE); TYPE p_dailyinfo IS TABLE OF p_dailyinfo_r; p_dailyinfo_t p_dailyinfo;.....beginsome statment and loop statement:p_dailyinfo_t(j).daily_return := 0;p_dailyinfo_t(j).apply_amount := 0;p_dailyinfo_t(j).redeem_amount := 0;......
end;
I tried this in pl/pgsql:This is my composite typeComposite type "yjbtest.p_dailyinfo_r" Column | Type ----------------------+----------------------- dailyinfo_pk | bigint fund_account | character varying(18) client_id | character varying(18) fund_code | character varying(15) trade_date | date apply_amount | numeric(20,3) redeem_amount | numeric(20,3) daily_return | numeric(20,3) total_return | numeric(20,3) daily_profit | numeric(20,5) latestweekly_yield | numeric(20,5) next_settle_date | date sys_created_by | character varying(50) sys_created_date | date sys_updated_by | character varying(50) sys_updated_date | date
pl/pgsql:CREATE OR REPLACE FUNCTION test() RETURNs void AS$BODY$ declare e p_dailyinfo_r; er p_dailyinfo_r[]; i numeric(10); c record; BEGIN i:=0; for c in select fund_account from dailyinfo where trade_date='2015-11-01' loop begin i:=i+1; e.fund_account:=c.fund_account;
if i>0 and i<10 then raise notice 'xxx %',e.fund_account; end if; end; end loop; raise notice 'total is %',i; EXCEPTION WHEN OTHERS THEN raise exception '%',sqlerrm; END; $BODY$ LANGUAGE plpgsql;
The error message in pgadmin is :ERROR: type "p_dailyinfo_r[]" does not existCONTEXT: compile of PL/pgSQL function "test" near line 4
I don't know why the p_dailyinfo_r[] does not exist. I tried varchar[] in test code. And this works.
Could you please help me verify this error?
Hi, p_dailyinfo_r[] is array of type p_dailyinfo_r.
try something like this to test:
DROP TYPE IF EXISTS p_dailyinfo_r;
CREATE TYPE p_dailyinfo_r AS (
fund_account text );
CREATE OR REPLACE FUNCTION test ( )
RETURNS void AS $BODY$ DECLARE e p_dailyinfo_r;
er p_dailyinfo_r [ ];
i numeric (
10 );
c record;
BEGIN
i: = 0;
FOR c IN
SELECT
fund_account
FROM
dailyinfo
WHERE
trade_date = '2015-11-01' LOOP
BEGIN
i: = i + 1;
e.fund_account : = c.fund_account;
IF i > 0
AND i < 10 THEN raise notice 'xxx %',
e.fund_account;
END IF;
END;
END LOOP;
raise notice 'total is %',
i;
EXCEPTION
WHEN OTHERS THEN raise EXCEPTION '%',
sqlerrm;
END;
$BODY$ LANGUAGE plpgsql;
view thread (6+ messages) latest in thread
Message-ID: <COL128-W74602F4316A6793752E4F3851B0@phx.gbl>
Permalink: ../COL128-W74602F4316A6793752E4F3851B0@phx.gbl/
Also on: postgresql.org/message-id/COL128-W74602F4316A6793752E4F3851B0@phx.gbl
reply
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: pgsql-sql@postgresql.org
Cc: ludi_1981@hotmail.com, shereshevsky@gmail.com
Subject: Re: plpgsql: how to use a composite type varray
In-Reply-To: <COL128-W74602F4316A6793752E4F3851B0@phx.gbl>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox