Calling Stored procedures dynamically
Hi ,
I'm trying to call different Stored prcedures from my Java program based on different conditions.
I have the column values need to be passed as input params to the Stored Procedures.
But the sequence of values and the sequence of the input params inthe stored proc is different and morover the no of input params is different for different stored procedures.
Does anybody have any knowledge how to call dynamically the stored procedures or generalise the calls to some extent.
Any idea or thought will be appreciated.
Thanks
Krish
Hi ,
I'm trying to call different Stored prcedures from my
Java program based on different conditions.
I have the column values need to be passed as input
params to the Stored Procedures.
But the sequence of values and the sequence of the
input params inthe stored proc is different and
morover the no of input params is different for
different stored procedures.
Does anybody have any knowledge how to call
dynamically the stored procedures or generalise the
calls to some extent.
Any idea or thought will be appreciated.You need a simple interpreter/mapper.
Basically your problem is broken in to the following.
1. (set of params) maps to (proc)(param handler)
2. Analyze params to get map value.
3. Use param handle to populate proc
4. Call proc
5. Return values.
The last step is more complicated if you need to return a specialized version of the values. But in that case just add a (populate values handler) to the map.
Note that if you are doing this because you don't want to write code versus a real business need then you should investigate code generation. Generated code is easier to understand, easier to maintain and it faster versus using a generic handler.
Similar Messages
-
Call stored procedure dynamically?
I wrote a bunch of programs in Perl to output different reports. All these programs are very similar: calling a stored procedure in SQL Server, dump the ResultSet into the file in disk ...
My boss asked me to write a "Generic" program to combine these programs together so that we don't need write endless similar programs any more.
I decide to write this program in Java. The new program is supposed to take a stored procedure call as an input parameter (reading from a configuration file, maybe?). It will be great if the program can dynamically determine the field names in the ResultSet from the stored procedure call. In another word, there shouldn't be any hard coded field names in the Java Code. The more generic of the program, the better.
Is this doable? Does anyone have any such experience before? Any idea or recommendation is highly appreciated.
Thanks a lot,
- LXHere is some that I wrote:
//Here is a snippet out of my main program:
md = rs.getMetaData();
noOfColumns = md.getColumnCount();
//Generate the sql for our prepared statement insert
sql = buildInsertSQL("DWXP111", noOfColumns);
lowLevel.info("SQL:" + sql);
//Create the prepared statment
ps = legacyCon.prepareStatement(sql);
//Set the prepared statement input parameters
while(rs.next())
for(int x=1; x<noOfColumns+1; x++)
setParameters(x, md.getColumnType(x));
//Execute the prepared statement
checkForSuccess(ps.executeUpdate());
//Here is the method it calls:
private void setParameters(int columnNo, int dataType)
lowLevel.info("Setting parameter number: " + columnNo);
lowLevel.info("Data type:" + dataType);
try
switch(dataType)
case Types.VARCHAR:
ps.setString(columnNo, rs.getString(columnNo)==null ? "" : rs.getString(columnNo).toUpperCase());
lowLevel.info("String set:" + rs.getString(columnNo));
break;
case Types.DECIMAL:
ps.setString(columnNo, rs.getBigDecimal(columnNo)==null ? "0" : rs.getBigDecimal(columnNo).toString());
lowLevel.info("Decimal set");
break;
case Types.CHAR:
ps.setString(columnNo, rs.getBigDecimal(columnNo)==null ? "0" : rs.getBigDecimal(columnNo).toString());
lowLevel.info("Char set");
break;
catch (SQLException e)
lowLevel.warn("Error while setting parameters for " + dataType + " info");
e.printStackTrace();
} -
Calling stored procedure dynamically
Hello,
I have a feeling this is not possible but was wondering if it is possible to have a call within a package to a stored procedure that is outside the said package? And can a stored procedure outside a package call another stored procedure that is also outside a package?
Reason is, i have a couple of packages that both contain a procedure that is exactly the same so for efficiency can i have the stored procedure that is used by both packages stored outside the packages where it can be called by them both?
Thanks in advanceAh!!! So if i had for example, a stored procedure called total_Customers in Package1 and required to use this >in Package2, i could then have a call within Package2 that said;
Package1.total_CustomersYes, if the procedure total_Customers in Package1 has been declared in the package specification
I recommend you to study the PL/SQL User's Guide and Reference
What Is a PL/SQL Package?
http://download-uk.oracle.com/docs/cd/B10501_01/appdev.920/a96624/09_packs.htm#362
Message was edited by:
Jens Petersen -
Calling SQL stored procedure dynamically
Hallo,
could anybody tell me how to call HANA SQL stored procedure dynamically?
The coding looks like this:
v_ProcedureName := '"' || KpiNamespace || '::' || KpiName || '"';
v_SQL := 'CALL ' || :v_ProcedureName || '( lt_outKPI )';
EXEC :v_SQL;
For this call I get the error message:
"Transaction rolled back by an internal error: wrong number or types of parameters in call: Physical table is not allowed in OUT table variable position: LT_OUTKPI: line 1 col 55 (at pos 54)"
The procedure to be called dynamically has a table output parameter.
Thanks in advance,
Best Regards,
Alexey Romanov.
Hi Alex,
Can you share your requirement on exactly what is the need to call the procedure dynamically?
For your question, have a look on the below:
1) Have a procedure named EMPLOYEE_DETAILS
http://scn.sap.com/servlet/JiveServlet/downloadImage/2-14895702-415799/236-170/pastedImage_0.png
2) Created one more procedure named Dynamically as shown below:
CREATE PROCEDURE Dynamically ()
AS
BEGIN
DECLARE QUERY VARCHAR(1000);
QUERY := 'call EMPLOYEE_DETIALS(?)';
EXECUTE IMMEDIATE (:QUERY);
END;
3) Output:
http://scn.sap.com/servlet/JiveServlet/downloadImage/2-14895702-415800/210-189/pastedImage_3.png
Regards,
Krishna Tangudu
Hi Krishna,
Thanks for your reply!
Unfortunately, I can neither go to ‘full discussion’, nor open the pictures, you have attached, nor see you reply.
That’s why I just add my reply to the problem description.
The procedure name is composed out of 2 parts on-the-fly, that is why I have to call it dynamically:
create local temporary table "#KPIEvals"(
"KpiNamespace" NVARCHAR(256) CS_STRING,
"KpiName" NVARCHAR(32) CS_STRING,
"KpiText" NVARCHAR(256) CS_STRING,
"Responsible" NVARCHAR(256) CS_STRING );
FOR cur_row as c_cursor DO
v_SQL := '';
v_ProcedureName := '"' || cur_row."KpiNamespace" || '::' || cur_row."KpiName" || '"';
v_SQL := 'CALL ' || :v_ProcedureName || '( lt_outKPI )';
EXEC :v_SQL;
v_SQL := 'INSERT INTO "#KPIEvals" SELECT * FROM :lt_out_kpi';
EXEC :v_SQL;
END FOR;
I guess there might be 2 reasons for the problem:
1. All the procedures are called dynamically in a loop.
2. All the procedures have an output parameter, which is a table.
Hope that helps,
Best Regards,
Alex.Hi Alexey, I think what you may need to do in this case is to do the insert into your temp table from within the dynamically called procedure, therefore no need for output param in your procedure call. You can then select from the temp table in your main procedure. Hope that makes sense.
Peter -
I need an example of oci V7.3 to call stored procedure with IN/OUT parameters.
Hi,
I'm developing an application to access data from Oracle V7.3 using OCI. Is there a way to get the IN, OUT and IN/OUT parameters of a stored procedure from the database ? How can I execute the stored procedures dynamically, through OCI and get the data back ? Is there any sample programs ?
Any help is appreciated.
Thanks
David LinSince ODP.NET does not support Oracle Object type, you can not call this stored procedure directly.
You can write a wrapper procedure over the existing procedure accepting basic types, e.g. Varchar, Number, etc. and call your stored procedure after creating a object from the basic types. -
How to run oracle stored procedure dynamically
How can I call a stored procedure dynamically. My requirement is to call a stored procedure based on user selection on a parameter screen. I do not want to hardcode proocedure name, but rather call dynamically.
If I use the same methodology as of running dynamic sql's Iam getting an error.
"invalid SQL statement after call to procedure"
v_cursorid INTEGER;
v_cnt NUMBER;
v_sqlstring VARCHAR2(2000);
v_sqlstring := 'execute insert_job_status('''||TO_CHAR(SYSDATE,
'dd-mon-yyyy HH:mi:ss')||''');';
v_cursorid := dbms_sql.open_cursor;
dbms_sql.parse(v_cursorid, v_sqlstring, dbms_sql.v7);
--cnt := dbms_sql.execute(v_cursorid);
dbms_sql.close_cursor(v_cursorid);EXECUTE is a SQL*Plus command. try
v_sqlstring := 'begin insert_job_status('''||TO_CHAR(SYSDATE,
'dd-mon-yyyy HH:mi:ss')||'''); end;';Cheers, APC -
How to call stored procedures from EF 6.1.3
Hi
I need to create many reports and I wanna use SPs, with parameters, the question is how to use it from ntity Framework CodeFirst ? I am using EF 6.1.3
I 've found examples using EF but not EF CF, any sample please ?
thanks in advance
Salu2 Sergio TYou create a type to return and pass it as a type...
Like this:
http://stackoverflow.com/questions/20901419/how-to-call-stored-procedure-in-entity-framework-6-code-first
context.Database.SqlQuery<YourEntityType>("storedProcedureName",params);
ps
That was pretty easy to google, by the way.
And... it's not really wpf.
Shrug.
Hope that helps.
Recent Technet articles: Property List Editing;
Dynamic XAML -
Need sample source code for calling stored procedure in Oracle
Hi.
I try to call stored procedure in oracle using JCA JDBC.
Anybody have sample source code for that ?
Regards, Arnold.Thank you very much for a very quick reply. It worked, but I have an extended problem for which I would like to have a solution. Thank you very much in advance for your help. The problem is described below.
I have the Procedure defined as below in the SFCS1 package body
Procedure Company_Selection(O_Cursor IN OUT T_Cursor)
BEGIN
Open O_Cursor FOR
SELECT CompanyId, CompanyName
FROM Company
WHERE CompanyProvince IN ('AL','AK');
END Company_Selection;
In the Oracle Forms, I have a datablock based on the above stored procedure. When I execute the form and from the menu if I click on Execute Query the data block gets filled up with data (The datablock is configured to display 10 items as a tabular form).
At this point in time, I want to automate the process of displaying the data, hence I created a button and from there I want to call this stored procedure. So, in the button trigger I have the following statements
DECLARE
A SFCS1.T_Cursor;
BEGIN
SFCS1.Company_Selection(A);
go_Block ('Block36');
The cursor goes to the corresponding block, but does not display any data. Can you tell me how to get the data displayed. In the future versions, I'm planning to put variables in the WHERE clause. -
Call stored procedure with OUT parameter
Hello,
I have created a short-lived process. Within this process I am using the "FOUNDATION > JDBC > Call Stored Procedure" operation to call an Oracle procedure. This procedure has 3 parameters, 2 IN and 1 OUT parameter.
The procedure is being executed correctly. Both IN parameters receive the correct values but I am unable to get the OUT parameter's value in my process.
Rewriting the procedure as a function gives me an ORA-01460 since one of the parameters contains XML (>32K) so this is not option...
Has someone been able to call a stored procedure with an OUT parameter?
Regards,
NicoObject is Foundation, Execute Script
This is for a query, you can change to a stored procedure call. Pull the value back in the Java code then put into the process variable.
import javax.naming.InitialContext;
import javax.sql.DataSource;
import java.sql.*;
PreparedStatement stmt = null;
Connection conn = null;
ResultSet rs = null;
try {
InitialContext ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("java:IDP_DS");
conn = ds.getConnection();
stmt = conn.prepareStatement("select FUBAR from TB_PT_FUBAR where PROCESS_INSTANCE_ID=?");
stmt.setLong(1, patExecContext.getProcessDataLongValue("/process_data/@inputID"));
rs = stmt.executeQuery();
rs.next();
patExecContext.setProcessDataStringValue("/process_data/outData", rs.getString(1));
} finally {
try {
rs.close();
} catch (Exception rse) {}
try {
stmt.close();
} catch (Exception sse) {}
try {
conn.close();
} catch (Exception cse) {} -
Creation of DB Adaptert for calling stored procedure in MS SQL server
Hi,
I need to create a DB adapter to call a stored procedure in MS SQL Server.
I have gone thru the thread MS SQL Server database connection
It mentions that we need to use a command line utility for generating the wsdl and xsd for calling stored procedures in MS SQL server. Please provide information where to find this utility and how to use it.
Any links to tutorials are welcome.
Thanks !!.
Silas.Command line is required for stored procedures, if you are using the basic options you don't need to worry.
(1) Download MS SQL Server 2005 JDBC Driver from Microsoft Site. http://msdn.microsoft.com/en-us/data/aa937724.aspx
(2) The download is self extracting exe file. Extract this into Program Files on your machine. It should create folder as "Microsoft SQL Server 2005 JDBC Driver"
(3) In above mentioned folder search for sqljdbc.jar copy this file into JDeveloper\JDBC\lib folder.
(4) Open JDeveloper/jdev/bin/jdev.conf file add following entry.
AddJavaLibPath C:/Program files/Microsoft SQL Server 2000 Driver for JDBC/lib
While executing this step make sure that your JDeveloper is closed.
(5) On command prompt go to J Developer folder and execute following command
jdev -verbose
This will open JDeveloper.
(6) Now go to JDeveloper > Connections > Database Connections > New Database Connection
(7) Select Third Party JDBC
(8) Specify MS Sql Server User Name, password and Role.
(9) In connection page specify following
- Driver Class: com.microsoft.sqlserver.jdbc.SQLServerDriver
- For class path browse to C:/Program files/Microsoft SQL Server 2000 Driver for JDBC/lib folder, select sqljdbc.jar add it as library.
- Specify URL as following.
jdbc:sqlserver://SERVERNAME:1433;databaseName=MSSQLDBNAME;
(10) Go to Test page and test it.
cheers
James -
Calling Stored Procedure from Oracle DataBase using Sender JDBC (JDBC-JMS)
Hi All,
We have requirement to move the data from Database to Queue (Interface Flow: JDBC -> JMS).
Database is Oracle.
*Based on Event, data will be triggered into two tables: XX & YY. This event occurs twice daily.
Take one field: 'aa' in XX and compare it with the field: 'pp' in YY.
If both are equal, then
if the field: 'qq' in YY table equals to "Add" then take the data from the view table: 'Add_View'.
else if the field: 'qq' in YY table equals to "Modify" then take the data from the view table: 'Modify_View'.
Finally, We need to archive the selected data from the respective view table.*
From each table, data will come differently, means with different field names.
I thought of call Stored Procedure from Sender JDBC Adapter for the above requirement.
But I heard that, we cannot call stored procedure in Oracle through Sender JDBC as it returns Cursor instead of ResultSet.
Is there any way other than Stored Procedure?
How to handle Data Types as data is coming from two different tables?
Can we create one data type for two tables?
Is BPM required for this to collect data from two different tables?
Can somebody guide me on how to handle this?
Waiting eagerly for help which will be rewarded.
Thanks and Regards,
Jyothirmayi.Hi Gopal,
Thank you for your reply.
>Is there any way other than Stored Procedure?
Can you try configuring sender adapter to poll the data in intervals. You can configure Automatic TIme planning (ATP) in the sender jdbc channel.
I need to select the data from different tables based on some conditions. Let me simplify that.
Suppose Table1 contains 'n' no of rows. For each row, I need to test two conditions where only one condition will be satisfied. If 1st condition is satisfied, then data needs to be taken from Table2 else data needs to be taken from Table3.
How can we meet this by configuring sender adapter with ATP?
================================================================================================
>How to handle Data Types as data is coming from two different tables?
If you use join query in the select statement field of the channel then whatever you need select fields will be returned. This might be fields of two tables. your datatype fields are combination of two diff table.
we need to take data only from one table at a time. It is not join of two tables.
================================================================================================
Thanks,
Jyothirmayi. -
Calling Stored Procedure with OraClob as parameter IN
I am using Visual C++ and using oo4o the ole way
I am try to call stored procedure that have Clob as parameter in
it seems the the OraParameters Add method don't have the ability since it can only receive variantt.
How do I do it
Thanks
Yoavfyi
Related to the solution/workaround posted by Luc.
see "Do Oracle's JDBC drivers support PL/SQL tables/result sets/records/booleans? "
at http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-faq-090281.html#34_05
regards
Jan Vervecken -
Calling Stored Procedure with in Stored Procedure
I have one stored procedure A, I want to call Stored procedure A from Stored Procedure B and want to give input parameter to Stored Procedure A within Stored Procedure B using while loop.
i.e I have one stored procedure A which uses Telephone number as input parameter and pull out data
I want to create one more stored procedure B which will call stored procedure A internally and give telephone number one by one using while loop and push the result in Table C.>
I have one stored procedure A, I want to call Stored procedure A from Stored Procedure B and want to give input parameter to Stored Procedure A within Stored Procedure B using while loop.
i.e I have one stored procedure A which uses Telephone number as input parameter and pull out data
I want to create one more stored procedure B which will call stored procedure A internally and give telephone number one by one using while loop and push the result in Table C.
>
Doesn't sound a good idea in terms of performance or design. OK, what's your query?
The concept is:
create or replace procedure Proc_A (p_phone varchar2)
is
Begin
Insert into Tablec (col1, col2, col3, phone) values (val1, val2, val3, p_phone);
Exception
When no_data_found then
do what...
End;
Create or Replace Procedure Proc_B as
Begin
For i in (select phone_no from customer)
Loop
Proc_A(i.phone_no);
End Loop;
End;
/Once again, I have to say, it's a bad idea. You may well do it within a single procedure or even a single SQL. Tell us your exact requirements and we'll be able to help you
Edited by: user12035575 on Sep 5, 2011 8:26 PM -
Calling Stored Procedure without JDBC-Adapter
Hallo,
as it is not possible calling Stored Procedures with the parameter Typ Record in Oracle my question: It is possible connecting to DB using native java-code for example in Mapping?
Thanks in advance,
FrankHi Frank,
Maybe you can use the DB look up using the JDBC adapter in your mapping.
Just check this blog for the same,
/people/siva.maranani/blog/2005/08/23/lookup146s-in-xi-made-simpler
As for calling an Oracle Strored Procedure, it is possible using a RECEIVER JDBC adapter, but not a SENDER JDBC adapter.
<i> import the jdbc-driver (oracle) in an archive in Designer.</i>
Also, this imported archive should be under any Namespace, but, it should be in the same SWCV as the one in which the mapping is being executed.
Regards,
Bhavesh -
CALLING STORED PROCEDURE IN DATABASE FROM FORMS4.5
Is there any body know how to call stored procedure from Forms 4.5 ?
I am writing a when-button-pressed trigger.
Put the stored procedure name on there. But
it said "stored procedure name is not declared on this scope".
Thanks a lot
nullTry logging in to SQL*Plus and running the procedure, e.g....
SQL> begin
database_procedure_name(update_web);
end;
If it runs OK there, then it should run from within your form (provided that you are logged in as the same user as the test with SQL*Plus.
Maybe you are looking for
-
Adobe Acrobat Pro XI is having some issues. When just the base program opens it freezes before I can even do anything with preferences. The same thing happens when I open a PDF document from anywhere. I have cleared the %temp% directory and repair in
-
Conversion of binary to number
Hello, I have a signal conditioner controlled through serial communication with ASCII commands. Once the start command is received, there is a continuous stream of offset binary data sent and read through the serial Read Indicator. The manual informs
-
Report Runing Very Slow for range even data set for that range is small
Hello Experts, I have a report which runs on date selection. When I run the report for say 01.01.2000 -31.12.2010 whcih contains 95% of the data , the report output is coming with in a minute. But when I ran the report from 01.01.2011 - 31.12.2011
-
P67A-C43 / Windows 7 64-bit freezes when idle or during low activity
Greetings, I've seen a few similar topics regarding freezes when idle or near-idle, but the troubleshooting steps I've tried don't seem to work. My P67A-C43 with an Intel 2500K Core i5 is not overclocked. It is repeatedly freezing in Windows 7 64-bit
-
Scrap quantity-where can i view my scrap quantity
Hi Dear Experts, We have maintained assembly scrap for FEERT as 10% in mrp1 view. pir=200. During order confirmation of 200kg,I entered yield as 200kg and scrap 20kg. Then after confirmation , both the movements we exicuted successfully i.e., 101 n