Re: [PERFORM] INSERT question
| От | george young |
|---|---|
| Тема | Re: [PERFORM] INSERT question |
| Дата | |
| Msg-id | 20041229135858.71f8c3cf.gry@ll.mit.edu обсуждение исходный текст |
| Ответ на | INSERT question (sarlav kumar <sarlavk@yahoo.com>) |
| Список | pgsql-novice |
On Mon, 13 Dec 2004 08:28:39 -0800 (PST)
sarlav kumar <sarlavk@yahoo.com> threw this fish to the penguins:
> 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;
> rows = st.Select( "SELECT * FROM merchant_buyer_country where merchant_id = %lu ",merchant_id );
> if ( rows )
> 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;
> 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);
> }
> st.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.
Try:
insert into merchant_buyer_country select 1203,code,true,1 from country where send is not null or receive is not null;
-- George Young
--
"Are the gods not just?" "Oh no, child.
What would become of us if they were?" (CSL)
В списке pgsql-novice по дате отправления: