Can the table name in a cursor be parameterized?
I would like to do the following in pl/sql
Procedure my_proc ( varchar2 table_name) is
CURSOR my_cursor ( table_name VARCHAR2 ) IS SELECT some_column FROM table_name ;
i.e. parameterize the table name. I know it is possible to parameterize the SELECT cause by doing the above but, as written, my example will not compile. So, I'm wondering if it is even possible to create a cursor like this.
Thanks for any help/advice,
-=beeky
I wanted to add that I have no control over the database design. The reason I want to parameterize a cursor is to allow a single procedure to do exactly the same thing to six tables. These tables contain data for different geographic regions and are supplied by an outside party. My script essentially merges these tables into our relational model.
Thanks again to all who replied,
-=beeky
Similar Messages
-
Using a Variable for Table Name with a cursor
Hello All
Is it possible to use a Parameter passed to a procedure as the table name
in a cursor selection statment. I thought the below would work but I get
a error. Does anyone have any ideas?? The Error is listed below to.
Here's the code I just complied
CREATE OR REPLACE PROCEDURE Dup_Add(NEWQATABLE IN VARCHAR2) IS
CURSOR c1 IS SELECT MUNI,PROV FROM NEWQATABLE GROUP BY MUNI, PROV;
c1rec c1%ROWTYPE;
BEGIN
OPEN c1;
LOOP
FETCH c1 INTO c1rec;
EXIT WHEN c1%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(c1rec.MUNI);
END LOOP;
CLOSE c1;
END;
Here is the errors
LINE/COL ERROR
3/8 PLS-00341: declaration of cursor 'C1' is incomplete or malformed
3/15 PL/SQL: SQL Statement ignored
3/38 PLS-00201: identifier 'NEWQATABLE' must be declared
5/7 PL/SQL: Item ignored
10/3 PL/SQL: SQL Statement ignored
10/17 PLS-00320: the declaration of the type of this expression is
incomplete or malformed
12/3 PL/SQL: Statement ignored
12/24 PLS-00320: the declaration of the type of this expression is
incomplete or malformed
LINE/COL ERROR
Thanks
PeterIf you are going to have a table name or a column name as a parameter, then you have to open the cursor dynamically. The following example uses Native Dynamic SQL (NDS) to open a ref cursor dynamically. I also eliminated the group by clause, since it is intended for use with aggregate functions and you weren't using an aggregate function. Also notice that there are some other differences in terms of defining variables and fetching and so forth.
SQL> CREATE TABLE test_table
2 AS
3 SELECT deptno AS muni,
4 dname AS prov
5 FROM dept
6 /
Table created.
SQL> CREATE OR REPLACE PROCEDURE Dup_Add
2 (newqatable IN VARCHAR2)
3 IS
4 TYPE cursor_type IS REF CURSOR;
5 c1 cursor_type;
6 c1muni NUMBER;
7 c1prov VARCHAR2 (20);
8 BEGIN
9 OPEN c1 FOR 'SELECT muni, prov FROM ' || newqatable;
10 LOOP
11 FETCH c1 INTO c1muni, c1prov;
12 EXIT WHEN c1%NOTFOUND;
13 DBMS_OUTPUT.PUT_LINE (c1muni || ' ' || c1prov);
14 END LOOP;
15 CLOSE c1;
16 END;
17 /
Procedure created.
SQL> SHOW ERRORS
No errors.
SQL> SET SERVEROUTPUT ON
SQL> EXECUTE dup_add ('test_table')
10 ACCOUNTING
20 RESEARCH
30 SALES
40 OPERATIONS
PL/SQL procedure successfully completed. -
How can I get the table name of a field..
Hi,
If we know the table name we can find all the fileds from it
using desc <tablename>.
But, I would like to find table name of a known field's name.
Where all these fields are storing in the database.
THanks in Advance,
Srinivasulu.ALL_TAB_COLUMNS
rgds, APC -
How can I get the table name of my column?
I'm using the JDK 1.3 trying to get a table name of a column from a result set. Regardless of what driver I'm using (ODBC Bridge/Oracle) I always get a null returned. Does this method work?
If not, if I'm doing an SQL query that uses more than 1 table and each table has a return of the same column name, how do I distinguish which table the column is from. ThanksYou can use ResultSetMetaData interface and method
String getTableName(int column)
This should return you the table name.
To get ResultSetMetaData object, you can use
ResultSetMetaData getMetaData()
method of ResultSet interface.
HTH -
How can one find the table name of the Delta Que and setup table?
Hi !
Is there any method to find the table name of the delta que and Extraction que ?setup table = <extract structure>_setup
example: setup table for MC11VA0ITM = MC11VA0ITM_SETUP
Delta Queue is based on following 3 tables:
ARFCSDATA
ARFCSSTATE
TRFCQOUT
assign points if useful ***
Thanks,
Raj -
Invalid table name when pass in the table name as variable in dynamic sql
Hi,
I need to create a stored procedure which will return a list of data to my java application like the following.
first, select the table name from the first table.
For example : SELECT T_NAME FROM MDR_SMSTABLES
second, select the data from the table which returned by first select statement
For example : SELECT * FROM T_NAME.
I use dynamic sql with cursor to select the data. But it returns "java.sql.SQLException: ORA-00903: invalid table name"
I fetch the table name to varchar2. I think this might the cause it returns me the this error. But i don't know what type should i put for the table name other then varchar2.
val2 VARCHAR2(200);
OPEN cv FOR
SELECT T_NAME FROM MDR_SMSTABLES WHERE T_DATE=d_dt_sent;
FETCH cv INTO val2;
WHILE cv%FOUND
LOOP
OPEN refcur FOR
'SELECT * FROM :t WHERE MID = :m' USING val2, msg_id;
EXIT WHEN refcur IS NOT NULL;
FETCH cv INTO val2;
END LOOP;
As my stored procedure is quite long, so i just paste some of the code here. Hope the information is enough. Can anyone please help?
ThanksDECLARE
val2 VARCHAR2 (200);
cv sys_refcursor;
refcur sys_refcursor;
BEGIN
OPEN cv FOR
SELECT table_name
FROM user_tables
WHERE table_name IN ('EMP', 'DEPT');
FETCH cv INTO val2;
WHILE cv%FOUND
LOOP
OPEN refcur FOR 'SELECT * FROM '||val2;
EXIT WHEN refcur IS NOT NULL;
FETCH cv INTO val2;
END LOOP;
END; -
Hi All
I have nearly 70 procedures in my database.
I want to get all the distinct table names used in the 70 procedures.
Is it possible?
Note:
All the table names are prefixed by schema name like DEVSRC.table_name.
Please advice
Thanks
JoJohney wrote:
Hi VT
One doubt.
This query will give the table names of only select stmt used in the procedure
or
List of table names that are with in any DML operations inside the procedure?
Thanks
JoIt will give all the table either used in select or in any DML..
You can also check by creating a temp proc
SQL> drop procedure proc_test;
Procedure dropped.
SQL> select name, referenced_name, dependency_type from user_dependencies
2 where type = 'PROCEDURE' and referenced_type = 'TABLE' and name='PROC_TEST';
no rows selected
SQL> create or replace
2 PROCEDURE proc_test
3 IS
4 v_ID number;
5 v_PRID number;
6 v_PRLID number;
7 v_DATERECEIVED date;
8 Cursor C1 is
9 select * from table_c;
10 BEGIN
11 open c1;
12 LOOP
13 FETCH c1 INTO v_ID,v_PRID,v_PRLID,v_DATERECEIVED;
14 EXIT WHEN c1%NOTFOUND;
15 insert into table_b values(v_ID,v_PRID,v_PRLID,v_DATERECEIVED);
16 Commit;
17 END LOOP;
18 CLOSE C1;
19 END;
20 /
Procedure created.
SQL> select name, referenced_name, dependency_type from user_dependencies
2 where type = 'PROCEDURE' and referenced_type = 'TABLE' and name='PROC_TEST';
NAME
REFERENCED_NAME DEPE
PROC_TEST
TABLE_B HARD
PROC_TEST
TABLE_C HARD
SQL> Regards
Umesh -
How to pass the table name dynamically in xml parsing
Hi All,
I have created one procedure for parsing xml file which is working perfectly.
FORALL i IN t_tab.first .. t_tab.last
INSERT INTO Test_AP VALUES t_tab(i);Now I want to put the table name dynamically+. For that I have added one query and modify above code as follow:-
I have already declare dml_str varchar2(800) in declaration part.
Query is as follows:-
select table_name into tab_name from VERSION_DETAILS where SUBVERSION_NO=abc; -- here abc is variable name which contains values.
FORALL i IN t_tab.first .. t_tab.last
dml_str := 'INSERT INTO ' || tab_name || ' values :vals';
EXECUTE IMMEDIATE dml_str USING t_tab(i);But it's not working. How I will resolve this or through which way I achieved the intended results. Anyone can guide me on this matter.
Thanks in advance for your help...Hi,
But it's not working.Don't you think it would help to give the error message?
Put the assignment before FORALL.
FORALL only accepts one subsequent DML statement (static or dynamic SQL) :
dml_str := 'INSERT INTO ' || tab_name || ' values :vals';
FORALL i IN t_tab.first .. t_tab.last
EXECUTE IMMEDIATE dml_str USING t_tab(i); -
How to look for the Table Name
Hi Friends,
Sometimes we need to download the table for the desired information if the same is not available from a particular report. How to look for the table name? Is there a report or a particular feild, where we can find the name of the particular table?
Thanks for the assistance.
RegardsHi Friend,
If you want to see the structures then go to SE11. Sometimes it happens that you cannot find the table names but only fields. In such case, if you want to find the Table names which is not available, then go to SE90.
Abap Dictionary > Fields > Table Fields.
Now Enter the Field name in Right Hand Side of the screen then Execute. You will see the all tables by which that Fields are used.
Regards,
Jigar -
How to get the table name and bind columns names in an INSERT statement ?
I have an INSERT statement with input parameters (for example
INSERT INTO my_table VALUES (:a, :a, :a)) and I want to know
without parsing the statement which is the name of table to
insert to and the corresponding columns.
This is needed to generate the SELECT FOR UPDATE statement to
refetch a BLOB before actually writing to it. The code does not
know in advance the schema (generic code).
Thanks in advance,
Joseph CanedoOnce you have prepared your statement, you can execute the
statement with the OCI_DESCRIBE_ONLY mode before binding any
columns. Then you can use OCIParamGet to find out about each
column (column index is 1-based). You should get OCI_NO_DATA or
ORA-24334 if there are no more columns in the statement. Note
that the parameter descriptor from OCIParamGet is
allocated/freed internally by OCI; you do not need to manage it
explicitly. The parameter descriptor is passed to OCIAttrGet in
order to obtain for instance the maximum size of data in the
column OCI_ATTR_DATA_SIZE. You can also get the column name in
this way, although I do not remember the #define off the top of
my head. Getting the table name appears to be much more
difficult; I have never had to do that yet. Good luck. -Ralph -
Creating a Mat View having the same name with that of the table name
Hi everyone,
After dropping the mat view name "QQ.TRDLN_DIM_MV", I'm trying to re-create it by having the same name as that of the table but I got an error stating that "name is already used by an existing object". How can create a mat view to look like the object owned by schema "GQ", having a name that is the same as that of the table name, without dropping the table?
OWNER_O OBJECT_TYPE CREATED LAST_DDL_ TIMESTAMP STATUS OBJECT_NAME
===
GQ MATERIALIZED VIEW 05-NOV-08 13-DEC-08 2008-11-05:06:31:46 VALID TRDLN_DIM_MV
GQ TABLE 05-NOV-08 15-DEC-08 2008-11-05:06:31:00 VALID TRDLN_DIM_MV
QQ TABLE 17-AUG-07 16-MAR-09 2007-08-17:17:05:21 VALID TRDLN_DIM_MV
SQL>CREATE MATERIALIZED VIEW QQ.TRDLN_DIM_MV
2 TABLESPACE FPLC01S
3 NOCACHE
4 NOLOGGING
5 COMPRESS
6 PARALLEL ( DEGREE 2 INSTANCES 1 )
7 BUILD IMMEDIATE
8 REFRESH FORCE ON DEMAND
9 WITH PRIMARY KEY
10 AS
11 select /*+ NO_REWRITE */ trdln_id,
12 trdln_skid,
13 trdln_end_date,
14 first_value(trdln_end_date) over (partition by trdln_id order by trdln_end_date DESC) as MaxDate
15 from QQ.trdln_dim;
from QQ.trdln_dim
ERROR at line 15:
ORA-00955: name is already used by an existing object
I appreciate your help. Many thanks in advance!
Regards,
RadicYou'd have to rename the table (using ALTER TABLE tablename RENAME TO othername; ) before you create the MV.
You can't have both existing with the same name in the same schema.
What you see in the GQ schema is that the "table" is the underlying table for the Materialized View.
When you do a CREATE MATERIALIZED VIEW MY_MV AS ...
Oracle creates two objects with the same name, one being the Materialized View MY_MV and the other being the table MY_MV which is the physical storage. {Remember that a Materialized View is a means of getting a physical representation of a View}.
In the QQ schema what you have is either
a. a real Table
or
b. an improperly dropped MV, resulting in the underlying Table still present. -
What is the table name ?
Hi all,
I have to add a new column 'initial approval date" in a simple report.
for the PO (purchase order). i want to know where i can get this type of field
i.e 'initial approval date" in which table.
If anybody knows this type of field. please tell me the table name.
Thanks
kunalHello Ajay Kumar,
Release process for PO will be considered as change of PO and it will be updated in CDHDR and CDPOS table, so you need to check these table entires for your report.
Hope this helps.
Regards
Arif Mansuri -
How to find out the table name
hi,
how to find out the table name in which the data from a particular structure in a particular screen is saved,
please tell me the procedure to find out the table name for saving the structure data that is inputted at runtime.
Thanks,
chinnuHi Chinnu,
Below are the tables that are referred to find out the table names
DD02L Table contains the SAP Tables.
DD02T Table contains the SAP Table Texts.
DD01L Table contains the Domains
DD01T Table contains the Domain Texts.
DD03L Table contains the Table Fields.
DD03T Table contains the Table Field Texts. (Language Dependent)
DD04L Table contains the Data Elements.
DD04T Table contains the Data Element Texts.
DD05s Table contains the Foreign Key Fields
last words with L and T only. L->Database Fetch T-> Text
And the procedure to retrive the table name is as follows
1. Go to se11
2. Enter table name DD03T and execute
3. In the next screen you can find Tables, fields, test etc. there you can enter the field name in the fields
and execute.
4. you can get all tables which contains the field.
I hope this will solve your problem
Regards,
Chandru -
What are the table names for CRM and APO?
hi friends,
what are the table names for CRM and APO?
Regards
suneel.hi Suneel,
check in crm forum
Re: SAP-CRM Tables
BUT051 BP Relationship: Contact Person Relationship
Similar to BUT050 , additionally contains Contact Persons Address data
BUT0BK Business Partner: Bank Data & Details
BP Number, Bank Key, Bank Country Key, Bank Account Number
BNKA Bank Master Data
BUT100 BP: Roles
ADR2 Telephone Numbers (Business Address Services)
ADR6 SMTP Numbers (Business Address Services)
Contains Email Id of the BP.
ADRC Addresses (Business Address Services)
BPs Complete Address Details- City, Country, Post Code, District, Street, Title No Etc
TSAD3T Table containing the Title text against a Title No.
COMM_PRODUCT Master Table for Product
CRMM_BUAG Master table for Business Agreement
CRMM_BUAG_H Header Data for Business Agreement such as Tax Category, Tax Characteristic, Form key, Business Agreement Class. Data in this table correspond to ISU CRMD_ORDERADM_H Contains the Header Information for a Business Transaction.
Note:
1. It doesnt store the Business Partner
responsible for the transaction. To
get the Partner No, link it with
CRM_ORDER_INDEX.
2. This table can be used for search
based on the Object Id(Business
Transaction No).
CRMD_CUSTOMER_H Additional Site Details at the Header Level of a Business Transaction
CRMC_PROC_TYPE Master table Business Transaction Type
CRMC_PARTNER_FCT Definition of Partner Functions
SCPRIOT Priorities for Activities with priority text.
CRMC_PROC_TYPE_T Text for a transaction type
CRMC_ACT_OBJ_T Objective Number and Text for Activities
TJ30T All the status code and text
CRMC_PR_ASSIGN : Transaction Type and its Transaction Type Object.
IBIB : Installed Base/Ibase
IBIN : Installed Base Components
COMM_PRODUCT : Products
CRMC_T077D : customer account groups
CRMD_ORDERADM_H (for header) CRMD_ORDERADM_I (Item data)
CRMD_ORDERADM_H Business Transactions CRM
CRMD_ACTIVITY_H Activity
CRMD_OPPORT_H Opportunity
BUTOO : Customer details
BUT001 BP: General data II
BUT100 BP: Roles
BUT150 BP relationship: Attribute table (test
different
BUT_HIER_TREE Business Partner Group Hierarchy
CDBC_T_PRODUCTID Mapping: Product Id
CDBD_ORGMAN Business transaction - organizational unit -
set
COMC_PRODUCT General Product Settings
COMC_R3_FIELDS Assignment of R/3 material master fields to
CFOP
COMM_CATEGORY Category
COMM_CFGMAT Basic Data for Materials
COMM_HIERARCHY Category Hierarchy
COMP_TYPES Hierarchy Tool: Comparison Type Check
Table
CRMC_CPRICPROC Customer Pricing Procedures
SMOKVBEZ15 Assignment employees to positions
CRMMLSGUID: GUID entry (should match GUID in CRMPRLS)
CRMM_BUT_CUSTNO : Also GUID table (GUID here should match GUID in R/3 table CRMKUNNR)
SMOFSUBTAB : Mapping & Parameters
SMOFDSTAT : Download Monitor (R4AM1)
SMOFFILTAB : Filters (Should match filters in R3AC1 & R/3 Table CRMFILTAB)
SMOFOBJECT Definition of Objects for Download
SMOFOBJPAR Parent Objects of an Object in Table
SMOFPARSFA Middleware Parameter
SMOFQFIND Queue Finder Table for MW-Queue finder
SMOFTABLES Definition of Tables for Download -
How to get the table name of a field in a result set
hi!
i have a simple sql query as
select tbl_customerRegistration.*, tbl_customerAddress.address from tbl_customerRegistration, tbl_customerAddress where tbl_customerAddress.customer_id = tbl_customerRegistration.customer_ID
this query executes well and gets data from the database when i get ResultsetMetaData from my result set (having result of above query) i am able to get the field name as
ResultSetMetaData rsmd = rs.getMetaData();//rs is result set
String columnName = rsmd.getColumnName(1);
here i get columnName = "Customer_id"
but when i try to get the tabel name from meta data as
String tableName = rsmd.getTableName(1); i get empty string in table name....
i want to get the table name of the respective field here as it is very important to my logic.....
how can i do that.....
please help me in that regard as it is very urgent
thanks in advance
sajjad ahmed paracha
you may also see the discussion on following link
http://forum.java.sun.com/thread.jspa?threadID=610200&tstart=0So far as I'm aware, you can't get metadata information about the underlying tables in a query from Oracle and/or the Oracle drivers. I suspect, in fact, that the driver would have to have its own SQL parser to get this sort of information.
I'm curious though-- how do you have application logic that depends on the name of the source table but not know in the application what table is involved? Could you do something "cheesy" like
SELECT 'tbl_customerRegistration' AS tbl1_name,
tbl_customerRegistration.*
...Justin
Distributed Database Consulting, Inc.
http://www.ddbcinc.com/askDDBC
Maybe you are looking for
-
QuickLook / Preview and PDFs with hidden layers
Hidden layers in PDF files show up in preview, quicklook and in the generated thumbnails. Is there any known fix for this to get the content to render with only the visible layers?
-
Udev is supposed to be so simple, but every time I play with it, I get edgy. Can somebody explain to me (in very very small words;)) why this is happening: dusty:~ $ ls -l /dev/misc/nvram crw-r----- 1 root kmem 10, 144 2008-12-01 19:23 /dev/misc/nvra
-
We have been using ARIS for process modeling. When ARIS was first installed 3 years ago the IDS consultant suggestd that we go with a 4 level process hierarchy, as follows: Level 1 Process Group (VACD) Level 2 Scenario (EPC) Level 3 Process (EPC colu
-
Receiving a FAX or allowing PC user access to idisk file
Hello everyone, I work with someone who uses a PC and Outlook Express and I need to be able to receive her appointment schedule in some manner. I have Verizon DSL, I followed the Help instructions to set up my ibook to receive a fax and connected a c
-
How to unlock and remove comments in Adobe Reader?
A while ago I left a comment in an adobe file and now I want to change it or remove it. The problem is that I can't do anything to the comment, because it is locked and it seems that I don't have the permission to do that. I run Win 7, 64bit. When I