BAPI returns less number of records when called from WebDynpro
Hi,
We have a BAPI which updates some tables and then bring back output in the form of a table.
When we execute BAPI from R/3 we get all records. When we execute the BAPI using webdynpro, for the same input values, we are always getting 22 records. This count remains same always.
When we had put a breakpoint in the BAPI and tested it using webdynpro, we get few more records. Wondering what is the prob?
Any help?
regards,
Shabeer
Hi,
Are you using the same user when running the BAPI form R/3 and from the portal?
We had a similar problem when the user from the portal didn't have the necessary authorizations.
Adi.
Similar Messages
-
SPM Data Loads : Less number of records getting loaded in the Invoice Inbound DSO
Dear Experts,
We are working on a project, where data of different NON SAP Source Systems is being loaded into SPM, via Flat File Loads. We came across a very weird situation.
For other Master and Transaction Data objects, it worked fine, but when we loaded Invoice File, less number of records are getting loaded in the Inbound DSO. The Invoice File contained 80000 records, but the inbound DSO has 78500 records only. We are losing out on 1500 Records.
We are unable to figure out, as to which 1500 records are we missing out on. We couldn't find any logs, in the Inbound Invoice DSO. We are unable to find out if the records are erroneous, or there is any issue with something else. Is there a way to analyze the situation / Inbound invoice DSO.
If there is any issue with the Outbound DSO or Cube, We know that it is possible to check the issue with the Data Load request, but for the Inbound DSO, we are not aware, as to which the way to analyze the issue, and why Inbound DSO is taking less records.
Regards
PankajHi,
Yes, It might be happen in DSO, because the data records have the simantic keys, so in Keyfileds selection you might have less no of records.
If you have any rountines check the code(If any condetion for filtering the records).
Regards. -
Oracle Procedure returning more number of records
Hi,
I have created an Oracle Procedure which is supposed to fetch a record as per the input parameter passed.
The core query in the procedure is as below -
SELECT DISTINCT col1 FROM my_tab WHERE col2 = 'Input parameter'
Few of the input parms (col2) has more number of records (col1) and so the procedure gives an error like -
'ORA-01422: exact fetch returns more than requested number of rows'
Could you please let me know how can I modify the procedure so that it would return more number of records as the case may be?
Thank you!It still gives me the same error when it encounters more than one output.Yes, I'm sure it does.
But we can't tell you how to fix it because we don't know what you want.
What's the purpose of the procedure?
Is it to "spell check" the name of an intermediary? If so, you'll need to figure out what to do when you have more then one person with the same name.
You can add AND ROWNUM = 1. Or perhaps you can trap the too_many_rows exception.
Your procedure doesn't return anything (no out variables). Is that correct?
Or is the purpose of the procedure to return the ID of the matching name? -
Less number of Records while loading data from one cube to another
Hi,
We are in the process of doing major changes in the existing InfoCube.
Before making any changes, we had planned to make a copy of the cube with data.
For this we did the following steps :
1. Created the new cube from the original cube.
2. Generated Datasource on the Orignal cube.
3. Made a update rule on the new cube by selecting the Orinal cube.
4. Made a InfoPack on Infosouce which got created with 8<original cube>.
5. Uploaded the data into the new cube.
We have uploaded the data successfully from the original cube to the new cube.
However, New cube shows less number of records as compared to the original cube.
But the query is showing the same figures from both the cubes.
Can anyone please advise what could be the reason for this less number of records and how the figures are showing same when we run the query from both the cubes.
Please help.
Thanks
Ramesh GanjiHi Ramesh,
this is possible coz when u have loaded yr original cube, it may be loaded on daily/weekly basis. so in the cube there are many requests. Also if in the same request, if there are two records with same dimension keys ther are automatically added aggregating them.
if req 1 has following records
cust mat amt
1 1 100
1 1 50
it will add
1 1 150
and if the records are seperated by different req, then both will b added individually.
therefore when u r loading yr new cube from original cube, all records that has same dimension key gets aggregated coz they are loaded into single request. so it showing less no of records as added.
hope this helps.
Regards,
Purvang
Assigning Point is to say Thanks in SDN * -
Which system field returns the number of records returned after a select?
Which system field returns the number of records returned after a select?
a) sy-index
b) sy-recno
c) sy-lncnt
d) sy-dbcnt
e) sy-tabixHi,
SY-DBCNT
Regards,
Prashant -
Stored Procedure Does Not Run Properly When Called From Portlet
We have a simple Java portlet that calls a PL/SQL stored procedure which we wrote. The stored procedure sends a large number of emails to users in our corporation using the "utl_smtp" package. The stored procedure returns a count of the emails back to the Java portlet when it's finished. This number is displayed in the portlet.
Our problem:
The stored procedure functions as expected when run from a PL/SQL block in SQL*Plus, and the Java portlet calls the procedure properly when sending out a smaller number of emails (Less than 200 usually). When we get into a higher number of emails the procedure hangs when called from the portlet, but it STILL functions properly from SQL*Plus. It does not return the number of emails sent
and the Java portlet is unable to return a SQLException. Also, we have noticed that emails are sent at a much slower pace from the stored procedure when it's called from the portlet.Any Ideas?
-
HR_INFOTYPE_OPERATION not working when called from Dynamic action
Hi ,
Senario : I would like to execute a form from dynamic action which
creates a record in 0015 (Additional payment IT) .
I have writen the code as shown below am using FM HR_INFOTYPE_OPERATION
. When i execute the program from se38 it is creating a record, however it is
not created when it is called from dynamic action..when i debugged the code in
inside the FM HR_INFOTYPE_OPERATION there is a FM HR_MAINTAIN_MASTERDATA where
they are using call dialog (statement) and
sy-oncom = 'N' when called from Dynamic action and
sy-oncom = 'S' when called executed directly.
I tried to change the sy-oncom to S while run from Dynamic action it created
the record.
So Can anyone explain me abt sy-oncom and how can i resolve the issue..
code..
REPORT ZHRPYENH01 .
perFORM TERMIATION_9000.
INCLUDE DBPNPMAC.
FORM Termiation_9000 *
FORM TERMIATION_9000.
INFOTYPES : 0015.
*data : i .
*i ='c'.
*break-point.
*message i000(000) with i.
TABLES : PRELP.
DATA : P9000 TYPE PA9000." with header line.
DATA : P0000 TYPE STANDARD TABLE OF P0000 WITH HEADER LINE.
DATA : P0015 TYPE STANDARD TABLE OF P0015 WITH HEADER LINE.
DATA : HIRE_DATE LIKE SY-DATUM,
TERM_DATE LIKE SY-DATUM.
DATA : MOLGA LIKE T500L-MOLGA VALUE '25',
SEQNR LIKE PC261-SEQNR.
DATA : RGDIR TYPE STANDARD TABLE OF PC261 WITH HEADER LINE.
DATA : ACTUAL_PERIOD LIKE PA9000-RETENTION.
DATA : PNP-SW-FOUND TYPE SY-SUBRC ,
PNP-SY-TABIX TYPE SY-TABIX.
DATA : TER_PERNR LIKE PA0001-PERNR.
DATA : REF_PERNR LIKE PA0001-PERNR.
data : key type BAPIPAKEY.
data : payed_amount type p0015-BETRG.
data : future_payment_amount type p0015-BETRG.
data : p0002 like pa0002.
types : begin of t_deduction ,
deducation_date like p0015-begda,
future_payment_amount type p0015-BETRG.
types : end of t_deduction.
data : future_deduction type standard table of t_deduction with
*header line.
data : future_deduction type t_deduction .
data : RETURN type BAPIRETURN1.
*data : deduction_p0015 like standard table of p0015 with header line.
data : deduction_p0015 like p0015 .
xxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxx
****Prepare 0015 data for deduction
*deduction for payed amount
clear deduction_p0015.
*refresh deduction_p0015.
deduction_p0015-pernr = REF_PERNR.
*deduction_p0015-pernr = TER_PERNR.
deduction_p0015-lgart = 'M120'.
deduction_p0015-begda = sy-datum + 1 .
deduction_p0015-endda = sy-datum + 1 .
deduction_p0015-BETRG = payed_amount.
deduction_p0015-WAERS = 'SGD'.
deduction_p0015-ZUORD = TER_PERNR.
*append deduction_p0015.
**deduction for future payment amount
*loop at future_deduction.
*clear deduction_p0015.
*deduction_p0015-pernr = REF_PERNR.
**deduction_p0015-pernr = TER_PERNR.
*deduction_p0015-lgart = 'M120'.
*deduction_p0015-begda = FUTURE_DEDUCTION-DEDUCATION_DATE.
*deduction_p0015-endda = FUTURE_DEDUCTION-DEDUCATION_DATE.
*deduction_p0015-BETRG = future_deduction-future_payment_amount.
*deduction_p0015-WAERS = 'SGD'.
*deduction_p0015-ZUORD = TER_PERNR.
*append deduction_p0015.
*endloop.
Create a deduction wage type in 0015 for the employee
break-point.
CLEAR RETURN.
CALL FUNCTION 'BAPI_EMPLOYEET_ENQUEUE'
EXPORTING
NUMBER = REF_PERNR
VALIDITYBEGIN = '18000101'
IMPORTING
RETURN = return
if not return is initial.
message E000(000) with
'Referred Employee could not be locked for referal payment deducation,
please try after some time'.
endif.
CALL FUNCTION 'HR_INFOTYPE_OPERATION'
EXPORTING
INFTY = '0015'
NUMBER = REF_PERNR
SUBTYPE = 'M120'
OBJECTID =
LOCKINDICATOR =
VALIDITYEND = SY-DATUM
VALIDITYBEGIN = SY-DATUM
RECORDNUMBER =
RECORD = deduction_p0015
OPERATION = 'COPY'
TCLAS = 'A'
DIALOG_MODE = '2'
NOCOMMIT =
VIEW_IDENTIFIER =
SECONDARY_RECORD =
IMPORTING
RETURN = return
KEY = key
break-point.
COMMIT WORK.
if not return is initial.
*return-TYPE
*ID
*NUMBER
*MESSAGE
message I000(000) with return-MESSAGE.
endif.
CALL FUNCTION 'BAPI_EMPLOYEET_DEQUEUE'
EXPORTING
NUMBER = REF_PERNR
VALIDITYBEGIN = '18000101'
IMPORTING
RETURN = return
xxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxx
Thanks and regards
-Senthil Bala
Message was edited by: senthil balaHi Senthil
Why at all U want a subroutine to create a record in IT0015 through Dynamic action.There are some standard codes available to update infotypes.
Let me give U an example
14 9CON BETRG 4 2 I INS,0015 This will create a record in IT0015 when IT0014 is updated with Wagetype 9CON
14 9CON BETRG 4 3 W P0015-LGART='5400' Set wagetype for IT0015(Here U can use a subroutine call to set the wagetype)
14 9CON BETRG 4 4 W P0015-BETRG=P0014-BETRG set amount for IT0015(Here U can use a subroutine call to get the amount)
14 9CON BETRG 4 5 W P0015-BEGDA=P0014-ENDDA set the dates(Here U can use a subroutine call to set the dates)
Hope this will help U.
Please award points if helpful -
JTextField update problem when called from PropertyChangeEvent
Hi,
I'm trying to create forms that can be dynamically loaded with Class.forname(formName).
Those forms should always inherit some methods that make it easy to pass data to
them and receive data from them. The idea is that the data comes from a table which
sends a hashmap (String column/JTextField-name + String Value pairs) with firePropertyChanged
as soon as a new row is seleceted. The JTextFields in the form are marked with setName("FieldName") that has to correspond to the name of the columns of the table.
My problem is that I can't update the fields in my form when I'm calling getRow(HashMap)
from within propertyChangeEvent but that's necessary to keep the forms flexible.
JTextFieldName.setText(newText) just won't work. But it works when I call getRow(HashMap)
from the constructor. SwingWorker and threads to update the form didn't help.
I don't need to call pack() / update() / repaint() on the JFrame, do I ??
update() / validate() / repaint() etc. didn't work on the JTextField themselves.
Below is the code for one of the test-forms (just a JPanel that is inserted in a frame)
with all of it's methods. Does anybody have a solution to this problem ??
Thanks for taking time for that !!
Benjamin
* testTable.java
* Created on 15. April 2004, 16:12
package viewcontrol.GUI;
* @author gerbarmb
import javax.swing.*;
import java.awt.*;
import java.beans.*;
import java.util.*;
public class testTable extends javax.swing.JPanel
implements
java.awt.event.KeyListener,
java.beans.PropertyChangeListener {
* public static void main(String[] argv) { testTable tt = new testTable();
* JFrame jf = new JFrame(); jf.setContentPane(tt); jf.setVisible(true); }
/** Creates new customizer testTable */
public testTable() {
initComponents();
HashMap hm = new HashMap();
* Only for debugging, to see that the method getRow() works when
* called from the constructor.
hm.put("ttext", "TEst");
this.getRow(hm);
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the FormEditor.
private void initComponents() {//GEN-BEGIN:initComponents
java.awt.GridBagConstraints gridBagConstraints;
jLabel1 = new javax.swing.JLabel();
textIn = new javax.swing.JTextField();
jLabel2 = new javax.swing.JLabel();
intIn = new javax.swing.JTextField();
jLabel3 = new javax.swing.JLabel();
numIn = new javax.swing.JTextField();
jLabel4 = new javax.swing.JLabel();
dateIn = new javax.swing.JTextField();
jLabel5 = new javax.swing.JLabel();
dateTimeIn = new javax.swing.JTextField();
jLabel6 = new javax.swing.JLabel();
jCheckBox1 = new javax.swing.JCheckBox();
keepValues = new javax.swing.JCheckBox();
jButton1 = new javax.swing.JButton();
setLayout(new java.awt.GridBagLayout());
jLabel1.setText("Text");
add(jLabel1, new java.awt.GridBagConstraints());
textIn.setName("ttext");
textIn.setPreferredSize(new java.awt.Dimension(100, 21));
textIn.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
textInActionPerformed(evt);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridwidth = 2;
add(textIn, gridBagConstraints);
jLabel2.setText("Integer");
add(jLabel2, new java.awt.GridBagConstraints());
intIn.setName("tint");
intIn.setPreferredSize(new java.awt.Dimension(50, 21));
add(intIn, new java.awt.GridBagConstraints());
jLabel3.setText("Number");
add(jLabel3, new java.awt.GridBagConstraints());
numIn.setName("tnum");
numIn.setPreferredSize(new java.awt.Dimension(50, 21));
add(numIn, new java.awt.GridBagConstraints());
jLabel4.setText("Date");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
add(jLabel4, gridBagConstraints);
dateIn.setName("tdate");
dateIn.setPreferredSize(new java.awt.Dimension(50, 21));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 1;
add(dateIn, gridBagConstraints);
jLabel5.setText("DateTime");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = 1;
add(jLabel5, gridBagConstraints);
dateTimeIn.setName("tidate");
dateTimeIn.setPreferredSize(new java.awt.Dimension(80, 21));
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridy = 1;
add(dateTimeIn, gridBagConstraints);
jLabel6.setText("Bit");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridy = 1;
add(jLabel6, gridBagConstraints);
jCheckBox1.setName("tbit");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridy = 1;
add(jCheckBox1, gridBagConstraints);
keepValues.setText("keep values");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 7;
gridBagConstraints.gridy = 3;
add(keepValues, gridBagConstraints);
jButton1.setText("Send");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 7;
gridBagConstraints.gridy = 2;
add(jButton1, gridBagConstraints);
}//GEN-END:initComponents
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
sendRow();
}//GEN-LAST:event_jButton1ActionPerformed
private boolean sendRow() {
java.util.HashMap hm = new java.util.HashMap();
Component[] cs = this.getComponents();
for (int i = 0; i < cs.length; i++) {
if (((Component) cs).getName() != null) {
if (cs[i] instanceof JCheckBox) {
String value = ((JCheckBox) cs[i]).isSelected() ? "1" : "0";
hm.put(cs[i].getName(), value);
} else if (cs[i] instanceof JCheckBox) {
hm.put(cs[i].getName(), ((JTextField) cs[i]).getText());
} // end for
firePropertyChange("rowChanged", null, hm);
return true;
private void getRow(java.util.HashMap hm) {
//if (! this.keepValues.isSelected()) {
Component[] cs = this.getComponents();
for (int i = 0; i < cs.length; i++) {
if (cs[i].getName() != null && hm.containsKey(cs[i].getName())) {
Component component = cs[i];
String componentName = cs[i].getName();
String componentValue = (String) hm.get(component.getName());
if (cs[i] instanceof JTextField) {
// output for debugging
System.out.println("Setting " + cs[i].getName() + " = "
+ componentValue);
((JTextField) component).setText(componentValue);
} else if (cs[i] instanceof JCheckBox) {
// output for debugging
System.out.println("JCheckBox found");
JCheckBox cb = (JCheckBox) component;
boolean selected = (componentValue == null ? false : (componentValue.equals("1")
? true
: false));
((JCheckBox) component).setSelected(selected);
} // end for
/* Uncomment this code snippet to retrieve the text that has been set
for the components (that means JTextFields)
This is just for debugging !
Component[] cs = this.getComponents(); for (int i = 0; i < cs.length;
i++) { if (cs[i].getName() != null) { if (cs[i] instanceof
JTextField) { System.out.println("Value of " +cs[i].getName() + " = " +
((JTextField) cs[i]).getText()); } } } // end for
private void textInActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_textInActionPerformed
}//GEN-LAST:event_textInActionPerformed
public void keyPressed(java.awt.event.KeyEvent e) {
if (e.getKeyCode() == java.awt.event.KeyEvent.VK_ENTER) {
sendRow();
public void keyReleased(java.awt.event.KeyEvent e) {
public void keyTyped(java.awt.event.KeyEvent e) {
public void propertyChange(java.beans.PropertyChangeEvent evt) {
if (evt.getPropertyName().equals("newRow")) {
final PropertyChangeEvent finalEvt = evt;
Runnable makeChanges = new Runnable () {
public void run() {
getRow((java.util.HashMap) finalEvt.getNewValue());
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JTextField dateIn;
private javax.swing.JTextField dateTimeIn;
private javax.swing.JTextField intIn;
private javax.swing.JButton jButton1;
private javax.swing.JCheckBox jCheckBox1;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JLabel jLabel6;
private javax.swing.JCheckBox keepValues;
private javax.swing.JTextField numIn;
private javax.swing.JTextField textIn;
// End of variables declaration//GEN-END:variablesThe problem of the change in the form not being comitted is that
I forgot SwingUtilities.invokeLater(makeChanges); in the bottom
part in public void propertyChange(java.beans.PropertyChangeEvent evt)
after having created a new Runnable.
Changes to the UI often have to be comitted by SwingUtitlities.invokeLater()
though I don't know that much about Swing yet.
Thanks to everybody who tried to solve that problem.
Benjamin -
Query response time takes more time when calling from package
SELECT
/* UTILITIES_PKG.GET_COUNTRY_CODE(E.EMP_ID,E.EMP_NO) COUNTRY_ID */
(SELECT DISTINCT IE.COUNTRY_ID
FROM DOCUMENT IE
WHERE IE.EMP_ID =E.EMP_ID
AND IE.EMP_NO = E.EMP_NO
AND IE.STATUS = 'OPEN' ) COUNTRY_ID
FROM EMPLOYEE E
CREATE OR REPLACE PACKAGE BODY UTILITIES_PKG AS
FUNCTION GET_COUNTRY_CODE(P_EMP_ID IN VARCHAR2, P_EMP_NO IN VARCHAR2)
RETURN VARCHAR2 IS
L_COUNTRY_ID VARCHAR2(25) := '';
BEGIN
SELECT DISTINCT IE.COUNTRY_ID
INTO L_COUNTRY_ID
FROM DOCUMENT IE
WHERE IE.EMP_ID = P_EMP_ID
AND IE.EMP_NO = P_EMP_NO
AND IE.STATUS = 'OPEN';
RETURN L_COUNTRY_ID;
EXCEPTION
WHEN OTHERS THEN
RETURN 'CONT';
END;
END UTILITIES_PKG;
when I run above query its coming in 1.2 seconds.but when comment subquery and call from package its taking 9 seconds.query returns more than 2000 records.i am not able to find the reason why it is taking more time when calling from package?You are getting a different plan when you run it as PL/SQL most likely. Comment your statement:
SELECT /* your comment here */then find them in V$SQL and get the SQL IDs. You can then use DBMS_XPLAN.DISPLAY_CURSOR to see what is actually happening.
http://www.psoug.org/reference/dbms_xplan.html -
Is it possible to call diff report queries when called from form
hello all
I want to know if it is possible to call different report queries when called from oracle 9i form .
i tried to use he
SET_REPORT_OBJECT_PROPERTY(REPORT_QUERY = 'q_diff' )
option and actualy called the report name
but it dint seem to work !!!
also is it possible to chng the title of the browser at runtimeSandeep,
this property is used with passing Record Groups as data parameters from Forms.
Passing the query name indicates that the values contained in the record group substitutes the result of the named query. This may work in client/server Reports, but it definitively doesn't work on teh Web because you can't pass a Record Group as a data parameter in this environment.
Te problem with changing a Reports query is that you must meet the same number of columns and column types as they exist in the Report. I didn't spend much time with XML based runtime customization in Reports. I think that you can change the Reports query through this feature. In Forms you would create the XML file using text_io and the merge it with an existing Reports. I never did this before. So it could be that all I am saying does not work in the end. Before following this idea, you may better ask in teh Reports forum on OTN if it is possible to use the runtime customization feature to modify the Reports query.
Fran -
SESSION EXPIRED and CPU Utilisation is 100% when called from Pro*C
Dear Colleague
We are having a production system developed using Pro*c and PL/SOL packages in HP Unix.
The system is doing the following,
A file will be decoded using Proc and data will be load into 3 temporary tables (permanent table used for temporary) using SQLLoader. Then it calls a PL/SQL package which will process the data in the temporary tables and will store the summary information in Transaction table and will returns a unique id to the calling Pro*c module. The whole process is completed in a single process/oracle session.
The PL/SQL package, join the 3 Temporary tables and retrieve the data into an Oracle object(Collection) and process it. Then the processing summary will be loaded into Transaction table and return the Primary key.
Now the problem is, when the temporary tables are loaded with more than 200,000 rows, in some cases the system is running for hours before it finish. And during the process the session shows as EXPIRED in the database and CPU utilization for the respective ProcessId in Unix is almost 100%. Then after a while the session comes alive and finishes the process.
And for some other cases, with same row count, the entire process finished in seconds.
If the same process (PL/SQL package) when run directly using a separate session inside the database(and the temporary tables are still available), rather than calling from Pro*c, it finishes in seconds, where it took hours when called from Pro*c.
It will be highly appreciated, if anyone let me know, what actually is wrong. whether it is the resource allocation or should there any known problem in calling huge PL/SQL packages from Pro*C.
we are using Oracle 10g and HP-UX ed42 B.11.31 U System.
regards
SajidDear Colleague
I just want to rephrase the problem again.
We have a Pro*C application. This will read the binary file and dump the data in ascii format to a data file. Then, within from the pro*C, 14 Dynamic tables will be created using EXEC SQL EXECUTE IMMEDIATE statement, each having almost a maximum of 45 columns. Also, created INDEXES to the tables in the same way from Pro*C.
And Control file will be created as follows
OPTIONS (SILENT=(FEEDBACK)) UNRECOVERABLE
LOAD DATA
INTO TABLE FILENAME_BCI_USED
FIELDS TERMINATED BY '|'
TRAILING NULLCOLSColumns Listed
Then Sql loader will be called using system commands (from pro*C itself) to loead the data into the table, as follows.
sprintf(syscommand,"sqlldr %s CONTROL=%s DATA=%s log=%s rows=5000 direct=true", glb_connect_string,ctl_file,data_file, log_file );
ret_value = system(syscommand);data loaded successfully.
Then the Pro*C will call a PL/SQL package for processing the data.
The PL/SQL package, to process the data, dynamically construct the below query and use it for the reference cursor to retrieve data and load into a collection.
v_sql_query := 'SELECT '|| '/*+ index(b '||p_File_Name ||'_1) index(b '||p_File_Name ||'_2) index(s '||p_File_Name ||'_3) index(s '||p_File_Name ||'_4) index(s '||p_File_Name ||'_5) index(s '||p_File_Name ||'_6) index(e '||p_File_Name ||'_7)*/' || '
iot_call_record(b.rec_no ,
b.rec_type ,
substr(b.field1,1,15) ,
nvl(substr((select s0.field1 from ' || SU_Table ||
' s0 where s0.rec_no = s.rec_no and s0.sub_rec_type = 203) ,1, 25),
substr(b.field2, 1, 25)),
substr(b.field3,1,25) ,
b.field4 ,
b.field5 ,
s.field1 ,
s.field2 ,
(select sum(s1.field1) from ' || SU_Table ||
' s1 where s1.field2 = s.rec_no and trim(s1.field2) = ''00'' ) ,
s.field3 ,
e.field2/power(10,e.field3) ,
s.field4 ,
s.field5 ,
s.field6 ,
s.field7 ,
s.field8 ,
s.field9 ,
s.field10 ,
nvl(b.field6,''F'') ,
NULL ,
s.field11 ,
(select sum(s2.field11) from ' || SU_Table || ' s2 where s2.rec_no = s.rec_no) ,
NULL)
FROM ' || BCI_Table || ' b , ' || SU_Table || ' s, ' || EXCH_Table ||
' e WHERE b.filename = s.filename
AND b.rec_no = s.rec_no
AND (b.field7 = 0 OR b.field7 = 1)
AND TRIM(s.chg_type) = ''00''
AND (s.field1 = e.field2_Code )
AND not(s.field4 = ''V'' and s.field12 > 1)
AND not(s.field4 = ''W'' and s.field12 > 1)
AND not(b.rec_type = 75 and s.field12 > 1)
AND not(b.rec_type = 75 and s.field4 =''D'')
AND s.sub_rec_type <> 203
and (s.field12 = 1 or b.rec_type not in (20,30))';
OPEN cur_call_events FOR v_sql_query;
LOOP
g_tab_call_events.DELETE;
-- Execute immediate v_sql_query bulk collect into g_tab_call_events;
FETCH cur_call_events BULK COLLECT
INTO g_tab_call_events limit 5000;
EXIT WHEN g_tab_call_events.COUNT = 0;
BEGIN
SAVEPOINT Block_Begin;
process_records(p_file_name,
g_tab_call_events);
EXCEPTION
WHEN Severe_Error THEN
Write_error('S');
ROLLBACK TO Block_Begin;
WHEN Warning THEN
Write_error('W');
WHEN NO_DATA_FOUND THEN
Write_error('S');
ROLLBACK TO Block_Begin;
END;
END LOOP;And the above module is behaving strangely.
With almost 150K or more rows in BCI_Table & SU_Table each and less than 10 rows in EXCH_Table, the application takes more than 100 minutes to complete the process.
When we checked the session activity, it is showing the same query for a very long time.
Where as files with 100K or less rows are getting processed in a minute.
And the performance for 150K+ rows is inconsistent, that when we isolate the package and run it directly calling from oracle, it is getting executed in less than 4 minutes. Whereas it takes 100+ minutes from Pro*C.
The execution plan for the above query is given below
Object Owner Object Name Cost Cardinality Bytes CPU cost IO cost
SELECT STATEMENT, GOAL = HINT: FIRST_ROWS 494 2497 494406 143334576 483
TABLE ACCESS BY INDEX ROWID SCHEMA1 FILENAME_SU_USED 4 1 21 30610 4
INDEX RANGE SCAN SCHEMA1 FILENAME_3 3 1 21764 3
SORT AGGREGATE 1 13
INDEX RANGE SCAN SCHEMA1 FILENAME_5 3 1 13 22064 3
SORT AGGREGATE 1 7
TABLE ACCESS BY INDEX ROWID SCHEMA1 FILENAME_SU_USED 4 1 7 30706 4
INDEX RANGE SCAN SCHEMA1 FILENAME_3 3 1 21764 3
CONCATENATION
HASH JOIN 355 2496 1307904 103068617 347
TABLE ACCESS FULL SCHEMA1 FILENAME_EXCH_USED 3 2 26 35987 3
HASH JOIN 352 2496 813696 96532618 344
VIEW SYS VW_NSO_1 4 20 880 12549326 3
HASH UNIQUE 4 20 220 12549326 3
TABLE ACCESS FULL SCHEMA2 IOT_SERVICE_MATRIX 3 20 220 45207 3
HASH JOIN 347 15850 2234850 76145180 341
TABLE ACCESS FULL SCHEMA1 FILENAME_SU_USED 130 16584 1111128 33625872 127
TABLE ACCESS FULL SCHEMA1 FILENAME_BCI_USED 217 23757 1758018 31405896 214
NESTED LOOPS 139 1 198 40265959 136
NESTED LOOPS 135 1 154 27716633 133
NESTED LOOPS 132 1 141 27680646 130
TABLE ACCESS FULL SCHEMA1 FILENAME_SU_USED 129 1 67 27655992 127
TABLE ACCESS BY INDEX ROWID SCHEMA1 FILENAME_BCI_USED 3 1 74 24654 3
INDEX RANGE SCAN SCHEMA1 FILENAME_1 2 1 15493 2
TABLE ACCESS FULL SCHEMA1 FILENAME_EXCH_USED 3 1 13 35987 3
VIEW SYS VW_NSO_1 4 1 44 12549326 3
SORT UNIQUE 4 20 220 12549326 3
TABLE ACCESS FULL SCHEMA2 IOT_SERVICE_MATRIX 3 20 220 45207 3Regards
Sajid
Edited by: user12039545 on Jul 11, 2010 12:05 AM
Edited by: user12039545 on Jul 11, 2010 12:15 AM
Edited by: user12039545 on Jul 11, 2010 12:32 AM
Edited by: user12039545 on Jul 11, 2010 12:34 AM
Edited by: user12039545 on Jul 11, 2010 12:37 AM -
Advanced table:not able to view more than 10 rows when called from workflow
Hi everyone,
I'm calling a page that contains advanced table and its controller class from two places.
First one is from a inquiry form, when this page is called it works fine. when there are more than 10 rows, first 10 are shown on page render and when we click on Next link, other rows are shown. This is becuase I have given the records displayed property on adavanced table = 10. I'm fine till here.
Second one is I'm calling this page again from a workflow notificaiton. There is a link called view more details on the workflow notification , click of this link will open the page with 10 records displayed. But when user tries to click on Next it doesn't work. It just doesn't refresh.
Its very wierd,. not able to understand what could be wrong when calling from wf notificiton. Its the same page and conroller code used in both the places.
Please help me!!
Thanks
SunnyThanks for your response Kristofer. You are correct, there was a difference in the parameters and the issue is resolved now.
-
Do I need an online number to get a call from some...
Hello,
Do I need an online number to get a call from someone in Europe who is calling from their computer?Hey the question is what you want to do Sir.
Skype bare and free provides you means to talk voice and video from the application with all your friends who have Skype too on their side. Though you need to connect with them first. Add them manually or through some importing to your contact. There you have the basic capability.
Then you can add with credit or subscription (I personally think that the subscriptions now with 50% off yearly are absolutely great) a few services.
1. Outgoing voice calls to real numbers. They have plans for landlines and mobile with diff prices for diff countries. Again check the promos now for good deals.
2. Incoming voice calls from real numbers when you buy the online number. Alas its not available for all countries yet.
3. You can set your ID so when you call / outgoing voice, people can recognize you.
4. To go number that can let you call long distance and abroad as local call.
And more I guess.
I find their outgoing call quality as unparalleled to any other provider. Call quality from Canada to Israel is usually on par as land line and superior to Bell. -
Java works stand alone does not when called from PL/SQL
I have this piece of code, which works as a standalone program: It takes in the en_var and returns a path.
But it wont work when called from a store procedure the line of code p = rt.exec("echo "+envar); returns a path as a standalone program returns null when called from a Oracle store procedure.
Thanks for any help just going around and round in circles.
import java.util.*;
class translate
public static String translatePath(String envar)
Runtime rt = Runtime.getRuntime();
int bufSize = 4096;
byte buffer[] = new byte[bufSize];
String path = null;
Process p = null;
String os = null;
String name = null;
String home = null;
String dir = null;
SecurityManager sm = null;
int len = 0;
try
System.out.println("Calling echo "+envar);
os = System.getProperty("os.name");
name = System.getProperty("user.name");
home = System.getProperty("user.home");
dir = System.getProperty("user.dir");
sm = System.getSecurityManager();
p = rt.exec("echo "+envar);
BufferedInputStream bis = new BufferedInputStream(p.getInputStream());
while ((len = bis.read(buffer, 0, bufSize)) != -1)
System.out.write(buffer, 0, len);
path = new String(buffer);
//p.waitFor();
bis.close();
return path;
catch(Exception e)
System.out.println("Exception "+e);
return "ProcessProblem";
//path = "/rims/live/log";Still cant get it to work, it doesnt fall over anymore, but when I input $PATH, it will output $PATH instead of the path for $PATH i.e /rims/live: What does your program output please:
Here is my code:
import java.io.*;
import java.util.*;
class translate
public static String translatePath(String envar)
Runtime rt = Runtime.getRuntime();
Process p = null;
String echoOutput = null;
int len = 0;
try
System.out.println("Calling echo "+envar);
p = rt.exec(new String[]{"/bin/echo",envar});
InputStreamReader isr = new InputStreamReader(p.getInputStream());
BufferedReader br = new BufferedReader(isr);
echoOutput = br.readLine();
br.close();
isr.close();
return echoOutput;
catch(Exception e)
System.out.println("Exception "+e);
return "ProcessProblem";
//path = "/rims/live/log";
Thanks for all your help so far.
Tony -
The problem by hearing my voice when calling from iMAC
I use the latest version of OS X and iOS on all my devices (OS X and iOS 8.1.1 10.10.1). The receiving calls through iPhone 5 have a problem with hearing my voice when calling from iMAC. When make incoming, but also outgoing call through iPhone5 on my iMac, I can hear the caller, but he can not hear me, although tilde see sound when I speak to your iMac.
When the call using my iMac I can hear the caller, but he's not me.
MacBook Air while everything works smoothly, there hear me. You do not know me with this please help?
ThanksYes, my microphone works correctly, f.e. skype, record spund for my videos... no problem with microphone on my iMAC
Maybe you are looking for
-
My Windows 7 Professional desktop system hard disk got corrupted and I took the opportunity to install an SSD for a new system disk and reinstall Windows. The system is up and running on the SSD, with my old system disk now used for storage as it is
-
I type a letter and it does not show when I'm on a website
-
Assigning of excess sequence to condition and adding New condition in Prici
Hi, We have different pricing procedure for our baisc price present there is no excess sequence assign to it now as per our requirement i have created a new contion table and have assign that to a excess sequence I want to know is there any pr
-
HT1451 import playlist in itunes 11
How do I import a playlist from my iphone 4s to iTunes 11?
-
I use two different IMPORT settings - one for ripping CDs (high quality for best sound) and another for turning WAV files into downloadable spoken word files (for sale through our store). Any way to set up pre-sets? OR some easy way to switch betwee