Open cursor exceeds max value
Hi,
i am running 10.2.0.1.0 and the max value for open_cursor is set to 300.
Earlier my developers were getting ORA-01000 errors. However when i checked again after two days i see the number is 1605 which is way higher than the max value. Why don't I see any errors now?
Does anyone know??
Thanks.
Shawn
SQL> SELECT COUNT(*) FROM v$open_cursor;
COUNT(*)
1522
and i ran this to check each SID and the number of session which is giving me a better output and like you said the max value is based on per session.
SELECT SUBSTR(a.SID,1,10) SID,
SUBSTR(NVL(b.program,machine),1,30) program,
COUNT(*)
FROM v$open_cursor a, v$session b
WHERE a.saddr=b.saddr
GROUP BY SUBSTR(a.SID,1,10),
SUBSTR(NVL(b.program,machine),1,30)
ORDER BY 3 DESC
Thanks for the help.
Similar Messages
-
More on "maximum open cursors exceeded"
It seems a lot of people have been seeing this error message, but reading through the posts on the topic hasn't given me any new insight on the problem. Here's an account of my particular situation:
I am using the XSQL servlet, v.1.0.0.0 with the thin jdbc driver v.1.x. The servlet is running within an Apache server (1.3.12) on a Linux box, and the Oracle database (8.1.5) is located on a Solaris 2.6 machine.
The servlet accepts HTTP connections, performs the corresponding SQL queries and returns the output from the database to the HTTP client. Here's a simple example:
(Sorry about potential bad line breaks.)
client request:
% telnet xsql-host.some.domain 80
Trying xxx.xxx.xxx.xxx
Connected to xsql-host.some.domain.
GET /xsql/test/listall.xsql
<server response here>
listall.xsql:
<?xml version="1.0"?>
<page connection="boss" xmlns:xsql="urn:oracle-xsql">
<accounts>
<xsql:query tag-case="lower" rowset-element="" row-element="accountinfo">
select * from test
</xsql:query>
</accounts>
</page>
Very simple stuff indeed. Now, this has worked perfectly for 3 weeks or so. During this period, the xsql servlet has been stopped and restarted numerous times and the machine hosting the database has been rebooted at least three times. Then, for no apparent reason (as nothing had changed in the setup described above), I started getting "maximum open cursors exceeded" on every request. Since then, I have been unable to get the system working as it had up until now. I haven't restarted the database and I would like to avoid doing so, because that would not be a valid solution for us if the problem reappeared in production. The maximum open cursors setting in Oracle should be correct, since things were running smoothly before.
From what I can see, the problem could be with the servlet not closing its cursors. One post mentioned that it did, but I would appreciate it if this could be double-checked. Considering the database is the only portion of the system which has been kept running for extended periods of time, it seems to me that this might indeed be the problem.
Confirmation, workarounds, suggestions, patches, or a consolation box of chocolates would all be appreciated.
Thanks,
- Fad
([email protected])
nullCheck which process is making all the cursors on which database. If it is your procedure, try explicitly closing the cursors. I think the cursors are only implicitely closed after the transaction is ended. If you loop and open a cursor within the loop, that might be the problem.
I also had this problem with Java working over a JDBC connection some time ago on a 815 database. If I recall correctly, that was caused by the JDBC driver and fixed by replacing it with a JDBC driver of 9i.
The following script is what I used previously in a program that can draw a graph from the results. It is ugly, but does the job.
Hope this helps,
L.
select
'max cursors',
to_number(value)
from
v$parameter
where
name = 'open_cursors'
union
select
substr(lower(username),1,10)||'('||substr(to_char(ses.sid)||','
||to_char(serial#),1,9)||')',
s.value
from
v$sesstat s,
v$statname n,
v$session ses
where
s.statistic#=n.statistic#
and ses.sid=s.sid
and n.name like '%cursor%'
and n.name like '%current%'
and not (ses.sid between 1 and 6) -
Maximum open cursors exceeded when inserting to a remote db
I receive the error:
ORA-01000: maximum open cursors exceeded
ORA-02063: preceding line
from ONTARIO
(where ONTARIO is my remote db) when I am performing inserts from a pl/sql procedure to the remote db. I am performing two inserts from inside pl/sql and then issuing an explicit commit. I checked the open_cursors init param on both the local db and remote db and it was set to 300. I bumped up the remote db init param to 600. I was able to perform more inserts but still received this error.
I thought implicit cursors close themselves, especially after a commit. Do I need to do something special to close the cursors on the remote machine?
Thanks for your time...Check which process is making all the cursors on which database. If it is your procedure, try explicitly closing the cursors. I think the cursors are only implicitely closed after the transaction is ended. If you loop and open a cursor within the loop, that might be the problem.
I also had this problem with Java working over a JDBC connection some time ago on a 815 database. If I recall correctly, that was caused by the JDBC driver and fixed by replacing it with a JDBC driver of 9i.
The following script is what I used previously in a program that can draw a graph from the results. It is ugly, but does the job.
Hope this helps,
L.
select
'max cursors',
to_number(value)
from
v$parameter
where
name = 'open_cursors'
union
select
substr(lower(username),1,10)||'('||substr(to_char(ses.sid)||','
||to_char(serial#),1,9)||')',
s.value
from
v$sesstat s,
v$statname n,
v$session ses
where
s.statistic#=n.statistic#
and ses.sid=s.sid
and n.name like '%cursor%'
and n.name like '%current%'
and not (ses.sid between 1 and 6) -
Help needed, getting ORA-01000: maximum open cursors exceeded
CJ or anyone that may have come across this problem in the past, I hope that you may be able to help me
I am trying to implement a function from the Salesforce PHP tool kit that runs against a class that returns a object of ID's that have been updated in a given time frame.
This is a lot of code. I am sorry for that:
<?php
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
//Keep the SOAP cache clean
ini_set("soap.wsdl_cache_enabled","0");
$delete_count = 0;
$oracle_deleted = 0;
//Setup array for local ID's'
$opportunity_data = array();
$deleted_data = array();
//start setup for PL SQL statement
$strsql = "begin mapsapp.sforce_opp_insert(";
$strsql .= ":pm_id,";
$strsql .= ":pm_accountid,";
$strsql .= ":pm_name,";
$strsql .= ":pm_description,";
$strsql .= ":pm_stagename,";
$strsql .= ":pm_amount,";
$strsql .= ":pm_probability,";
$strsql .= ":pm_expectedrevenue,";
$strsql .= ":pm_closedate,";
$strsql .= ":pm_type,";
$strsql .= ":pm_nextstep,";
$strsql .= ":pm_leadsource,";
$strsql .= ":pm_isclosed,";
$strsql .= ":pm_iswon,";
$strsql .= ":pm_forecastcategory,";
$strsql .= ":pm_campaignid,";
$strsql .= ":pm_hasopportunitylineitem,";
$strsql .= ":pm_pricebook2id,";
$strsql .= ":pm_ownerid,";
$strsql .= ":pm_createddate,";
$strsql .= ":pm_createdbyid,";
$strsql .= ":pm_lastmodifieddate,";
$strsql .= ":pm_lastmodifiedbyid,";
$strsql .= ":pm_systemmodstamp,";
$strsql .= ":pm_rsm_project_id_score__c,";
$strsql .= ":pm_lead_fae__c,";
$strsql .= ":pm_avg_annual_volume__c,";
$strsql .= ":pm_priority__c,";
$strsql .= ":pm_design_start_date__c,";
$strsql .= ":pm_design_proto_date__c,";
$strsql .= ":pm_production_years__c,";
$strsql .= ":pm_production_life_months__c,";
$strsql .= ":pm_production_months__c,";
$strsql .= ":pm_design_freeze_date__c,";
$strsql .= ":pm_production_proto_date__c,";
$strsql .= ":pm_mass_production_date__c,";
$strsql .= ":pm_fae_status__c,";
$strsql .= ":pm_fae_assigned_date__c,";
$strsql .= ":pm_fae_accepted_date__c,";
$strsql .= ":pm_potential__c,";
$strsql .= ":pm_fae_reject_reason__c,";
$strsql .= ":pm_fae_project_complexity__c,";
$strsql .= ":pm_design_phase__c,";
$strsql .= ":pm_maxim_id__c,";
$strsql .= ":pm_project_number__c,";
$strsql .= ":pm_active__c,";
$strsql .= ":pm_pivotal_created_by__c,";
$strsql .= ":pm_manufactured_by__c,";
$strsql .= ":pm_isdeleted,";
$strsql .= ":pm_lastactivitydate";
$strsql .= "); end;";
//end setup for PL SQL statement
//include common files
require_once ('/users/msimonds/public_html/includes/sfdc.inc');
include_once ('adodb.inc.php');
$db = ADONewConnection("oci8");
//connect to Oracle
$db->Connect('',"database_user","password","dev2");
//$db->BeginTrans();
$db->SetFetchMode(ADODB_FETCH_ASSOC);
if ($db)
try
//Set current time to get records from Salesforce
$currentTime = mktime();
// assume that update occured within the last 24 hrs.
$startTime = $currentTime - (60 * 60 * 36); //(seconds * minutes * hours)
$endTime = $currentTime;
echo "***** Get Updated Opportunities from the last 24 hours *****<br />";
$getUpdateddResponse = $client->getUpdated('Opportunity',$startTime,$endTime);
//$getUpdateddResponse->ids = "";
//echo '<pre>'.print_r($getUpdateddResponse,true).'</pre>';
//exit;
$opportunity_data = $getUpdateddResponse->ids;
if (is_array($opportunity_data) || is_object($opportunity_data))
set_time_limit(0);
ini_set("memory_limit","512M");
//copy data from Object to local array
//count the number of records coming in from Salesforce
$record_count = count($opportunity_data);
echo $record_count;
exit;
//echo '<pre>'.print_r($opportunity_data,true).'</pre>';
//exit;
//loop through the records
for ($i = 0; $i < $record_count; $i++)
$id = $opportunity_data[$i];
//SQL query for Salesforce
$soql = "Select Id, IsDeleted, AccountId, Name, Description, StageName, Amount, Probability, ExpectedRevenue, CloseDate, Type, NextStep, LeadSource, IsClosed, IsWon, ForecastCategory, CampaignId, HasOpportunityLineItem, Pricebook2Id, OwnerId, CreatedDate, CreatedById, LastModifiedDate, LastModifiedById, SystemModstamp, LastActivityDate, RSM_Original_Project_ID_Score__c, Lead_FAE__c, Avg_Annual_Volume__c, Priority__c, Design_Start_Date__c, Design_Proto_Date__c, Production_Years__c, Production_Life_months__c, Production_Months__c, Design_Freeze_Date__c, Production_Proto_Date__c, Mass_Production_Date__c, FAE_Status__c, FAE_Assigned_Date__c, FAE_Accepted_Date__c, Project_Potential__c, FAE_Reject_Reason__c, FAE_Project_Complexity__c, Design_Phase__c, maxim_id__c, Project_Number__c, Active__c, Project_Comments__c, Pivotal_Created_By__c, Manufactured_By__c FROM Opportunity WHERE Id = '{$id}'";
//setup query to local Oracle MAPS database
$get_oracle_record = query_db($id,$db);
if ($get_oracle_record)
$sql = "DELETE FROM sforce_opportunity WHERE ID = '{$id}'";
if ($db->Execute($sql)) ;
$insert_records = get_records($client,$soql);
else
$insert_records = get_records($client,$soql);
foreach ($insert_records as $r)
$pass_this['id'] = $id;
$pass_this['accountid'] = (string )$r->fields->AccountId;
$pass_this['name'] = (string )$r->fields->Name;
$pass_this['description'] = (string )$r->fields->Description;
$pass_this['stagename'] = (string )$r->fields->StageName;
$pass_this['amount'] = (int)$r->fields->Amount;
$pass_this['probability'] = (int)$r->fields->Probability;
$pass_this['expectedrevenue'] = (int)$r->fields->ExpectedRevenue;
$pass_this['closedate'] = (string )$r->fields->CloseDate;
$pass_this['type'] = (string )$r->fields->Type;
$pass_this['nextstep'] = (string )$r->fields->NextStep;
$pass_this['leadsource'] = (string )$r->fields->LeadSource;
$pass_this['isclosed'] = (string )$r->fields->IsClosed;
$pass_this['iswon'] = (string )$r->fields->IsWon;
$pass_this['forecastcategory'] = (string )$r->fields->ForecastCategory;
$pass_this['campaignid'] = (string )$r->fields->CampaignId;
$pass_this['hasopportunitylineitem'] = (string )$r->fields->HasOpportunityLineItem;
$pass_this['pricebook2id'] = $r->fields->Pricebook2Id;
$pass_this['ownerid'] = $r->fields->OwnerId;
$pass_this['createddate'] = (string )$r->fields->CreatedDate;
$pass_this['createdbyid'] = (string )$r->fields->CreatedById;
$pass_this['lastmodifieddate'] = (string )$r->fields->LastModifiedDate;
$pass_this['lastmodifiedbyid'] = (string )$r->fields->LastModifiedById;
$pass_this['systemmodstamp'] = (string )$r->fields->SystemModstamp;
$pass_this['rsm_project_id_score__c'] = (int)$r->fields->RSM_Original_Project_ID_Score__c;
$pass_this['lead_fae__c'] = (string )$r->fields->Lead_FAE__c;
$pass_this['avg_annual_volume__c'] = (int)$r->fields->Avg_Annual_Volume__c;
$pass_this['priority__c'] = (string )$r->fields->Priority__c;
$pass_this['design_start_date__c'] = (string )$r->fields->Design_Start_Date__c;
$pass_this['design_proto_date__c'] = (string )$r->fields->Design_Proto_Date__c;
$pass_this['production_years__c'] = (int)$r->fields->Production_Years__c;
$pass_this['production_life_months__c'] = (int)$r->fields->Production_Life_months__c;
$pass_this['production_months__c'] = (int)$r->fields->Production_Months__c;
$pass_this['design_freeze_date__c'] = (string )$r->fields->Design_Freeze_Date__c;
$pass_this['production_proto_date__c'] = (string )$r->fields->Production_Proto_Date__c;
$pass_this['mass_production_date__c'] = (string )$r->fields->Mass_Production_Date__c;
$pass_this['fae_status__c'] = (string )$r->fields->FAE_Status__c;
$pass_this['fae_assigned_date__c'] = (string )$r->fields->FAE_Assigned_Date__c;
$pass_this['fae_accepted_date__c'] = (string )$r->fields->FAE_Accepted_Date__c;
$pass_this['project_potential__c'] = (int)$r->fields->Project_Potential__c;
$pass_this['fae_reject_reason__c'] = (string )$r->fields->FAE_Reject_Reason__c;
$pass_this['fae_project_complexity__c'] = (string )$r->fields->FAE_Project_Complexity__c;
$pass_this['design_phase__c'] = (string )$r->fields->Design_Phase__c;
$pass_this['maxim_id__c'] = (string )$r->fields->maxim_id__c;
$pass_this['objective_status_next_qtr__c'] = (string )$r->fields->Objective_Status_Next_Qtr__c;
$pass_this['quality_of_relationship__c'] = (string )$r->fields->Quality_of_Relationship__c;
$pass_this['targeted_po_date__c'] = (string )$r->fields->Targeted_PO_Date__c;
$pass_this['part_no_involved__c'] = (string )$r->fields->Part_No_Involved__c;
$pass_this['first_po_number__c'] = (string )$r->fields->First_PO_Number__c;
$pass_this['lost_reason__c'] = (string )$r->fields->Lost_Reason__c;
$pass_this['fae_estimate_of_business__c'] = (string )$r->fields->FAE_Estimate_of_Business__c;
$pass_this['digital_processor__c'] = (string )$r->fields->Digital_Processor__c;
$pass_this['project_number__c'] = (string )$r->fields->Project_Number__c;
$pass_this['active__c'] = (string )$r->fields->Active__c;
$pass_this['pivotal_created_by__c'] = (string )$r->fields->Pivotal_Created_By__c;
$pass_this['manufactured_by__c'] = (string )$r->fields->Manufactured_By__c;
$pass_this['isdeleted'] = (string )$r->fields->IsDeleted;
$pass_this['lastactivitydate'] = (string )$r->fields->LastActivityDate;
$pass_this['optocon_id__c'] = (string )$r->fields->OptoCon_ID__c;
if (strlen($pass_this['description']) == 0)
$pass_this['description'] = "No Description Posted";
else
$pass_this['description'] = $pass_this['description'];
//echo '<pre>'.print_r($pass_this,true).'</pre>';
//exit;
$record_inserted = insert_record($pass_this,$strsql,$db);
if (!$record_inserted)
//mail('[email protected]','insert error','There was a proble trying to insert a record into the database');
else
echo "Nothing here";
//exit;
//add back in once replication is done
//get deleted records from the Opportunity
$getDeletedResponse = $client->getDeleted('Opportunity',$startTime,$endTime);
//echo '<pre>'.print_r($getDeletedResponse,true).'</pre>';
//exit;
$deleted_ids = $getDeletedResponse->deletedRecords;
//echo '<pre>'.print_r($deleted_ids,true).'</pre>';
if (is_object($deleted_ids))
$temp_array[] = $deleted_ids;
unset($deleted_ids);
$deleted_ids = $temp_array;
$delete_count = count($deleted_ids);
//echo $delete_count;
for ($i = 0; $i < $delete_count; $i++)
$d_id = $deleted_ids[$i];
$id = $d_id->id;
if (query_db($id,$db))
$delete_sql = "Delete from sforce_opportunity WHERE ID = '{$id}'";
$oracle_deleted++;
if ($db->Execute($delete_sql))
echo "<font color=\"#0000FF\">".$id." was removed from the Oracle database</font><br />";
else
echo $id." is not in the Oracle database<br />";
echo $oracle_deleted." records were deleted from Oracle";
catch (exception $e)
$error = '<pre>'.print_r($e,true).'</pre>';
mail('[email protected]','insert error',$error);
$db->CommitTrans();
$db->Close();
exit;
function insert_record($pass_this,$strsql,&$db)
//Prepares PL/SQL Statement
$stmt = $db->Prepare($strsql);
$db->InParameter($stmt,$pass_this['id'],'pm_id');
$db->InParameter($stmt,$pass_this['accountid'],'pm_accountid');
$db->InParameter($stmt,$pass_this['name'],'pm_name');
$db->InParameter($stmt,$pass_this['description'],'pm_description',-1,OCI_B_CLOB);
$db->InParameter($stmt,$pass_this['stagename'],'pm_stagename');
$db->InParameter($stmt,$pass_this['amount'],'pm_amount');
$db->InParameter($stmt,$pass_this['probability'],'pm_probability');
$db->InParameter($stmt,$pass_this['expectedrevenue'],'pm_expectedrevenue');
$db->InParameter($stmt,$pass_this['closedate'],'pm_closedate');
$db->InParameter($stmt,$pass_this['type'],'pm_type');
$db->InParameter($stmt,$pass_this['nextstep'],'pm_nextstep');
$db->InParameter($stmt,$pass_this['leadsource'],'pm_leadsource');
$db->InParameter($stmt,$pass_this['isclosed'],'pm_isclosed');
$db->InParameter($stmt,$pass_this['iswon'],'pm_iswon');
$db->InParameter($stmt,$pass_this['forecastcategory'],'pm_forecastcategory');
$db->InParameter($stmt,$pass_this['campaignid'],'pm_campaignid');
$db->InParameter($stmt,$pass_this['hasopportunitylineitem'],'pm_hasopportunitylineitem');
$db->InParameter($stmt,$pass_this['pricebook2id'],'pm_pricebook2id');
$db->InParameter($stmt,$pass_this['ownerid'],'pm_ownerid');
$db->InParameter($stmt,$pass_this['createddate'],'pm_createddate');
$db->InParameter($stmt,$pass_this['createdbyid'],'pm_createdbyid');
$db->InParameter($stmt,$pass_this['lastmodifieddate'],'pm_lastmodifieddate');
$db->InParameter($stmt,$pass_this['lastmodifiedbyid'],'pm_lastmodifiedbyid');
$db->InParameter($stmt,$pass_this['systemmodstamp'],'pm_systemmodstamp');
$db->InParameter($stmt,$pass_this['rsm_project_id_score__c'],'pm_rsm_project_id_score__c');
$db->InParameter($stmt,$pass_this['lead_fae__c'],'pm_lead_fae__c');
$db->InParameter($stmt,$pass_this['avg_annual_volume__c'],'pm_avg_annual_volume__c');
$db->InParameter($stmt,$pass_this['priority__c'],'pm_priority__c');
$db->InParameter($stmt,$pass_this['design_start_date__c'],'pm_design_start_date__c');
$db->InParameter($stmt,$pass_this['design_proto_date__c'],'pm_design_proto_date__c');
$db->InParameter($stmt,$pass_this['production_years__c'],'pm_production_years__c');
$db->InParameter($stmt,$pass_this['production_life_months__c'],'pm_production_life_months__c');
$db->InParameter($stmt,$pass_this['production_months__c'],'pm_production_months__c');
$db->InParameter($stmt,$pass_this['design_freeze_date__c'],'pm_design_freeze_date__c');
$db->InParameter($stmt,$pass_this['production_proto_date__c'],'pm_production_proto_date__c');
$db->InParameter($stmt,$pass_this['mass_production_date__c'],'pm_mass_production_date__c');
$db->InParameter($stmt,$pass_this['fae_status__c'],'pm_fae_status__c');
$db->InParameter($stmt,$pass_this['fae_assigned_date__c'],'pm_fae_assigned_date__c');
$db->InParameter($stmt,$pass_this['fae_accepted_date__c'],'pm_fae_accepted_date__c');
$db->InParameter($stmt,$pass_this['project_potential__c'],'pm_potential__c');
$db->InParameter($stmt,$pass_this['fae_reject_reason__c'],'pm_fae_reject_reason__c');
$db->InParameter($stmt,$pass_this['fae_project_complexity__c'],'pm_fae_project_complexity__c');
$db->InParameter($stmt,$pass_this['design_phase__c'],'pm_design_phase__c');
$db->InParameter($stmt,$pass_this['maxim_id__c'],'pm_maxim_id__c');
$db->InParameter($stmt,$pass_this['project_number__c'],'pm_project_number__c');
$db->InParameter($stmt,$pass_this['active__c'],'pm_active__c');
$db->InParameter($stmt,$pass_this['pivotal_created_by__c'],'pm_pivotal_created_by__c');
$db->InParameter($stmt,$pass_this['manufactured_by__c'],'pm_manufactured_by__c');
$db->InParameter($stmt,$pass_this['isdeleted'],'pm_isdeleted');
$db->InParameter($stmt,$pass_this['lastactivitydate'],'pm_lastactivitydate');
//executes and loads data coming from salesforce into table
if ($db->Execute($stmt))
echo $pass_this['id']." was inserted into the database<br />";
flush();
unset($pass_this);
unset($stmt);
return true;
else
echo $db->ErrorMsg()."<br>";
mail('[email protected]','database error',$db->ErrorMsg());
return false;
//Get the data from Salesforce to populate Oracle
function get_records(&$connection,&$query)
$queryOptions = new QueryOptions(2000);
$response = new QueryResult($connection->query($query));
// if the size is zero, where done
if ($response->size > 0)
$products = $response->records;
// Cycles through additional responses if the number of records
// exceeds the batch size
while (!$response->done)
set_time_limit(100);
$response = $connection->queryMore($response->queryLocator);
$products = array_merge($products,$response->records);
return $products;
function query_db($id,&$db)
global $db;
$sql = "SELECT *
FROM sforce_opportunity
Where id = '{$id}'";
$rs = $db->Execute($sql);
if ($rs && $rs->_numOfRows > 0)
return true;
else
return false;
exit;
?>the code runs fine and I do not commit my inserts until after I am done retrieving all the records, but I am getting the oracle error: ORA-01000: maximum open cursors exceeded
I am not using any cursors in my PL SQL
CREATE OR REPLACE PROCEDURE MAPSAPP.sforce_opp_insert (
pm_id IN VARCHAR2,
pm_accountid IN VARCHAR2,
pm_name IN VARCHAR2,
pm_description IN VARCHAR2,
pm_stagename IN VARCHAR2,
pm_amount IN NUMBER,
pm_probability IN NUMBER,
pm_expectedrevenue IN NUMBER,
pm_closedate IN VARCHAR2,
pm_type IN VARCHAR2,
pm_nextstep IN VARCHAR2,
pm_leadsource IN VARCHAR2,
pm_isclosed IN VARCHAR2,
pm_iswon IN VARCHAR2,
pm_forecastcategory IN VARCHAR2,
pm_campaignid IN VARCHAR2,
pm_hasopportunitylineitem IN VARCHAR2,
pm_pricebook2id IN VARCHAR2,
pm_ownerid IN VARCHAR2,
pm_createddate IN VARCHAR2,
pm_createdbyid IN VARCHAR2,
pm_lastmodifieddate IN VARCHAR2,
pm_lastmodifiedbyid IN VARCHAR2,
pm_systemmodstamp IN VARCHAR2,
pm_rsm_project_id_score__c IN VARCHAR2,
pm_lead_fae__c IN VARCHAR2,
pm_avg_annual_volume__c IN VARCHAR2,
pm_priority__c IN VARCHAR2,
pm_design_start_date__c IN VARCHAR2,
pm_design_proto_date__c IN VARCHAR2,
pm_production_years__c IN NUMBER,
pm_production_life_months__c IN NUMBER,
pm_production_months__c IN NUMBER,
pm_design_freeze_date__c IN VARCHAR2,
pm_production_proto_date__c IN VARCHAR2,
pm_mass_production_date__c IN VARCHAR2,
pm_fae_status__c IN VARCHAR2,
pm_fae_assigned_date__c IN VARCHAR2,
pm_fae_accepted_date__c IN VARCHAR2,
pm_potential__c IN NUMBER,
pm_fae_reject_reason__c IN VARCHAR2,
pm_fae_project_complexity__c IN VARCHAR2,
pm_design_phase__c IN VARCHAR2,
pm_maxim_id__c IN VARCHAR2,
pm_project_number__c IN VARCHAR2,
pm_active__c IN VARCHAR2,
pm_pivotal_created_by__c IN VARCHAR2,
pm_manufactured_by__c IN VARCHAR2,
pm_isdeleted IN VARCHAR2,
pm_lastactivitydate IN VARCHAR2
IS
BEGIN
INSERT INTO SFORCE_OPPORTUNITY
(id,
accountid,
name,
description,
stagename,
amount,
probability,
expectedrevenue,
closedate,
type,
nextstep,
leadsource,
isclosed,
iswon,
forecastcategory,
campaignid,
hasopportunitylineitem,
pricebook2id,
ownerid,
createddate,
createdbyid,
lastmodifieddate,
lastmodifiedbyid,
systemmodstamp,
rsm_project_id_score__c,
lead_fae__c,
avg_annual_volume__c,
priority__c,
design_start_date__c,
design_proto_date__c,
production_years__c,
production_life_months__c,
production_months__c,
design_freeze_date__c,
production_proto_date__c,
mass_production_date__c,
fae_status__c,
fae_assigned_date__c,
fae_accepted_date__c,
project_potential__c,
fae_reject_reason__c,
fae_project_complexity__c,
design_phase__c,
maxim_id__c,
project_number__c,
active__c,
pivotal_created_by__c,
manufactured_by__c,
isdeleted,
lastactivitydate
VALUES (pm_id,
pm_accountid,
pm_name,
pm_description,
pm_stagename,
pm_amount,
pm_probability,
pm_expectedrevenue,
TO_DATE (SUBSTR (REPLACE (pm_closedate, 'T', ' '), 1, 19),'YYYY-MM-DD HH24:MI:SS'),
pm_type,
pm_nextstep,
pm_leadsource,
pm_isclosed,
pm_iswon,
pm_forecastcategory,
pm_campaignid,
pm_hasopportunitylineitem,
pm_pricebook2id,
pm_ownerid,
TO_DATE (SUBSTR (REPLACE (pm_createddate, 'T', ' '), 1, 19),'YYYY-MM-DD HH24:MI:SS'),
pm_createdbyid,
TO_DATE (SUBSTR (REPLACE (pm_lastmodifieddate, 'T', ' '), 1, 19),'YYYY-MM-DD HH24:MI:SS'),
pm_lastmodifiedbyid,
TO_DATE (SUBSTR (REPLACE (pm_systemmodstamp, 'T', ' '), 1, 19),'YYYY-MM-DD HH24:MI:SS'),
pm_rsm_project_id_score__c,
pm_lead_fae__c,
pm_avg_annual_volume__c,
pm_priority__c,
TO_DATE (SUBSTR (REPLACE (pm_design_start_date__c, 'T', ' '), 1, 19),'YYYY-MM-DD HH24:MI:SS'),
TO_DATE (SUBSTR (REPLACE (pm_design_proto_date__c, 'T', ' '), 1, 19),'YYYY-MM-DD HH24:MI:SS'),
pm_production_years__c,
pm_production_life_months__c,
pm_production_months__c,
TO_DATE (SUBSTR (REPLACE (pm_design_freeze_date__c, 'T', ' '), 1, 19),'YYYY-MM-DD HH24:MI:SS'),
TO_DATE (SUBSTR (REPLACE (pm_production_proto_date__c, 'T', ' '), 1, 19),'YYYY-MM-DD HH24:MI:SS'),
TO_DATE (SUBSTR (REPLACE (pm_mass_production_date__c, 'T', ' '), 1, 19),'YYYY-MM-DD HH24:MI:SS'),
pm_fae_status__c,
TO_DATE (SUBSTR (REPLACE (pm_fae_assigned_date__c, 'T', ' '), 1, 19),'YYYY-MM-DD HH24:MI:SS'),
TO_DATE (SUBSTR (REPLACE (pm_fae_accepted_date__c, 'T', ' '), 1, 19),'YYYY-MM-DD HH24:MI:SS'),
pm_potential__c,
pm_fae_reject_reason__c,
pm_fae_project_complexity__c,
pm_design_phase__c,
pm_maxim_id__c,
pm_project_number__c,
pm_active__c,
pm_pivotal_created_by__c,
pm_manufactured_by__c,
pm_isdeleted,
TO_DATE (SUBSTR (REPLACE (pm_lastactivitydate, 'T', ' '), 1, 19),'YYYY-MM-DD HH24:MI:SS')
END sforce_opp_insert;
/I was wondering anyone has seen this before
TIA,
MikeThe code below is deleting fine. Check your $id is valid. I wonder if ADOdb has some quirks with binding and variable creation/destruction, similar to #1 in http://www.oracle.com/technology/tech/php/htdocs/php_troubleshooting_faq.html#bindvars
<?php
See ADOdb Tutorial for Oracle: http://phplens.com/lens/adodb/docs-oracle.htm
drop table mytab;
create table mytab (city varchar2(20), country_id varchar2(20));
insert into mytab values ('SF', 'US');
insert into mytab values ('Sydney', 'AU');
insert into mytab values ('London', 'UK');
commit;
require_once("/home/cjones/public_html/php/adodb5/adodb.inc.php");
$db = ADONewConnection("oci8");
$db->Connect("//localhost/XE", "hr", "hrpwd");
echo "Before:\n";
$rs = $db->Execute("select city from mytab");
while ($arr = $rs->FetchRow()) {
echo $arr['CITY'] . "\n";
$s = $db->Prepare("delete from mytab where country_id = :ci");
$db->Parameter($s, $ci, 'ci');
foreach (array('US', 'AU') as $ci) {
$db->Execute($s);
echo "After:\n";
$rs = $db->Execute("select city from mytab");
while ($arr = $rs->FetchRow()) {
echo $arr['CITY'] . "\n";
?>There's another sample in the ADOdb OCI8 driver:
Usage:
$stmt = $DB->Prepare("insert into table (col0, col1, col2) values (:0, :1, :2)");
$DB->Bind($stmt, $p1);
$DB->Bind($stmt, $p2);
$DB->Bind($stmt, $p3);
for ($i = 0; $i < $max; $i++) {
$p1 = ?; $p2 = ?; $p3 = ?;
$DB->Execute($stmt);
}For queries I know this works. I haven't seen any examples that prepare once.
$rs = $db->Execute("select city from mytab where country_id = :ci", array('ci' => 'UK'));
while ($arr = $rs->FetchRow()) {
echo $arr['CITY'] . "<br>\n";
} -
ORA-01000: maximum open cursors exceeded with Thin and OCI
Hi I have this ERROR :
ORA-01000: maximum open cursors exceeded
ORA-06510: PL/SQL: unhandled user-defined exception
ORA-06512: at line 1
and all the connections show this error, I run the weblogic.Admin RESET_POOL utility
and the problem are fixed !!
Why show this error ?
why with RESET_POOL utility resolve the problem ?
the Oracle Version is Oracle 8.1.7.0 32bits on Solaris 8Mitesh:
I using testConnOnReserve=true and testReleasedConnections=true specify testTableName
when the errors appear , but increse the open_cusror value to 1200, i think is
not the solution, because the DB and Stored Procedure is used by Cold Fusion ,
is the same Application, in Cold Fusion not show this error u other errors with
380 users on the application.
I check to increse the open_cusror and test the application.
thanks
Roberto
Mitesh Patel <[email protected]> wrote:
You should do couple of things here.
First of all you can increse the open_cusror value to 1200 if it is ok
with you.
Secondly, make sure you are using testConnOnReserve=true and specify
testTableNAme
in your config.xml for your connection pool defination.
Thanks,
Mitesh
Roberto Hernandez wrote:
Mitesh Patel,
WLS 6.1 sp3 on Solaris 8, in init.ora file
session_cached_cursors = 30 and Open_Cursors = 600
Any Idea to resolve the Error and not use manual RESET_POOL utility?
thanks
Mitesh Patel <[email protected]> wrote:
This is know bug from oracle.
XAResource.recover repeatedly returns the same set of in-doubt
Xids irrespective of the input flag. According to the XA spec, the
Transaction Manager should initially call XAResource.recover with
TMSTARTRSCAN and then call XAResource.recover with
TMNOFLAGS repeatedly until no Xids are returned. This Oracle
bug could lead to infinite recursion and subsequent running out
of Oracle cursors with error "ORA-01000: maximum open cursors
exceeded."
What version of weblogic are you using? What is value for max cursors
in init.ora file
in your dbserver?
Resets the named database ConnectionPool by shutting down and
reestablishing all the allocated connections. This method should
only be called when the connection pool is known to be in a bad
state, for example when the database has been restarted.
By using Reset you are cleaning all bad connections and associated
cursors
with it. That
is why it resolves ora-1000 for you.
Mitesh
Roberto Hernandez wrote:
Hi I have this ERROR :
ORA-01000: maximum open cursors exceeded
ORA-06510: PL/SQL: unhandled user-defined exception
ORA-06512: at line 1
and all the connections show this error, I run the weblogic.Admin
RESET_POOL
utility
and the problem are fixed !!
Why show this error ?
why with RESET_POOL utility resolve the problem ?
the Oracle Version is Oracle 8.1.7.0 32bits on Solaris 8 -
Getting ORA-01000 : maximum open cursors exceeded problem
I am getting ORA-01000 : maximum open cursors exceeded problem in my piece of java code when the
load is high .Open cursors is set to 1000 still getting the same problem .
Basically i have to select some rows from a table which i am doing in A() function and process it and insert into
another table which i do it in another function B() there is a update statement also in this fun.
There is a particular business logic for which i need to call B() from the A() function
which happens to be in the select result set like below
A()
query ="Select * from temp";
while(rs.next)
B();
All the result sets are properly being closed that too in finally block.
I dont see any other problem with code .Still I am gettin this cursor problem.
Is some thing wrong with the design like calling a
insert from a result set while loop or the update statementThe code below is deleting fine. Check your $id is valid. I wonder if ADOdb has some quirks with binding and variable creation/destruction, similar to #1 in http://www.oracle.com/technology/tech/php/htdocs/php_troubleshooting_faq.html#bindvars
<?php
See ADOdb Tutorial for Oracle: http://phplens.com/lens/adodb/docs-oracle.htm
drop table mytab;
create table mytab (city varchar2(20), country_id varchar2(20));
insert into mytab values ('SF', 'US');
insert into mytab values ('Sydney', 'AU');
insert into mytab values ('London', 'UK');
commit;
require_once("/home/cjones/public_html/php/adodb5/adodb.inc.php");
$db = ADONewConnection("oci8");
$db->Connect("//localhost/XE", "hr", "hrpwd");
echo "Before:\n";
$rs = $db->Execute("select city from mytab");
while ($arr = $rs->FetchRow()) {
echo $arr['CITY'] . "\n";
$s = $db->Prepare("delete from mytab where country_id = :ci");
$db->Parameter($s, $ci, 'ci');
foreach (array('US', 'AU') as $ci) {
$db->Execute($s);
echo "After:\n";
$rs = $db->Execute("select city from mytab");
while ($arr = $rs->FetchRow()) {
echo $arr['CITY'] . "\n";
?>There's another sample in the ADOdb OCI8 driver:
Usage:
$stmt = $DB->Prepare("insert into table (col0, col1, col2) values (:0, :1, :2)");
$DB->Bind($stmt, $p1);
$DB->Bind($stmt, $p2);
$DB->Bind($stmt, $p3);
for ($i = 0; $i < $max; $i++) {
$p1 = ?; $p2 = ?; $p3 = ?;
$DB->Execute($stmt);
}For queries I know this works. I haven't seen any examples that prepare once.
$rs = $db->Execute("select city from mytab where country_id = :ci", array('ci' => 'UK'));
while ($arr = $rs->FetchRow()) {
echo $arr['CITY'] . "<br>\n";
} -
Oracle and "Maximum open cursors exceeded"
Hi,
I am using Weblogic 7.0sp2 with Oracle 9.2.0. Since we are using manual JTA
transactions and the 9.2 drivers are buggy in that respect, we are using the
9.0.1 thin drivers delivered with weblogic.
The problem I have is that after a while, we get the now classic "Maximum open
cursors exceeded" error on connections from our connection pool (used through
a
TX datasource). I have of course checked all our JDBC code and it is fine. We
do not leave any statement/connection open. In fact, I am certain that the
problem is not caused by our applicative code.
The reason I am so positive is that the numbers of open (cached) cursors is
growing, even though there is no activity on our application (I mean no
activity at all). The number of cursors is regurlarly increasing by one
every 5 minutes until it reaches the maximum allowed for a session.
I have listed the statements corresponding to the opened cursors (they
do not belong to our code, as you might have guessed):
SELECT sysdate, user from dual
select longdbcs from javasnm$ where short = :1
select longname from javasnm$ where short = :1
As you can see, there are only three different statements. You can get
the statements from the system view v$open_cursor for a given session
but it will only give one row per different statement. If you want to know
the # of opened cursors in your cursor, use v$sesstat with statistic# = 3
(opened cursor current).
I suspect something is wrong in the connection testing done by weblogic
for the pool (I have activated test on reserved connections and test table
name is "dual") that leaves a resultset/statement behind. What is weird
though is that the refresh period is still 0 (not 5 minutes as you would
expect from the cursor growth rate...).
I would not say that it is an Oracle bug (as stated in some BEA FAQ I read)
since our application JDBC code does not exhibit the same problem. The
problem appeared with recent version of WebLogic for which the session
cursor cache is enabled, I suppose for performance reasons - this
is set by isssuing "ALTER SESSION SET SESSION_CACHED_CURSORS = ...".
Talking about this, does anybody know to which value WebLogic sets this
parameter when intializing the connection (this is neither
documented/configurable)?
Up to now, I have come up with possibly two workarounds, neither of which
is satisfying:
- resetting the pool from time to time
- issuing "ALTER SESSION SET SESSION_CACHED_CURSORS = 0" when I get a
connection from the pool. I have not tested this one personally (read
in a newsgroup that someone else did successfully) but it is supposed
to reset the cursor cache that is causing the trouble.
Any help will be greatly appreciated,
Regards,
Thierry.Thierry Rouget wrote:
Hi,
I am using Weblogic 7.0sp2 with Oracle 9.2.0. Since we are using manual JTA
transactions and the 9.2 drivers are buggy in that respect, we are using the
9.0.1 thin drivers delivered with weblogic.
The problem I have is that after a while, we get the now classic "Maximum open
cursors exceeded" error on connections from our connection pool (used through
a
TX datasource). I have of course checked all our JDBC code and it is fine. We
do not leave any statement/connection open. In fact, I am certain that the
problem is not caused by our applicative code.
The reason I am so positive is that the numbers of open (cached) cursors is
growing, even though there is no activity on our application (I mean no
activity at all). The number of cursors is regurlarly increasing by one
every 5 minutes until it reaches the maximum allowed for a session.
I have listed the statements corresponding to the opened cursors (they
do not belong to our code, as you might have guessed):
SELECT sysdate, user from dual
select longdbcs from javasnm$ where short = :1
select longname from javasnm$ where short = :1
As you can see, there are only three different statements. You can get
the statements from the system view v$open_cursor for a given session
but it will only give one row per different statement. If you want to know
the # of opened cursors in your cursor, use v$sesstat with statistic# = 3
(opened cursor current).
I suspect something is wrong in the connection testing done by weblogic
for the pool (I have activated test on reserved connections and test table
name is "dual") that leaves a resultset/statement behind. What is weird
though is that the refresh period is still 0 (not 5 minutes as you would
expect from the cursor growth rate...).
I would not say that it is an Oracle bug (as stated in some BEA FAQ I read)
since our application JDBC code does not exhibit the same problem. The
problem appeared with recent version of WebLogic for which the session
cursor cache is enabled, I suppose for performance reasons - this
is set by isssuing "ALTER SESSION SET SESSION_CACHED_CURSORS = ...".
Talking about this, does anybody know to which value WebLogic sets this
parameter when intializing the connection (this is neither
documented/configurable)?
Up to now, I have come up with possibly two workarounds, neither of which
is satisfying:
- resetting the pool from time to time
- issuing "ALTER SESSION SET SESSION_CACHED_CURSORS = 0" when I get a
connection from the pool. I have not tested this one personally (read
in a newsgroup that someone else did successfully) but it is supposed
to reset the cursor cache that is causing the trouble.
Any help will be greatly appreciated,
Regards,
Thierry.Hi. We don't make those queries either. I suspect they are internal to the
oracle driver. One thing you can try is to set the size of the pool's
statement cache to zero. Oracle will retain cursors for every statement we
cache. The alternative is also to tell the DBMS to allow a given session
more cursors.
Joe -
Maximum open cursors exceeded with Sybase TG
Hi,
Does anyone knows if we can use the HS_OPEN_CURSORS with Oracle transparent gateway for Sybase ?
I've got the error message :
ORA-01000: maximum open cursors exceeded
ThanksThis depends if the maximum number of cursors exceeded in the GTW or within the db.
In my eyes the OPEN_CURSORS of the db is normally the limiting factor.
HS_OPEN_CURSORS defines the maximum number of cursors that can be open on one connection to a non-Oracle system instance.
The value never exceeds the number of open cursors in the Oracle database server. Therefore, setting the same value as the OPEN_CURSORS initialization parameter in the Oracle database server is recommended.
So better check out the OPEN_CURSORS of the db and increase them. -
Maximum Open Cursors Exceeded problem in XSQL
Hi,
We are processing an XSQL page by calling XSQLRequest.process() programatically within our application. Within the XSQL page there are several queries which involve multiple nested CURSOR expressions... when the query returns enough rows we are running into the error "ORA-00604: error occurred at recursive SQL level 1 ORA-01000: maximum open cursors exceeded".
When searching this forum I have seen many (old) postings regarding this error and a bug in the XDK... seems like it was some time ago, but while we set about improving the structure of our XSQL page (or increasing the max open cursor init parameter currently at 500 or both) can anyone confirm that this bug no longer exists?
Also, any general suggestions on working around this limit rather than increasing it? We have considered splitting up our queries into smaller queries (and merging the results via XSLT) and closing cursors during the session explicitly by issuing commits within the XSQL page... but any better ideas?
Thanks,
BobI have found this max open cursors problem to be related to Statement object not being closed. This presents a problem for the use of PreparedStatements, because they are only useful if you can keep them open and resuse them. However, in doing so, each iteration through the PreparedStatement creates another open cursor in the databse rather than reusing the previous one. A work around I discovered by reading about REF CURSORS and I use in JDBC is as follows:
Assuming a previously prepared PreparedStatement pstmt and a ResultSet rset-
while (rset.next()) {
rset.close();
// This line closes the cursor in the database
// but does not require you to re-prepare the
// PreparedStatement. Don't ask me why--ask the
// Oracle API guys.
rset.getStatement().close();
// make ready for GC
rset = null; -
Oracle - maximum open cursors exceeded
Hi! I'm constatly getting the error I pasted below, when this line is executed:
PreparedStatement stmt = connection.prepareStatement(sqlStatement);
'connection' is of course an instance of oracle.jdbc.driver.OracleConnection, and 'sqlStatement' is a normal INSERT statement.
Now, why I'm getting an error that involves cursos if the statement is an insert? One more thing, this error is happening in some enviroments so I think it could be an orcacle server problem (like installation or configuration problem), or it could be the driver, or... I dont know :)
Well, I hope anyone can give me a tipo about this... Thanks in advance.
Dario
ORA-01000: maximum open cursors exceeded
java.sql.SQLException: ORA-01000: maximum open cursors exceeded
at oracle.jdbc.dbaccess.DBError.throwSqlExceptionDBError.java:180)
at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:208)
at oracle.jdbc.ttc7.Oopen.receive(Oopen.java:118)
at oracle.jdbc.ttc7.TTC7Protocol.open(TTC7Protocol.java:472)
at oracle.jdbc.driver.OracleStatement.<init>OracleStatement.java:499)
at oracle.jdbc.driver.OracleStatement.<init>OracleStatement.java:518)
at oracle.jdbc.driver.OraclePreparedStatement.<init>OraclePreparedStatement.java:210)
at oracle.jdbc.driver.OraclePreparedStatement.<init>OraclePreparedStatement.java:193)
at oracle.jdbc.driver.OracleConnection.privatePrepareStatementOracleConnection.java:869)
at oracle.jdbc.driver.OracleConnection.prepareStatementOracleConnection.java:704)
------------------------------------------Thanks a lot for all the answers...
After some tests a made, I found out that in the enviroment I developed the application, the value of the parameter OPEN_CURSORS is 300. I don't know yet which is the value in the test enviroment (where the errors are happening) but I'm pretty sure it is smaller, since I could force the same error in the development enviroment increasing the concurrency of the application (ie, I force the application too many create prepare statements, even much more than the real values the application should accept).
Well, I have to thank you all again...
Dario -
ORA-01000: maximum open cursors exceeded (please help / JDBC guru needed)
ORA-01000: maximum open cursors exceeded
I am getting this error when trying to execute 2,500 Sql DDL statements. I am executing the statement with:
public boolean execute(String sql) ( like stmt.execute(sql); )
After each execute() I close the statement ( like stmt.close() )
I tried taking this a step further and decided to close and reopen the database connection after every 100 Sql statements processed and I still get this exception when continuing.
ORA-01000: maximum open cursors exceeded
Any help will be greatly appreciated. I need to figure how to close the cursors or how to finish processing all 2,500 statements. I do not have control over the init.ora file and can not increase the max cursors. I hope to figure out how to close the cursors so that no tweaking of the init.ora file is needed.
ChrisTDWhy dont you allocate dukes for this problem ???
am getting this error when trying to execute 2,500 Sql DDL statements. I am executing the statement with:
public boolean execute(String sql) ( like stmt.execute(sql); )
After each execute() I close the statement ( like stmt.close() )
What kind of DDL is that? are you using any cursor operations to fetch the data? What kind of query does this sql parameter contain?
Look there is only 3 solutions for this kind of problem.
1) shutdown the database and restart it.
I dont think closing connection will shutdown the database as you
told.
2) shutdown the database access init.ora and increase the
OPEN_CURSORS and then restart it.
You told that you dont have access to init.ora.
3) close every cursor that you open.(Probably you are not closing the cursor once you fetch the data). -
ORA-01000: maximum open cursors exceeded in R12
Hi,
In which Middle Tier log we see "ORA-01000: maximum open cursors exceeded" error, we have EBS R12 version.937828 wrote:
Hi,
In which Middle Tier log we see "ORA-01000: maximum open cursors exceeded" error, we have EBS R12 version.
Increase the value of OPEN_CURSORS init parameter -- https://community.oracle.com/search.jspa?peopleEnabled=true&userID=&containerType=&container=&q=ORA-01000
Database Initialization Parameters for Oracle E-Business Suite Release 12 (Doc ID 396009.1)
Thanks,
Hussein -
Error ORA-01000: maximum open cursors exceeded
Why Oracle return this error. When I change the OPEN_CURSORS in init.ora from 100 to 1000 without this error.
I want to keep Minimum cursors value. How can I change the Java program ?
96 er_write_asp('W349','HK','50112','USD',3.99)
97 er_write_asp('W349','HK','10112','USD',5.22)
98 er_write_asp('W349','HK','60112','EUR',13.07)
99 er_write_asp('W349','HK','50112','USD',3.9)
100 er_write_asp('W349','HK','40112','USD',5.65)
101 er_write_asp('W349','HK','90112','USD',2.75)
java.sql.SQLException: ORA-01000: maximum open cursors exceeded
ORA-06512: at "POSTCAL.ER_WRITE_ASP", line 10
ORA-06512: at line 1
java Program list.
eric.leung 2003/12/02
set CLASSPATH include C:\Oracle\Ora81\jdbc\lib\classes12.zip
Purpose
===============
Read text file, write into Oracle Database
import java.io.*;
import java.util.StringTokenizer;
import java.sql.*;
import java.lang.*;
import java.math.BigDecimal;
import java.util.Date;
public class writeASP {
// Login Information
static String user = "x";
static String passwd = "x";
static String ip = "x";
static String getfile = "c:\\temp\\asp.csv";
public static void main(String[] args) throws IOException {
String line;
int i = 0;
int cnt = 0;
int port = 0;
Connection conn;
Statement stmt;
String query = "";
String strone = "";
String arry[] = {"","","","","","","","","","","","","","",
// start to connection
chkArgs(args);
FileReader inFile = new FileReader(getfile);
BufferedReader in = new BufferedReader(inFile);
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@" + ip + ":1521:lcdx",
user,passwd);
stmt = conn.createStatement();
while((line= in.readLine()) != null)
cnt = cnt + 1;
StringTokenizer mot = new StringTokenizer(line,",");
if (mot.countTokens() > 0) {
for (i = 0; 0 < mot.countTokens() ;i++) {
arry[i+1] = "";
arry[i] = mot.nextToken();
} /* for */
} /* if */
strone = arry[0].substring(0,1);
if (strone.equals("W")) {
//abc(arry);
query = "er_write_asp(" +
quote(arry[0],',') +
quote(arry[1],',') +
quote(arry[2],',') +
quote(arry[3],',') ;
query = query + arry[4] + ")";
System.out.println(cnt + " " + query);
CallableStatement cs = conn.prepareCall
("{call er_write_asp(?,?,?,?,?)}");
cs.setString(1,arry[0]);
cs.setString(2,arry[1]);
cs.setString(3,arry[2]);
cs.setString(4,arry[3]);
try {cs.setBigDecimal(5, new BigDecimal(arry[4])); } /*pur_cost */
catch(NumberFormatException e) {cs.setDouble(5,0);}
// System.out.println("Call string: "+ cs.getString());
boolean flag = cs.execute();
// ResultSet rs = cs.executeQuery();
// stmt.executeUpdate();
} /* if */
} /* while */
conn.close();
} /* try */
catch (Exception e) {
System.err.println(e.toString());
} /* Catch */
in.close();
} /* main */
public static void abc(String g[])
System.out.print(g[0] + " " + g[1] + " "
+ g[2] + " " + g[3] + " " + g[4] + " "
+ g[5] + " " + g[6] + " " + g[7] + " "
+ g[8] );
System.out.println();
private static String quote(String s)
return "'" + s + "'";
private static String quote(String s,char j)
return "'" + s + "'" + j;
public static void chkArgs(String[] args) {
for (int j=0 ; j < args.length;j++) {
if (args[j].trim().equals("-u")) {
if (j + 1 < args.length) {
try { user = args[j+1];}
catch ( Exception e) {}
} /* if */
if (args[j].trim().equals("-p")) {
if (j + 1 < args.length) {
try { passwd = args[j+1];}
catch ( Exception e) {}
} /* if */
if (args[j].trim().equals("-i")) {
if (j + 1 < args.length) {
try { ip = args[j+1];}
catch ( Exception e) {}
} /* if */
if (args[j].trim().equals("-f")) {
if (j + 1 < args.length) {
try { getfile = args[j+1];}
catch ( Exception e) {}
} /* if */
if (args[j].trim().equals("-h")) {
help();
System.exit(0);
} /* if */
} /* for */
} /* chkArgs */
public static void help() {
System.out.println("\nWrite ASP Price Version 1.0 2003/12/02\n");
System.out.println("Option:");
System.out.println("\t-i IP Address");
System.out.println("\t-u User name");
System.out.println("\t-p Password");
System.out.println("\t-f File name");
System.out.println("\t-h Help");
System.out.println("\nCall Oracle Stored Procdure");
System.out.println("er_write_ASP(,,,,)");
} /* help () */
} /* Class */Don't create a new callable statement each pass through the loop. Create it outside the loop and set the parameters & exec inside the loop. Close the resultset each time. Close statement after loop.
-
XSL Database Functions throwing "ORA-01000: maximum open cursors exceeded"
In my BPEL process, I have a large dataset requiring enrichment of the data by looking up values in a database. I'm doing this in an XSL transformation using either; orcl:lookup-table() or orcl:query-database() functions. This works ok for a number of records, but then fails with "ORA-01000: maximum open cursors exceeded".
This implies that these functions are not closing down open cursors after use. Is this a bug, or can I configure the data-sources to handle this?
Thanks.I don't see any settings to fix this on the data-source itself.
http://download-uk.oracle.com/docs/cd/B31017_01/integrate.1013/b28988/trouble.htm#BABCBFHA
4.11.2 ORA-00604: Error Occurred at Recursive SQL Level 1 ORA-01000: Maximum Open Cursors Exceeded
If i see this..Oracle just advices just to set the PROCESSES parameter on the database high enough so it wont happen :) -
The error:maximum open cursors exceeded,how to resolve it??
the parameter is as following in oracle: open_cursors=300
i write the following two methos get data from oracle db,after invote the methods many times,the program thrwos the exception named "maximum open cursors exceeded";why?how to resolve it?
in my program ,i have closed the statment and resultset!
the following is the code,and method a call mehtod b:
mehtod a:
//modeify the product and call mothod b
public boolean modifyDVBProd(Integer prodIDInt,ProdRequestEn prod)
boolean successB=false;
Connection conn=...;
if(conn!=null)
try
conn.setAutoCommit(false);
//the following call method b
successB=ProdOperateBL.getInstance().modifyDVBProd(conn,prodIDInt,prod);
if(successB)
conn.commit();
else
conn.rollback();
catch(Exception e)
successB=false;
try
conn.rollback();
catch(Exception ex)
ex.printStackTrace();
e.printStackTrace();
finally
try
conn.setAutoCommit(true);
catch (SQLException ex)
ex.printStackTrace();
else
successB=false;
return successB;
method b;��
//modify products
public boolean modifyDVBProd(Connection conn,Integer prodIDInt,ProdRequestEn prod)
boolean successB=false;
String sqlPriceStr="UPDATE pricemodelen pm SET pm.rentpricf=? WHERE pm.priceidl=(SELECT p.priceidl FROM producten p WHERE p.productidl=?)";
String sqlProdStr="UPDATE producten p set pronamestr=?,prod_type=?,unidstr=?,catype_name=?,casid=?,entitle_code=?,validfrdt=?,validtodt=?,descstr=? WHERE P.productidl=?";
String sqlProd_channelDelStr="DELETE FROM proden_channelen c WHERE c.productidl=?";
String sqlProd_channelInsertStr="INSERT INTO proden_channelen(productidl,channel_id) VALUES(?,?)";
PreparedStatement pstmt1=null;
PreparedStatement pstmt2=null;
PreparedStatement pstmt3=null;
PreparedStatement pstmt4=null;
int paramIndexInt=1;
try
//price
pstmt1=conn.prepareStatement(sqlPriceStr);
pstmt1.setDouble(paramIndexInt++,prod.getProdPriceD());
pstmt1.setDouble(paramIndexInt++,prodIDInt.intValue());
int priceResult=pstmt1.executeUpdate();
//product
pstmt2=conn.prepareStatement(sqlProdStr);
paramIndexInt=1;
pstmt2.setString(paramIndexInt++,prod.getProdNameStr()); //product name
pstmt2.setInt(paramIndexInt++,prod.getProdTpInt());//product type
pstmt2.setString(paramIndexInt++,prod.getPriceUnitStr());//unit
pstmt2.setString(paramIndexInt++,prod.getCaTpStr());//type
pstmt2.setInt(paramIndexInt++,prod.getCasidInt());//casid
pstmt2.setString(paramIndexInt++,prod.getCaEntitleCodeStr());//caentitlecode
pstmt2.setDate(paramIndexInt++,prod.getValidBeginDate());//time
pstmt2.setDate(paramIndexInt++,prod.getValidEndDate());//time
pstmt2.setString(paramIndexInt++,prod.getProMemoStr());//memo
pstmt2.setInt(paramIndexInt++,prodIDInt.intValue());//id
int prodResult=pstmt2.executeUpdate();//
pstmt3=conn.prepareStatement(sqlProd_channelDelStr);
pstmt3.setInt(1,prodIDInt.intValue());
pstmt3.executeUpdate();
int channelResult=0;
for(int i=0;i<prod.getChannelIDsInt().length;i++)
pstmt4=conn.prepareStatement(sqlProd_channelInsertStr);
pstmt4.setInt(1,prodIDInt.intValue());
pstmt4.setInt(2,prod.getChannelIDsInt());
pstmt4.addBatch();
pstmt4.executeBatch();
//((OraclePreparedStatement)pstmt).sendBatch(); // JDBC sends the queued request
if((prodResult>0)&&(priceResult>0))
successB=true;
catch(Exception ex)
successB=false;
ex.printStackTrace();
finally
//closing the preparedstatement
try
if(pstmt1!=null)
pstmt1.close();
if(pstmt2!=null)
pstmt2.close();
if(pstmt3!=null)
pstmt3.close();
if(pstmt4!=null)
pstmt4.close();
catch (SQLException ex)
ex.printStackTrace();
return successB;Check this loop.
or(int i=0;i<prod.getChannelIDsInt().length;i++)
pstmt4=conn.prepareStatement(sqlProd_channelInsertStr);
pstmt4.setInt(1,prodIDInt.intValue());
pstmt4.setInt(2,prod.getChannelIDsInt());
pstmt4.addBatch();
Here every time the loop executes, a new statement object is created and assigned to the same statement object reference pstmt4. So finally when u r closing the stmt objects, only one stmt object gets closed out of prod.getChannelIDsInt().length that gets created with in the loop.
Maybe you are looking for
-
Where's the music on iTunes, and what's with the quality and compatibility?
I'm just curious as to whether anyone else has had this issue or not: Does anyone else feel like, after searching for specific songs, there's just little to nothing in the database? I feel like most of my searches are pointless because iTunes has eit
-
hello I am new to iPhone Development. I am using UI ImagePickerView to Open Camera. I want to get RGB Color of Pixel from Camera. Is there any Code of Sample App? Are there any suggested articles that I can read to learn more about my different opt
-
Podcasts automatically delete themselves???!!!!!
HELP!!! Whenever I listen to/watch a podcast, the little blue dot that was next to them vanishes. Then when I update my iPod, the watched podcasts delete themselves from my iPod and computer!!!! Has this happened to anyone else? I also notice that wh
-
How do I download Adobe Reader on a MacBook Air?
Does anyone know how to download Adobe Reader on a MacBook Air?
-
I have an Epson WF 7610 wifi printer that i connect using my internet modem. How do i print from my new ipad air?