Re: PLS-00306: wrong number or types of arguments in call to '||'

From: Mark C. Stock <mcstockX_at_Xenquery>
Date: Tue, 31 Aug 2004 14:39:49 -0400
Message-ID: <F_OdnX0nHoqVW6ncRVn-pA_at_comcast.com>


"Doron" <doron_almog_at_msn.com> wrote in message news:995517bc.0408310919.4b9f0783_at_posting.google.com...
| hi,
| getting the following error when running the script below.
| it seems to me that the cursor is retrieving more then one value each
loop.
| any idea how to fix this?
|
| error:
|
| ERROR at line 10:
| ORA-06550: line 10, column 19:
| PLS-00306: wrong number or types of arguments in call to '||'
| ORA-06550: line 10, column 1:
| PL/SQL: Statement ignored
|
|
| script:
|
| declare
| cursor u_tab is select table_name from user_tables;
| u_tab_rec user_tables.table_name%type;
|
| begin
| execute immediate 'create global temporary table temp_tab1 ( col_count
number)';
|
| for u_tab_rec in u_tab
| loop
| execute immediate 'insert count(*) into temp_tab1 from '||u_tab;
|
| end loop;
| end;

U_TAB is a record type (implicitly declared in your for loop), and concatenation (||) only works with character data types (or expressions that can be implicitly converted to a character data type)

what you need to do in this case is specify which element of the record you want to concatenate -- even though there is only one element

that being said, your use of a global temporary table is inappropriate and shows a misunderstanding of what a temporary table is in oracle -- do a little more reading up on that and you'll see that the table is permanent, and only the contents are temporary -- so it makes no sense to create one in a PL/SQL script

++ mcs Received on Tue Aug 31 2004 - 20:39:49 CEST

Original text of this message