Calling stored procedure inside AM. DB connection and updates on act/passiv
Hi Experts,
Currently in my application we have view objects and also we have some stored procedure calls to insert and update data (in the procedure we don't commit it. Due to the volume and complexity we couldn't migrate all the procedures). After the stored procedure call we do refresh the VO (Also in the EO we have checked necessary attributes to refresh on update and insert) to pick up the changes that happened in the stored procedure call. It is working fine and i can be able to see the updated values in the VO after the procedure call. However
Now my question is what will happen on activation and passivation? In the passivation the pinned DB connection is released and used for another AM. Will the stored changes will be rolled back. I mean the DB transaction. If rollback then the VO updates based on the procedure call will be also rolled back? I have tested this behaviour after disabled the AM pooling and set the pool size to 1. It is working but failing some times (In the procedure i have data insert for the child table, after the refresh i could be able to see the child VOs, some times empty child). Did anyone try this approach before?
Also what will happen if AM goes to passivation during the stored procedure executing ( i am getting the DB connection from getDBTransaction(() method). When i was testing i got the resultset null and i checked the stack and it was due to the connection closed). If AM behaves it like that is it reliable to use procedure call inside the AM?
Looking forward you expertise answers.
Thanks
Hi,
I agree with Frank.
In our application we always commit after calling PL/SQL procedures which performs DML-Statements (insert, update, delete).
Without commits you will - beside the passivation problem - face problems with locked records in the database.
To refresh the values from DB we use the "restore current row after rollback" approach (which is applicable for commit too).
regards
Peter
Similar Messages
-
Call Stored Procedure inside a db trigger
Is that possible to call stored procedure inside a db trigger ?
I User this code:
Create Or Replace Trigger Sale.Send_Auto_Email_Trg
After Insert
On Sale.Sale_Technical_Support
--Referencing New As New Old As Old
For Each Row
Declare
Pragma Autonomous_Transaction;
vn_count Number := 0;
vn_msg Number;
vv_exec Varchar2(5000);
Begin
If Inserting And :New.Ticket_Status = 2 Then
Begin
Begin
Select Count(*)
Into vn_count
From Sale_Technical_Support
Where Sending_Flag = 1
And Support_Type = 2;
Exception When No_Data_Found Then
vn_count := 0;
End;
If vn_count >= 1 And :New.Problem_Desc Is Not Null Then
Technical_Support_Mailing('[email protected]', -- To
'[email protected]',
'[email protected]', -- Bcc
'[email protected]', -- From
'رموز وصلاحيات',
2);
End If;
End;
End If;
End;
/No errors but the procedure doesn't executed !!!!!1) If you are using autonomous transactions for anything other that writing log data that you want to preserve even if the triggering transaction fails, you're probably doing something wrong. There is no reason to use an autonomous transaction here.
2) You don't want to send email from a trigger. You don't want to do anything non-transactional in a trigger. Oracle will, for example, rollback and re-execute parts of a statement for write consistency. If you send email in a trigger, you may get multiple emails for a single update. You may also get emails for updates that were never committed. And if the email server happens to be down, your transactions will fail.
3) If you use an autonomous transaction, the trigger will have a completely different transaction context from the parent. So when you query the table within the trigger, you won't be able to see any of the uncommitted changes including the changes that caused the trigger to fire. My guess is that you are assuming that the row that you inserted is visible to the trigger.
Justin -
Problem to call stored procedure with several IN pars and single REF Cursor
Hi,
Oracle 9.2.0.1
Ole DB Provider I've got with ODP 9.2.0.4
First I try to call packaged procedure with single
REF CURSOR - it works fine(PROCEDURE getDep(dep OUT DEPART.refcur) IS ...).
When I try to call procedure with additional IN parameter, I get an error ORA-01008: not all variables bound.
Packaged procedure: PROCEDURE getDep(dep OUT DEPART.refcur, i1 IN number) IS .... and so on.
Try to call from C#:
cmd.CommandText = "{call depart.getDep(?)}";
OleDbParameter par0 = cmd.CreateParameter();
par0.Value = some value;
par0.DbType = DbType.Int16;
par0.OleDbType = OleDbType.Integer;
par0.Direction = ParameterDirection.Input;
OleDbDataAdapter da = new OleDbDataAdapter(cmd.CommandText,con);
DataSet ds = new DataSet();
da.Fill(ds);
Connection string:
"Provider=OraOLEDB.Oracle;User Id=scott;Password=tiger;Data Source=ora92;OLEDB.NET=true;PLSQLRSet=true"
Please, HELP !
Thanks in advance,
VyacheslavHi,
Are you using OLEDB.NET driver (System.Data.Oledb) or ODP.NET driver (Oracle.DataAccess)?
If you are using ODP.NET, remember that you need to bind the refcursor output variable also (besides the numbder)
Arnold -
Calling Stored procedure inside an Stored procedure
Hi,
I am working in oracle 9i. I want to call a stored procdure from another stored procedure.
Kindly provide me the example...
rgds.having a pocedure called PRCD1,
Create or Replace Procedure PRCD2 IS
egin
PRCD1;
END;
cheers !!!It will for surely err out. You cannot use "EXECUTE" inside a stored procedure.
Here's how you do it:
SQL> create or replace procedure p1 is
2 begin
3 dbms_output.put_line('I am P1');
4 end;
5 /
Procedure created.
SQL> create or replace procedure p2 is
2 begin
3 dbms_output.put_line('I am P2');
4 p1;
5 end;
6 /
Procedure created.
SQL> set serveroutput on
SQL> exec p2
I am P2
I am P1
PL/SQL procedure successfully completed.
SQL> -
Using STORED PROCEDURE IN ORACLE FOR LOGIN AND UPDATES
HI,
I am trying to use oracle stored procedure to use it for LOGIN[AUTHENTICATION] purpose and also to update table values in the database. anyone has and idea as to how i can accomplish this . Please send in your replies.
Thank you.the code block is the same for query or insert, update, delete, you will have to use CallableStatement instead of PrepareStatement/Statment
-
Calling stored procedures from entity object and application module
Hello
I've put in place an EntiyImpl base class containg helper methods to call stored procedures.
I now need to call stored procedures from the application module.
Apart from creating an application module base class and duplicating the helper method code is there a way
to share the helper methods for calling stored procedures between the entity impl and application module impl ?
Regards
PaulDoes the helper code depend on features of a particular entity object instance, beyond its database transaction?
If so, I'm not sure I see how it could be used from an application module class.
If not, here's what you do:
Step 1:
Parametrize the database transaction--you might even want to. So instead of
protected myHelperMethod(Object someParam) {
DBTransaction trans = getDBTransaction();
change this to
protected myHelperMethod(DBTransaction trans, Object someParam) {
Step 2: make the method public and static--once you parameterize the DBTransaction, you should be able to do this.
public static myHelperMethod(DBTransaction trans, Object someParam) {
Step 3: Remove the method from your EntityImpl base class into a utility class:
public abstract class PlSqlUtils {
private PlSqlUtils() {}
public static myHelperMethod(DBTransaction trans, Object someParam) {
When you want to call the method from an application module, entity object, or even view object class, call
PlSqlUtils.myHelperMethod(getDBTransaction(), paramValue);
Unlike Transaction.executeCommand(), this lets you provide functionality like setting procedure parameter values, retrieving OUT parameter values, etc.
Hope this helps,
Avrom -
Calling Stored Procedure in SDK Code
Hello Experts,
Iam facing a problem in Sdk Code...How do i Excute the stored procedure in sdkcode.I have aStored Procedure ,In My Stored Procedures (My Operation Is DML operation Insert),Inserting UDO (Document Data) To the Normal Table.
I am Having Data in Matrix and when Add the Document I am calling the Procedure.How Do establish Connection and How do i Use the Commands to excute the Procedure and Save to the Normal Table..
Dim sqlconn As New SqlConnection("Data Source=" & SBO_Company.Server & ";Database=" & SBO_Company.CompanyDB & "; User ID=" & SBO_Company.DbUserName & ";Password=sap;")
Dim sqldaa As New SqlDataAdapter
Dim dss As New DataSet
If sqlconn.State = ConnectionState.Closed Then
sqlconn.Open()
End If
Dim sqlcmdd As New SqlCommand("PRODSALETOALL", sqlconn)
sqlcmdd.CommandType = CommandType.StoredProcedure
'sqlcmd.CommandText = "PRODSALE"
sqlcmdd.Parameters.Add("@fy", "bb")
sqlcmdd.Parameters.Add("@doctype", "aa")
'sqldaa.SelectCommand = sqlcmdd
'sqldaa.Fill(dss)
'sqldaa.Dispose()
sqlcmdd.ExecuteNonQuery()
sqlcmdd.Dispose()
Help would be Appreciated..
Regards,
KumarHaroon,
SAP does not allow Stored Procedures to be used as part of the SAP Business Db or to be used to access SAP Business One tables directly for Insert, Update or Delete. Any interaction with the SAP Business One Db is required to go through the SAP Business One API's, namely the DI and UI API's.
Eddy -
Calling Stored Procedure with TestStand to SQL 2000
When I run the Stored Procedure in the query analyzer it returns the recordset fine. I am not specifying any parameters. I am Using TestStand 2.01 and SQL Server 2000. I am using the OPEN SQL STATEMENT step to call the SP. When I run the SP in TestStand I get no data returned. If I run the SQL statment in TestStand I get the data that I am requesting. Does TestStand not support stored procedures.
Hi,
The instructions that I posted were for TestStand 3.0. In version 3.0 you can call stored procedures with input/output paramateres and to support this functionality the data operation step support several new modes.
TestStand 2.0.1 does not support parameters on stored procedures, but it does support calling stored procedures that do not take parameters. To be able to access the data back from the database you need to set the cursor location (in the Advanced tab of the Open SQL Statement step) to Client (http://digital.ni.com/public.nsf/websearch/0EF68BF97AB1A61F86256B8E007D70C0?OpenDocument).
By changing the cursor to Client I was able to succesfully call a stored procedure from TestStand 2.0.1 and to read back the recordse
t return by the database. Please let me know if you are still experiencing dificulties.
Best regards,
Alejandro del Castillo
National Instruments -
DB adapter calling stored procedure and change database schema
Hello,
when I create DB adapter which call stored procedure I find that is reference to DB schema in JCA file. Other DB adapter operation (select, insert, delete) store only connection-factory location.
What happend when I move procedure to another DB schema or rename DB schema?
It is only about change SchemaName in JCA file?
Thank you.It sounds excelent.
I try it. Change JCA file and redeploy SCA of service.
Next I change user in data source (password is the same for both schemas). Save and activate changes. Update deployment of DBAdapter.
Select operation on service works but return data from old schema.
Call stored procedure fail with exception:
oracle.sysman.emSDK.webservices.wsdlapi.SoapTestException: Exception occured when binding was invoked. Exception occured during invocation of JCA binding: "JCA Binding execute of Reference operation 'delete' failed due to: Stored procedure invocation error. Error while trying to prepare and execute the NEW_SCHEMA.PKG_UTILS.SERVICE_REMOVE API. An error occurred while preparing and executing the NEW_SCHEMA.PKG_UTILS.SERVICE_REMOVE API. Cause: java.sql.SQLException: ORA-06550: line 1, column 7: PLS-00201: identifier 'NEW_SCHEMA.PKG_UTILS' must be declared ORA-06550: line 1, column 7: PL/SQL: Statement ignored Check to ensure that the API is defined in the database and that the parameters match the signature of the API. This exception is considered not retriable, likely due to a modelling mistake. To classify it as retriable instead add property nonRetriableErrorCodes with value "-6550" to your deployment descriptor (i.e. weblogic-ra.xml). To auto retry a retriable fault set these composite.xml properties for this invoke: jca.retry.interval, jca.retry.count, and jca.retry.backoff. All properties are integers. ". The invoked JCA adapter raised a resource exception. -
ORA-17002 and ORA-17009 while calling Stored Procedures
Hi,
We are developing a JDBC application using WebLogic 6.0 as AppServer. When we
rolled out the application in production, things work fine for about a day or
so, then calls to Stored Procedures start giving ORA-17002 (io exception) and
ORA-17009 (Closed Statement) exceptions while calling Stored Procedures. Restarting
the server 'fixes' the problem for one more day.... We are not able to reproduce
this behaviour in test or development servers.
Can anybody suggest something.....
Regards,
Usman.Usman wrote:
>
Hi,
We are developing a JDBC application using WebLogic 6.0 as AppServer. When we
rolled out the application in production, things work fine for about a day or
so, then calls to Stored Procedures start giving ORA-17002 (io exception) and
ORA-17009 (Closed Statement) exceptions while calling Stored Procedures. Restarting
the server 'fixes' the problem for one more day.... We are not able to reproduce
this behaviour in test or development servers.
Can anybody suggest something.....
Regards,
Usman.Hi. Describe how you are obtaining and using pool connections. Also, do download the
latest thin driver from Oracle, because they have recently fixed some serious
bugs in it.
Let me know,
Joe -
Calling stored procedure from page process and PLS-00049 error?
Good morning guys!
I'm dealing with several problems this morning! The one that I need to deal with first is the following.
I created the page process (see below: 1st code) in order to validate if all records where LNG_GEBIET matches have the status 3 or 4. If that is the case I want to call the procedure "set_status_arbeit_zu_gebiet". If amountrs and countstat do not match, then nothing is supposed to be done.
The problem lies within the stored procedure itself. I receive a PLS-00049 bind variable error for :new.LNG_GEBIET.
Can you please tell me what I forgot to declare in code 2 below???
Thank you guys!
The page process:
Declare
amountrs number;
countstat number;
begin
SELECT COUNT(*) INTO amountrs FROM TBL_PUNKTDATEN where LNG_GEBIET = :P4_CNT_GEBIET;
SELECT COUNT(*) INTO countstat FROM TBL_PUNKTDATEN where LNG_GEBIET = :P4_CNT_GEBIET and INT_STATUS = 3 or LNG_GEBIET = :P4_CNT_GEBIET and INT_STATUS = 4;
IF amountrs = countstat THEN
set_status_arbeit_zu_gebiet;
ELSE
dbms_output.put('nothing');
END IF ;
end;Code 2 with the true problem!
CREATE OR REPLACE PROCEDURE set_status_arbeit_zu_gebiet
IS
cursor c2 is select LNG_GEBIET from TBL_ARBEIT_ZU_GEBIET where PNUM = 1114 and LNG_GEBIET=:new.LNG_GEBIET;
v_c2 c2%ROWTYPE;
BEGIN
open c2;
fetch c2 into v_c2;
if c2%notfound then
INSERT INTO TBL_ARBEIT_ZU_GEBIET
LNG_GEBIET,
LNG_ARBEITSSCHRITT,
PNUM,
INT_BEARBEITER,
DATE_DATUM,
GEPL_DATUM
VALUES
(:new.LNG_GEBIET,
52,
1114,
895,
sysdate,
to_date('01.01.1990', 'DD.MM.YYYY')
commit;
close c2;
END set_status_arbeit_zu_gebiet;One more question: Is it possible to integrate the first validation that calls my stored procedure into code 2?
Thanks for you time!
SebastianThe error is in following statement:
INSERT INTO TBL_ARBEIT_ZU_GEBIET ( ... ) VALUES ( :new.LNG_GEBIET, ... );
As the statement is part of a procedure and not trigger so it is not able to bind this variable with any value.
As a resolution, pass this value to the procedure from the process and use it in the insert statement.
The process will have following IF statement:_
IF amountrs = countstat THEN
set_status_arbeit_zu_gebiet *(:P4_CNT_GEBIET)*;
ELSE
dbms_output.put('nothing');
END IF ;
and the procedure will be as follows:_
CREATE OR REPLACE PROCEDURE set_status_arbeit_zu_gebiet *(p_lng_gebit varchar2)*
IS
cursor c2 is select LNG_GEBIET from TBL_ARBEIT_ZU_GEBIET where PNUM = 1114 and LNG_GEBIET= --:new.LNG_GEBIET-- p_lng_gebit ;
v_c2 c2%ROWTYPE;
BEGIN
INSERT INTO TBL_ARBEIT_ZU_GEBIET ( ... )
VALUES
( --:new.LNG_GEBIET-- p_lng_gebit, ... );
END set_status_arbeit_zu_gebiet; -
Call stored procedure and use user parameter
I am a new user of BIEE.
1. Can I call stored procedure from BIEE report? If yes then how can I call?
2. Can I use parameter in sql script of BIEE report? If yes then how can I take this value of parameter from front end user?urang oge keur neangan ..hese euy,,,,
Message was edited by:
user648680 -
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 in OCCI
Hi, Guys.
I triy to call stored procedure in Oracle database server.But i have problems with taking of the OUT parameters.
How to call the procedure corectly?
Depend on Oracle manual everything is fine but as we see that is not.
Here is the 2 lines that make the problem.
statement->registerOutParam(2, Type::OCCIINT, sizeof ( if_false ) );
statement->registerOutParam(3, Type::OCCIString, sizeof ( __result ) );
I can't access Type::OCCIINT and Type::OCCIString.
I tried and Type::OCCISTRING but without any result.
Can you help me?
This is the all code i use:
Environment *env = Environment::createEnvironment ( Environment::DEFAULT );
Connection *conn = env->createConnection ( user, pass, osid );
Statement * statement = conn->createStatement ( query );
ResultSet * result = statement->executeQuery ( query );
result->setCharacterStreamMode ( 2, 10000 );
statement->setSQL ( "BEGIN tracetst.get_tst_moduls ( :1, :2, :3 ); END:" );
int if_false;
string __result;
statement->setString ( 1, "116714020010" );
statement->registerOutParam(2, Type::OCCIINT, sizeof ( if_false ) );
statement->registerOutParam(3, Type::OCCIString, sizeof ( __result ) );
statement->executeUpdate();
if_false = statement->getInt (2);
/* Set the 1,2 args into err_result and modules. The action is only with these */
err_result = if_false;
__result = statement->getString (3);
cout << if_false;
cout << __result;
//printf ( result );
//statement->executeUpdate ( query );
env->terminateConnection ( conn );
Environment :: terminateEnvironment ( env );
While compiling I have an error message.Here it is :
trace.cpp: In member function `const char* oracle_io::get_data()':
trace.cpp:668: error: `oracle::occi::Type' is not an aggregate type
Tha is the line adn the next line is same :
statement->registerOutParam(2, Type::OCCIINT, sizeof ( if_false ) );
statement->registerOutParam(3, Type::OCCIString, sizeof ( __result ) );
How to call the procedure corectly?
Depend on Oracle manual everything is fine but as we see that is not.
Thanks in advance.
P.S. I would like to thanks to Amogh for helping me before.Did you remove the colon after END ?
Environment *env = Environment::createEnvironment(Environment::OBJECT);
Connection *conn = env->createConnection("scott","tiger","inst1");
Statement *stmt;
int num; string name;
try
stmt=conn->createStatement();
stmt->setSQL ( "BEGIN scott.test ( :1, :2, :3 ); END;" );
stmt->setString ( 1, "11" );
stmt->registerOutParam(2, OCCIINT,sizeof(num));
stmt->registerOutParam(3, OCCISTRING,sizeof(name));
stmt->execute();
num=stmt->getInt(2); name=stmt->getString(3);
cout<<num<<" "<<name<<endl;
catch (SQLException &ex)
env->terminateConnection(conn);
Environment::terminateEnvironment(env);
cout<<ex.getMessage();
env->terminateConnection(conn);
Environment::terminateEnvironment(env);
...Rgds.
Amogh
Maybe you are looking for
-
Error in running the fds-tomcat zip
Hi, I am a beginner to Flex, I tried to run the tomcat server bundles in fds-tomact (after all the install instructions), and when I run that I get C:\Program Files\fds-tomcat\bin>catalina run Using CATALINA_BASE: C:\Program Files\fds-tomcat Using CA
-
I have a csv file that I need to generate a schema for. I am trying to generate a schema using flat file schema wizard but I keep getting "Object reference not set to an instance of an object." error when I am clicking on the Next button after specif
-
I can't use my HP Laserjet M1136, how can I slove the problem?
I can't use my HP Laserjet M1136 MFP when I insert it on to my Mac Mini (using Mac OS 10.8.2), the printer canbe found, but cannot be insert, how can I solve the problem? Thank you.
-
Import utilities.*; - not working?
I am working through various exercises, compiling various programs from the web to get the feel of a few programs. I want to import "import utilities.*;" but my compiler dosen't rcognise this. Does it exsist and if so, any reason why it shouldn't lik
-
Is there any way to install programs from a disc onto the new iMac?
My boss has purchased a new iMac, and was dismayed to find out that he could not insert his Vectorworks, and other disc programs he previously purchased into the machine. Is there any cost effective solution?