Urgent Help on Dynamic Table name change in query !!!!!!!!
Hi Everyone,
I'm having a repeating frame which displays table_name, count_validate and count_error. How can i dynamically change my table_name in formula column apllied on count_validate and count_error. I can do this with multiple elsif statement, which makes my report slow at runtime. Select statement is same , only change is table_name ?
Kindly let me know......
Try to use dynamic ref cursors (defined in a database package).
This is not exactly what you need, but see:
"Dynamic Table in the Second Query with Oracle Reports"
http://www.quest-pipelines.com/pipelines/plsql/tips03.htm#JULY
Regards,
Zlatko Sirotic
Similar Messages
-
How to set dynamic table name in sql query?
I want set dynamic table name by parameter in sql query,just like:
select * from :tbname
but run report is error,BI P report table name is invalidation.
What can i do? Thanks!Hi,
that's only possible inside a data template with a lexical parameter.
Regards
Rainer -
Dynamic table name, how to query?
Hi!
There is a table name that is decided dynamically. the name is:
someNameYYY where YYY denotes the client number.
I get the client number by sy-mandt and concatenate it with someNameYYY to lc_table_name but then comes the problem:
I cannot do
SELECT *
FROM lc_table_name
because I get compiler error "lc_table_name" is not defined in ABAP dictionary.
How do I query a table with the name decided dynamically?
regards
BaranYou can have do something like this :
REPORT ZTABLE_DOWNLOAD .
tables :
dd02l, "SAP Tables
dd03l, "Table fields
dd04t. "R/3 DD: Data element texts
constants : c_activation_status(1) value 'A',
c_tabclass(6) type c value 'INTTAB',
c_language(2) type c value 'EN'.
type-pools : slis.
selection-screen begin of block b1 with frame title text-003.
*parameters :p_mandt like t001-mandt obligatory default '560'.
parameters :p_table like dd03l-tabname obligatory.
selection-screen end of block b1.
data:
table_desc(70) type c,
table_field like dd03l-fieldname,
total_rows type i,
t_rows(20) type c.
field-symbols:
<fs_line> type any,
<fs_field> type any.
at selection-screen.
*Check for the existence of the table
select single * from dd02l where tabname = p_table
and as4local = c_activation_status.
if sy-subrc ne 0.
*Table is not active in dictionary
message e999(zs) with 'Table is not active in dictionary'.
elseif dd02l-tabclass = c_tabclass.
*It is a structure not a table
message e999(zs) with 'This is a structure not a table'.
endif.
start-of-selection.
perform table_data_display.
end-of-selection.
form table_data_display.
data:
l_long_type type i,
lx_struct type ref to data,
lt_table type ref to data,
lcl_sdescr type ref to cl_abap_structdescr,
lx_lvc_cat type lvc_s_fcat,
lt_lvc_cat type lvc_t_fcat, "Field catalog
lx_fieldcat type slis_fieldcat_alv,
lt_fieldcat type slis_t_fieldcat_alv,
lx_layout type slis_layout_alv,
lt_sort type slis_t_sortinfo_alv, "Sort table
ls_sort type slis_sortinfo_alv.
field-symbols :
<fieldcat> type slis_fieldcat_alv,
<lt_table> type table,
<fs> type any,
<components> type abap_compdescr.
*Dynamic creation of a structure
create data lx_struct type (p_table).
assign lx_struct->* to <fs>.
*Get the field structure
lcl_sdescr ?= cl_abap_typedescr=>describe_by_data( <fs> ).
loop at lcl_sdescr->components assigning <components>.
*Do not display field "MANDT"
IF sy-tabix = 1 AND <components>-name = 'MANDT'.
CONTINUE. "next loop
ENDIF.
*Build fieldcatalog
lx_lvc_cat-fieldname = <components>-name.
lx_lvc_cat-ref_table = p_table.
append lx_lvc_cat to lt_lvc_cat.
lx_fieldcat-fieldname = <components>-name.
lx_fieldcat-ref_tabname = p_table.
append lx_fieldcat to lt_fieldcat.
endloop.
*Create an internal table
call method cl_alv_table_create=>create_dynamic_table
exporting it_fieldcatalog = lt_lvc_cat
importing ep_table = lt_table.
assign lt_table->* to <lt_table>.
*Read the data
select * from (p_table)
into corresponding fields of table <lt_table>
order by primary key.
loop at <lt_table> assigning <fs_line>.
assign component 'MANDT' of
structure <fs_line> to <fs_field>.
<fs_field> = p_mandt.
endloop.
if <lt_table>[] is initial.
*No table enties are existing
message e003(zdynamictable) with p_table.
exit.
else.
describe table <lt_table>[] lines total_rows.
t_rows = total_rows.
shift t_rows left deleting leading space.
endif.
*Specify the layout
lx_layout-zebra = 'X'.
lx_layout-colwidth_optimize = 'X'.
*Display the ALV List
select single ddtext into table_desc from dd02t
where tabname eq p_table and ddlanguage eq c_language.
check not table_desc is initial.
concatenate 'Entries from table:'
p_table '(' table_desc ')' '-:' t_rows 'Entries Found' into
table_desc
separated by space.
*Start - Download the data to excel sheet by validating the file path.
data:
*lv_filename type string,
lv_fname_validate like rlgrap-filename.
*CONCATENATE 'C:\ZTABLE_DWN\' P_TABLE '.Xls' INTO LV_FILENAME.
*CONCATENATE '
Pc-p31061\Harman\Tasks\ZTABLE_DWN\' P_TABLE '.xls' INTO
CONCATENATE 'C:\ZTABLE_DWN\' P_TABLE '.xls' INTO
LV_FNAME_VALIDATE.
call function 'WS_FILE_DELETE'
exporting
file = lv_fname_validate
IMPORTING
RETURN =
CALL FUNCTION 'WS_DOWNLOAD'
EXPORTING
BIN_FILESIZE = ' '
CODEPAGE = ' '
FILENAME = LV_FNAME_VALIDATE
FILETYPE = 'DAT'
IMPORTING
FILELENGTH =
TABLES
DATA_TAB = <lt_table>.
*call function 'GUI_DOWNLOAD'
exporting
BIN_FILESIZE =
filename = lv_fname_validate
filetype = 'ASC'
write_field_separator = 'X'
IMPORTING
FILELENGTH =
tables
data_tab = <lt_table>.
End of Download.
call function 'REUSE_ALV_GRID_DISPLAY'
exporting
i_background_id = 'ALV_BACKGROUND'
i_grid_title = table_desc
is_layout = lx_layout
it_fieldcat = lt_fieldcat
tables
t_outtab = <lt_table>
exceptions
program_error = 1
others = 2
if sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
endif.
clear table_desc.
endform. " table_data_display -
Dynamic table name in native sql query
Can i pass a dynamic table name in this query ---
EXEC SQL PERFORMING APPEND_MTO.
SELECT
LTOG_QUANTITY_TYPE,
FCONO,
WBSELEMENT,
PROJECT
INTO :IMTO
FROM RWORKS.MTO_ISO_V2
WHERE LTOD_DATE > TO_DATE(:MAXD,'YYYYMMDDHH24MISS')
ENDEXEC.
How can i pass this table name RWORKS.MTO_ISO_V2 dynamically in the query
Edited by: Madhukar Shetty on Nov 26, 2009 2:40 PMCan i pass a dynamic table name in this query ---
EXEC SQL PERFORMING APPEND_MTO.
SELECT
LTOG_QUANTITY_TYPE,
FCONO,
WBSELEMENT,
PROJECT
INTO :IMTO
FROM RWORKS.MTO_ISO_V2
WHERE LTOD_DATE > TO_DATE(:MAXD,'YYYYMMDDHH24MISS')
ENDEXEC.
How can i pass this table name RWORKS.MTO_ISO_V2 dynamically in the query
Edited by: Madhukar Shetty on Nov 26, 2009 2:40 PM -
(Urgent) Dynamic Table Name
Hi Fellows,
Can I use dynamic table name in a loop? I have a problem that I want to use variable table in a cursor for example
procedure check_rows as
cursor c1 is
select view_name
from user_views;
v_count number;
v_view_name varchar2(35);
begin
for i in c1 loop
select count(*)
into v_count
from i.view_name;
if v_count = 0 THEN
dbms_output.put_line ('The View '| |i.view_name| |' has no rows');
end if;
end loop;
end;
but i receive a message
i.view_name must a name of a table to which the user has access.
Can anybody solve my problem.
Thanks in advance
MustafaHere is some codes I wrote with DBMS_SQL. I hope it will help you to start.
PROCEDURE Get_record(p_select IN OUT select_rec, where_str IN OUT varchar2) IS
my_keyblk varchar2(6);
veh_id integer;
ser_date date;
succ_flag number;
blk_route varchar2(4);
blk_run integer;
my_date_type integer;
cur_blk_route INTEGER;
rows_processed INTEGER;
ignore integer;
select_str varchar2(3000);
First_date date;
Last_date date;
BEGIN
begin
select start_date, end_date into first_date, Last_date from change_date
where current_next_code = 'CURRENT';
exception when others then
null;
end;
select_str := 'select keyblock, keycoach, proflag, pullout_date
from logblock
where (pullout_date between first_date and Last_date)
and proflag = 0';
cur_blk_route := dbms_sql.open_cursor;
dbms_sql.parse(cur_blk_route, select_str, dbms_sql.v7);
dbms_sql.define_column(cur_blk_route, 1, blk_route, 6);
dbms_sql.define_column(cur_blk_route, 2, blk_run);
dbms_sql.define_column(cur_blk_route, 3, veh_id);
dbms_sql.define_column(cur_blk_route, 4, ser_date);
ignore := dbms_sql.execute(cur_blk_route);
LOOP
if (dbms_sql.fetch_rows(cur_blk_route) > 0) then
dbms_sql.column_value(cur_blk_route, 1, blk_route);
dbms_sql.column_value(cur_blk_route, 2, blk_run);
dbms_sql.column_value(cur_blk_route, 3, veh_id);
dbms_sql.column_value(cur_blk_route, 4, ser_date);
else
dbms_output.put_line('ERROR ');
end if;
END LOOP;
dbms_sql.close_cursor(cur_blk_route);
END Get_record;
end apc_block_assign;
null -
Table name change in procedure dynamically
create table tab1(x number);
create table dynamic_table (x number);
insert into tab1 values (1);
insert into dynamic_table values (1);
commit;
create procedure proc1
is
v_x number;
begin
execute immediate 'create table mytab
as select tab1.*
from tab1, tabc
where tab1.x = dynamic_table.x';
end;
begin
proc1;
end;
/dynamic_table --> should be dynamically replaced in the procedure
There are two more tables in this scenario - tabe and tabf, In the above procedure, I have to dynamically replace dynamic_table first with tabe, call it, then then replace with tabf and execute procedure again
Is there a way I can do that ? any dynamic sql that will prompt me to call proc1 twice, 1st time replace dynamic_table with tabe, then with tabf
the structure of tabe and tabf is the same, I am currently passing a parameter to the procedure and replacing dynamic_table with the input parameter, and then
calling the procedure twice by passing the table names, wanted to follow a better approach
Currently, I am doing somethig like this:
create procedure proc1 (i_param in varchar2)
is
v_x number;
begin
execute immediate 'create table mytab
as select tab1.*
from tab1, tabc
where tab1.x = i_param.x';
end;
begin
proc1('tabe');
proc1('tabf');
end;
/Why are you trying to do this?
Good database design practice means that you don't create tables dynamically within your code.
Why do you have tables of the same structure with different names?
Dynamic table names are not a good idea because it means all your code has to be dynamic.
So whilst it's perfectly possible to do what you are asking, showing you how to do it would be like me showing you how to fly a plane into the ground, i.e. not something that's clever or wise.
So, better you explain what problem you are trying to solve rather than ask us how to improve on the poor code you are already trying to do. -
Dynamic table name in an inner join - select statement
Hi,
Please can you let me know if is possible to use a Dynamic table name in an inner join?
Something like the statement below? (It works in a simple select statement but not in an inner join)
SELECT *
INTO CORRESPONDING FIELDS OF <t_itab>
FROM <Dynamic table name> INNER JOIN pa0050 ON
( <Dynamic table name>pernr = pa0050pernr )
WHERE <Dynamic table name>~pernr = it_pernr-l_pernr
AND pa0050~bdegr = f_bdegr.
Any help would be apprecited very much.
Thanks & Regards.Hi,
Check this link.
[http://help.sap.com/saphelp_nw04/helpdata/en/fc/eb39c4358411d1829f0000e829fbfe/frameset.htm]
[Re: accessing dynamic internal table's fields??;
hope it'll help u.
Regards,
Sneha.
Edited by: sneha kumari on Jun 18, 2009 1:57 PM -
Dynamic table name in native SQL
Hi,
How can i use dynamic table name in native SQL?
My req is to select data from a external database table , but the table name will be only poulated during runtime.
How can i acheive this?
Regards,
Arun.It should work OK - see demo below.
Jonathan
report zsdn_jc_adbc_test.
start-of-selection.
perform demo_lookup.
form demo_lookup.
data:
l_error_msg type string,
ls_t001 type t001, "Company
ls_t003 type t003. "Doc types
perform dynamic_lookup
using
'T001'
changing
ls_t001
l_error_msg.
write: / l_error_msg.
perform dynamic_lookup
using
'T003'
changing
ls_t003
l_error_msg.
write: / l_error_msg.
endform.
form dynamic_lookup
using
i_tabname type tabname
changing
os_data type any
o_error_msg type string.
* Use ADBC to select data
data:
l_mandt_ref type ref to data,
l_result_ref type ref to data,
l_mandt type symandt,
l_tabname type tabname,
l_sql_statement type string,
lo_cx_root type ref to cx_root,
lo_cx_sql type ref to cx_sql_exception,
lo_connection type ref to cl_sql_connection,
lo_statement type ref to cl_sql_statement,
lo_result_set type ref to cl_sql_result_set.
clear: os_data, o_error_msg.
get reference of l_mandt into l_mandt_ref.
get reference of os_data into l_result_ref.
l_mandt = '222'. "i.e. select from client 222
l_tabname = i_tabname.
try.
lo_connection = cl_sql_connection=>get_connection( ).
lo_statement = lo_connection->create_statement( ).
* Set criteria for select:
lo_statement->set_param( l_mandt_ref ).
concatenate
'select * from' l_tabname
'where mandt = ?'
into l_sql_statement separated by space.
* Execute
call method lo_statement->execute_query
exporting
statement = l_sql_statement
hold_cursor = space
receiving
result_set = lo_result_set.
* Get the data from the resultset.
lo_result_set->set_param_struct( l_result_ref ).
while lo_result_set->next( ) > 0.
write: / os_data.
endwhile.
* Tidy up:
lo_result_set->close( ).
lo_connection->close( ).
catch cx_sql_exception into lo_cx_sql.
o_error_msg = lo_cx_sql->get_text( ).
catch cx_root into lo_cx_root.
o_error_msg = lo_cx_root->get_text( ).
endtry.
endform. -
Dynamic Table name in Inner Join in 4.6c
data: tab1(10) type c value 'MARA',
tab2(10) type c value 'MAKT'.
data: dbtab1(10) type c,
dbtab2(10) type c .
dbtab1 = tab1.
dbtab2 = tab2.
DATA: BEGIN OF itab occurs 0,
matnr TYPE mara-matnr,
maktx type makt-maktx,
END OF itab.
DATA: column_syntax TYPE string,
dbtab_syntax TYPE string.
PARAMETERS: p_matnr TYPE mara-matnr.
dbtab_syntax = '( (dbtab1) AS t1 '
&' INNER JOIN (dbtab2) AS t4 ON t1MATNR = t4MATNR )'.
SELECT matnr maktx
FROM (dbtab_syntax)
INTO TABLE itab WHERE t4~matnr = p_matnr.
Got the following error:
"A table name, specified in an SQL command, is unknown"
It seems not able to read dynamic table name in dbtab_syntax.
thanks
anya
Moderation Message: Duplicate Post.
Edited by: kishan P on Nov 29, 2010 11:17 AMHi,
Check this link.
[http://help.sap.com/saphelp_nw04/helpdata/en/fc/eb39c4358411d1829f0000e829fbfe/frameset.htm]
[Re: accessing dynamic internal table's fields??;
hope it'll help u.
Regards,
Sneha.
Edited by: sneha kumari on Jun 18, 2009 1:57 PM -
Passing dynamic table name in ADO. net destination
I am new to SSIS and I have a requirement where i need to pass dynamic table name in ADO .net destination .
My package contains an "Execute Sql task" in the control flow which computes the destination table name to be provided at run time and stores it in a variable expression
"@[User::Table_name]"(which has a scope of full package).
Now, the problem I'm facing right now is that , I am unable to use this variable expression in the ADO .Net Destination .
I need to pass this variable expression as the table name in ado .net destination.
But, whenever I use this variable in place as the table name I keep on getting this error and my package fails:-
[ADO NET Destination [403]] Error: The Table or View name is not expected. \n\t If you are quoting the table name, please use the prefix " and the suffix " of your selected data provider for quotation. \n\t If you are using multipart name,
please use at most three parts for the table name.
Although ,I am able to run my package when i am providing the existing(static) table name.So there is nothing wrong with the package.
Tried a lot of things still not working..Please help...I am having the result stored in the variable expression . I just need a way to be able to use it as the Destination table in ADO .net Destination.
I am not sure if this will work for you, but I am able to store the table name in variable and use it dynamically (via data flow task expression property ) as shown.
Thanks, hsbal
Hi Adeep,
Based on my further research, just as hsbal said, we can set a variable as ADO.NET Destination table via Expressions property in Data Flow Task.
If there are any other questions, please feel free to ask.
Thanks,
Katherine Xiong
Katherine Xiong
TechNet Community Support -
Dynamic table name from Arguments in cfquery /
I'm trying to use dynamic table names in a cfc but seem to
have hit upon a wall as my calling methods from flash keep hitting
my _error methods - Code attached to show what I'm trying to
achieve; if anyone can give me some pointers it would be a great
help. I've seen numerous by using the Form with the arguments but
this is coming into a gateway used by a flash component and doesn't
work no matter how much I fiddle the code.
Thanks in advanceThere was a time when I needed a dynamic query such as this.
BUT, it is very dangerous, which is why I took a few steps to make
it more secure.
1. Always use cfqueryparam and strict datatyping
2. Use listFindNoCase for known table names in the database
e.g
<cfset variables.tableNames =
"items,products,categories,blog" />
<cfif
listContainsNoCase(variables.tableNames,lCase(trim(arguments.tableName)),",")>
query here
<cfelse>
Error: Unknown table requested
</cfif>
Mikey -
Problem with Dynamic Table Name
Hello all,
I am having trouble using a dynamic table name. I have the following code.....
declare l_cur sys_refcursor;
l_ID int;
l_tableName varchar(30);
BEGIN
open l_cur for
select hkc.ColumnID, mapping from &HKAPPDB_Schema_Name..doctablemapping ddm
inner join &HKDB_Schema_Name..HKColumns hkc on hkc.doctablemappingid = ddm.id
where ddm.id > 0;
LOOP
FETCH l_cur into l_ID, l_tableName;
EXIT WHEN l_cur%notfound;
-- update missing VerbID in DocumentDocMapping table
UPDATE &HKAPPDB_Schema_Name..IndexedDocument
SET VerbID = (SELECT t.VerbID
FROM (SELECT DocRef, VerbID, DateUpdated
FROM &HKAPPDB_Schema_Name..l_tableName dd - this is where the dynamic table name is used
WHERE dd.VerbID is not NULL))
WHERE HKColumnID = l_ID AND VerbID is NULL;
END loop;
end;
/When I try to execute this i get an error
ORA-00942: table or view does not exist
What am I doing wrong?
Regards,
Tobyredeye wrote:
I only started about 6 weeks ago, with no tutorials and learning it on the fly; Same here.. only my introduction was to a 12 node Oracle OPS cluster all those years ago.. and required a whole new mind set after using SQL-Server extensively. But it was fun. Still is. :-)
but thats what you get when a company throws you in at the deep end with a ridiculous time constraint to migrate a whole MSSQL DB.Migrating SQL-Server to Oracle is not a simple thing. A lot of best practices in SQL-Server are absolutely worse practices in Oracle - they are that different. Simple example is lock escalation - an issue in SQL-Server. In Oracle, the concept of a lock being escalated into a page lock simply does not exist.
In terms of getting the migration done as quickly and painlessly as possible I try to reuse all the logic as it appears in the MSSQL code - in this case it was using dynamic table names. I do not doubt that i am probably shooting myself in the foot in the long run.....As long as you do not splatter too much blood on us here.. not a problem :D
Seriously though - just keep in mind that what works in SQL-Server may not work as well (or even at all) in Oracle. So do not hesitate to refactor (from design to code to SQL) mercilessly when you think it is warranted. -
Table name changed in Reports 3.0
My DBA asked me to change the table name from SA_AWARDS to SAFETY_AWARDS.
I had already developed a report using table name SA_AWARDS.
When I change the table name in my report to SAFETY_AWARDS, I get compilation errors.
How can I fix it ?
Thanks.
SureshHi
As i understand your problem , you have changed the table name in the query wizard and then tried to compile and it is giving errors ....
well anytime you modify the sql (even add a space) the column names are renamed ... ie if you originaly had column Customer_name it would be renamed as customer_name1 ....
now if in the original report you are using the columns for any computation etc it will not find the old column and will give compilaiton errors .... one way is to change the column names back to original names ... or better modify the sql once more by adding space and you will get back the original names most of the times .....
the best way to avoid this is give alias name in the sql first time around , so it dosnt create problems ....
once you take care of this i think your problem should be solved .....
if not do let me know in more detail
bye
sudhir -
*Dynamic* Table Name in From Clause with input from cursor
Hello
I have a cursor say...
select table_name from dba_tables where <blah>
The result is
row1:: emp
rwo2:: emp_1 ---> Both the tables have same structure and entirely different data... please dont ask why... that's the way it is and we cant change it..
Now we need to run an Insert...
insert into tableX (col1,col2,...) select a,b,... from <o/p of the cursor> where <blah> ...
Note: The table name changes and it the cursor can o/p emp,emp_a and emp_b.
Am looking to do it parallel instead of doing it serially and with best performance ....no sql injection issues.
By parallel i mean
insert into tableX (col1,col2,...) select a,b,... from emp where <blah>
and insert into tableX (col1,col2,...) select a,b,... from emp_1 where <blah> statements to fire parallel/at the same time to the database. If you can share procedure if you guys already have with you.. is really appreciated
Thanks a lot for your time....
Edited by: user007009 on Apr 27, 2013 8:33 PMHello thanks for your time..
I tried to implement the chunk by sql parallel execution approach and it took 3.1 seconds to complete.. while the SP took around 0.042 seconds and the parallel process didn't throwed any errors and it didn't insert any data either... I am not sure what I am doing wrong... can you please let me know your thoughts...
Sample Data Creation::::::::::::::*
drop table table_ASERCARE purge;
drop table table_MEDCARE purge;
DROP TABLE TABLE_XYCARE PURGE;
DROP TABLE TABLE_TIME PURGE;
DROP TABLE TABLE_LOCATION PURGE;
drop table table_group purge;
drop table tablex purge;
-- select distinct TABLE_NAME from ALL_TAB_COLS where TABLE_NAME like 'EMP%';
create table table_asercare (time number(30), location_number number(5), value number(5),catg_id number(5));
insert into table_asercare values (20110111, 01, 55, 1200);
insert into table_asercare values (20110131, 01, 31, 1223);
insert into table_asercare values (20120131, 15, 24,1224);
insert into table_ASERCARE values (20130131, 03, 555,1200);
-- Truncate table table_MEDCARE
create table table_medcare (time number(30), location_number number(5), value number(5),catg_id number(5));
insert into table_medcare values (20110113, 01, 23, 1200);
insert into table_medcare values (20110128, 02, 78, 1223);
insert into table_medcare values (20110130, 03, 100, 1224);
insert into table_medcare values (20120111, 04, 57, 1200);
insert into table_medcare values (20120221, 05, 64, 1223);
insert into table_MEDCARE values (20130321, 15, 48, 1224);
create table table_xycare (time number(30), location_number number(5), value number(5),catg_id number(5));
insert into table_xycare values (20100113, 01, 99, 1200);
insert into table_xycare values (20110128, 02, 90, 1223);
insert into table_XYCARE values (20130128, 03, 24, 1224);
create table table_LOCATION ( LOCATION_NUMBER number(5), LOCATION_NAME varchar2(50));
insert into table_LOCATION values (01, 'atlanta1');
insert into table_LOCATION values (02, 'atlanta2');
insert into table_LOCATION values (03, 'atlanta3');
insert into table_LOCATION values (04, 'atlanta4');
insert into table_LOCATION values (05, 'atlanta5');
insert into table_location values (15, 'atlanta15');
create table table_category (catg_id number(5), catg_name varchar2(30));
insert into table_category values (1200, 'EMS');
insert into table_category values (1223, 'LJM');
insert into table_category values (1224, 'LIO');
create table table_TIME (YEAR_MONTH_DATE number(30), YEAR_VAL number(4), MONTH_VAL number(2),DATE_VAL number(2));
insert into table_TIME values (20110111, 2011, 01,11 );
insert into table_TIME values (20110131, 2011, 01,31);
insert into table_TIME values (20120131, 2012, 01,31);
insert into table_TIME values (20130131, 2013, 01,31);
insert into table_TIME values (20110128, 2011, 01,28 );
insert into table_TIME values (20110130, 2011, 01,30 );
insert into table_TIME values (20120111, 2012, 01,11 );
insert into table_TIME values (20120221, 2012, 02,21 );
insert into table_TIME values (20130321, 2013, 03,21 );
insert into table_TIME values (20100113, 2010, 01,13 );
insert into table_TIME values (20130128, 2013, 01,28 );
--Truncate table table_group
CREATE TABLE table_group (group_key number,table_name VARCHAR2(30), group_name VARCHAR2(30), catg_name varchar2(30));
insert into table_group values (1,'table_ASERCARE', 'GROUP_ONE','EMS');
insert into table_group values (2,'table_MEDCARE', 'GROUP_ONE','LJM');
INSERT INTO TABLE_GROUP VALUES (3,'table_XYCARE', 'GROUP_TWO','LIO');
create table TABLEX (YEAR_VAL number(4) ,LOCATION_NAME varchar2(50),tablename VARCHAR2(30), cnt number ); --> Proc data will be inserted into this...
Stored Procedure++++++++_
CREATE OR REPLACE
PROCEDURE ABC(
GROUP_NAME_IN IN VARCHAR2 )
is
type c1 is ref cursor;
sql_stmt VARCHAR2(200);
v_sql VARCHAR2(30000);
c1_cv c1;
table_name_f VARCHAR2(30);
c1_rec TABLE_GROUP%rowtype;
BEGIN
SQL_STMT := 'SELECT * FROM TABLE_GROUP WHERE GROUP_NAME = :i';
OPEN c1_cv FOR SQL_STMT USING GROUP_NAME_IN ;
loop
fetch c1_cv INTO c1_rec;
exit when c1_cv%notfound;
-- forall i in c1_rec.FIRST ..c1_rec.last loop
table_name_f := c1_rec.table_name;
-- END LOOP;
EXECUTE immediate
'INSERT INTO tablex (YEAR_VAL,LOCATION_NAME, tablename, cnt)
SELECT
t.YEAR_VAL,l.location_name, :table_name, count(*) as cnt
FROM '
||table_name_f||
' variable_table
,table_time t
, table_location l
,table_group g
,table_category ctg
WHERE t.year_month_date = variable_table.TIME
and variable_table.location_number = l.location_number
and ctg.catg_id = variable_table.catg_id
--and ctg.catg_name = g.catg_name
GROUP BY t.YEAR_VAL,l.location_name,g.catg_name' USING table_name_f;
--dbms_output.put_line ( 'The SQL is'|| v_sql);
COMMIT;
--dbms_output.put_line ( c1_rec.table_name||','||c1_rec.group_name );
--dbms_output.put_line ( 'The table name is '|| c1_rec.table_name );
end loop;
CLOSE c1_cv;
--null;
END ABC;
Parallel Execution Code++++++++++_
begin
begin
DBMS_PARALLEL_EXECUTE.DROP_TASK(task_name => 'TASK_NAME');
exception when others then null;
end;
DBMS_PARALLEL_EXECUTE.CREATE_TASK(task_name => 'TASK_NAME');
DBMS_PARALLEL_EXECUTE.CREATE_CHUNKS_BY_SQL(task_name => 'TASK_NAME', sql_stmt =>'select distinct group_key, group_key from table_group', by_rowid => false);
end;
begin
DBMS_PARALLEL_EXECUTE.RUN_TASK (task_name => 'TASK_NAME',
sql_stmt =>'declare
s varchar2(16000); vstart_id number := :start_id; vend_id number:= :end_id;
table_name varchar2(30);
begin
select table_name into table_name from group_table where group_key=vstart_id;
s:=''INSERT INTO tablex (YEAR_VAL,LOCATION_NAME, tablename, cnt)
SELECT
t.YEAR_VAL,l.location_name, :table_name, count(*) as cnt
FROM ''||table_name||'' variable_table
,table_time t
, table_location l
,table_group g
,table_category ctg
WHERE t.year_month_date = variable_table.TIME
and variable_table.location_number = l.location_number
and ctg.catg_id = variable_table.catg_id
and ctg.catg_name = g.catg_name
and g.group_key =:vstart_id
GROUP BY t.YEAR_VAL,l.location_name,g.catg_name'';
execute immediate s using vstart_id;
commit;
end;',
language_flag => DBMS_SQL.NATIVE, parallel_level => 2 );
end;
/ thanks in advance for your time.
Edited by: user007009 on Apr 28, 2013 12:25 PM -
After run (or test) of procedure
create or replace procedure tmp_select_dymanic
( AInTable IN VARCHAR2,
ACount OUT NUMBER
) as
begin
EXECUTE IMMEDIATE 'BEGIN SELECT count(*) INTO :Count FROM :InTable END;'
USING ACount, AInTable;
end tmp_select_dymanic;
error message: invalid table name.
I know the table exists and contains data. I can make SELECT in SQL (not dynamic).
What a reason for error? May be privileges in database? But i make SELECT on my own table?
How can i set dynamic table name in other way?
My Oracle Version 10g.What you are asking can be done by REF_CURSOR;
look this example and try your self the rest:
CREATE OR REPLACE PROCEDURE insert_to_table_dinamic (
table1 IN VARCHAR2,
table2 IN VARCHAR2
AS
rc sys_refcursor;
v_sql VARCHAR2 (2000);
v_deptno NUMBER;
BEGIN
v_sql :=
'SELECT DEPTNO FROM '
|| table1
|| ' WHERE ROWNUM = 1 AND DEPTNO IS NOT NULL';
OPEN rc FOR v_sql;
LOOP
FETCH rc
INTO v_deptno;
EXIT WHEN rc%NOTFOUND;
v_sql :=
'UPDATE '
|| table2
|| ' SET DEPTNO = '
|| v_deptno
|| ' WHERE DEPTNO IS NULL';
EXECUTE IMMEDIATE v_sql;
END LOOP;
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line (SQLCODE || SQLERRM);
END insert_to_table_dinamic;when i give DEPT , EMP as my 2 parameters above code will set the deptno in EMP table where deptno is null;
--Just a test proc.
Maybe you are looking for
-
Starting AMT FailedI am facing the same issue while opening AMT/Mobile Sale
Hi All, I am facing a issue while opening AMT/Mobile Sales Appl/System Maintenance. I am getting the error saying 'UI_CORE_APPL_LAUNCH_FAILED_STA'. Could anyone out there please tell me how to resolve this issue? I checked the UID and PWD under HKEY
-
Cannot create Azure Service Bus connector
Hi, I tried to create a service bus connector. I did put in the connection string and the name of the queue, validation passed showing a green check. For the rest of the settings I just used default values given. The Create button is still disabled a
-
Notes no longer syncs with icould
Since upgrading to Mavericks the Notes on my application no longer synchs with the web-based iCloud site. It also creates multiple copies of files when I make a new note. (Notes on my iPad Mini continues to work as normal, synching automatically with
-
Error with Enhanced Interface determination
Hi Experts, In enhanced interface determination for message splitting w/o BPM, i have given the interface mapping. But while testing the configuration.......... i am getiing an error at Interface Determination & Mapping which is not showing any proce
-
QuickTime 7 installation error - cannot install
I'm trying to install Quicktime 7.65.17.80 onto a Windows XP SP3 machine. After selecting the installation options (installation directory/desktop icons/check for updates) the installer gives me the following error: "The installer encountered errors