Thread: INSERT question
Hi All,
I have a question regarding multiple inserts.
The following function inserts for each country found in country table, values into merchant_buyer_country.
----------------------------------------------------------------------------------------------------------------------------------------
CSQLStatement st( sql );
CSQLStatement st1( sql );
SQLINTEGER rows;
long num_codes = 0;
CSQLStatement st1( sql );
SQLINTEGER rows;
long num_codes = 0;
rows = st.Select( "SELECT * FROM merchant_buyer_country where merchant_id = %lu ",merchant_id );
if ( rows )
return 0;
return 0;
char code[4];
rows = st.Select( "SELECT code FROM country WHERE send IS NOT NULL OR receive IS NOT NULL" );
SQLBindCol( st.hstmt, 1, SQL_C_CHAR, code, sizeof(code), 0 );
long i;
rows = st.Select( "SELECT code FROM country WHERE send IS NOT NULL OR receive IS NOT NULL" );
SQLBindCol( st.hstmt, 1, SQL_C_CHAR, code, sizeof(code), 0 );
long i;
for (i = 0; i < rows; i++ )
{
{
st.Fetch();
st1.Command("INSERT INTO merchant_buyer_country (merchant_id,country,enabled,group_id) VALUES(%lu ,'%s', true, %lu )", merchant_id,
code,group_id);
}
st1.Command("INSERT INTO merchant_buyer_country (merchant_id,country,enabled,group_id) VALUES(%lu ,'%s', true, %lu )", merchant_id,
code,group_id);
}
st.CloseCursor();
st1.CloseCursor();
st1.CloseCursor();
return 1;
----------------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------------------
On looking at the log file, I saw separate inserts being performed, and each insert takes about 1 second.
insert into merchant_buyer_country (merchant_id,country,enabled,group_id) values(1203,'IN','true',1);
insert into merchant_buyer_country merchant_id,country,enabled,group_id) values(1203,'US','true',1);
insert into merchant_buyer_country merchant_id,country,enabled,group_id) values (1203,'AR','true',1);
insert into merchant_buyer_country (merchant_id,country,enabled,group_id) values(1203,'AZ','true',1);
insert into merchant_buyer_country merchant_id,country,enabled,group_id) values (1203,'BG','true',1);
insert into merchant_buyer_country merchant_id,country,enabled,group_id) values(1203,'SP','true',1);
.....
There are more than 100 countries and this takes a lot of time for the inserts to complete.
Is there a way to write the INSERT as follows?
INSERT into merchant_buyer_country (merchant_id,country,enabled,group_id) values (1203,
(SELECT code FROM country WHERE send IS NOT NULL OR receive IS NOT NULL), 'true',1);
I tried this, but I get the following problem:
ERROR: More than one tuple returned by a subselect used as an expression.
I know there is a way to this, but I am not sure where I am going wrong. Can someone please help me figure this out.
Thanks,
Saranya
Do you Yahoo!?
Meet the all-new My Yahoo! � Try it today!
On Mon, Dec 13, 2004 at 08:28:39 -0800, sarlav kumar <sarlavk@yahoo.com> wrote: > > Is there a way to write the INSERT as follows? > > INSERT into merchant_buyer_country (merchant_id,country,enabled,group_id) values (1203, > (SELECT code FROM country WHERE send IS NOT NULL OR receive IS NOT NULL), 'true',1); > You have to use a SELECT instead of the VAlues clause. Something like the following should work: INSERT INTO merchant_buyer_country (merchant_id, country, enabled, group_id) SELECT 1203, code, TRUE, 1 FROM country WHERE send IS NOT NULL OR receive IS NOT NULL ;
Thanks guys!! that worked!:)
Michael Adler <adler@pobox.com> wrote:
On Mon, Dec 13, 2004 at 08:28:39AM -0800, sarlav kumar wrote:
> INSERT into merchant_buyer_country (merchant_id,country,enabled,group_id) values (1203,
> (SELECT code FROM country WHERE send IS NOT NULL OR receive IS NOT NULL), 'true',1);
>
> I tried this, but I get the following problem:
> ERROR: More than one tuple returned by a subselect used as an expression.
INSERT into merchant_buyer_country (merchant_id,country,enabled,group_id)
SELECT 1203, code FROM country WHERE send IS NOT NULL OR receive IS NOT NULL;
-Mike Adler
Bruno Wolff III <bruno@wolff.to> wrote:
On Mon, Dec 13, 2004 at 08:28:39 -0800,
sarlav kumar wrote:
>
> Is there a way to write the INSERT as follows?
>
> INSERT into merchant_buyer_country (merchant_id,country,enabled,group_id) values (1203,
> (SELECT code FROM country WHERE send IS NOT NULL OR receive IS NOT NULL), 'true',1);
>
You have to use a SELECT instead of the VAlues clause. Something like the
following should work:
INSERT INTO merchant_buyer_country (merchant_id, country, enabled, group_id)
SELECT 1203, code, TRUE, 1 FROM country
WHERE send IS NOT NULL OR receive IS NOT NULL
;
---------------------------(end of broadcast)---------------------------
TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org
Do you Yahoo!?
All your favorites on one personal page � Try My Yahoo!