BAPI LSO_TRAINING_GET_DETAIL_C and output parameter LEARNERID_OUT (+)
Good day. I've create a model for BAPI LSO_TRAINING_GET_DETAIL_C. It has an output parameter LEARNERID_OUT. This parameter is defined as "VALUE(LEARNERID_OUT) TYPE LSO_LEARNER_C-LEARNERID". When I run the programm from SE37 it returns e.g. 02212345 (it's a PERNR).
But when I run it from Dynpro Java it returns a string "DDIC". How can I get an integer value not a string?
Hi,
You should get same value at both the places for the same input. Just assure that you are looking at the same attribute at both the places.
Regards,
Murtuza
Similar Messages
-
Custom action with XML type input and output parameter.
Hi,
I want to develop custom action with xml type input and/or output parameter.
Is there sample code for java side. How is the definition of input and/or output parameter and set/get methods?
does it need special .jar file to develop custom action like this?
Thanks.Cemil - yes, you can use XML data types. Use the class
com.sap.lhcommon.xml.XMLDataType
for your parameter type. Here is a snippet from a custom action we use to log XML (instead of just returning the #text node like the default logger does):
public class XMLLogger extends ActionReflectionBase
private String source;
private String eventType;
private String textMessage;
private XMLDataType xmlMessage;
public XMLLogger()
log = new Logger("UserLog");
source = DEFAULT_SOURCE;
eventType = TYPE_INFO;
textMessage = "";
xmlMessage = new XMLDataType();
public XMLDataType getXmlMessage()
return xmlMessage;
public void setXmlMessage(XMLDataType xmlMessage)
this.xmlMessage = xmlMessage;
public void Invoke(Transaction transaction, ILog ilog)
StringBuffer sb = new StringBuffer();
sb.append('[');
sb.append(source);
sb.append("] ");
sb.append(textMessage);
sb.append(XMLUtils.convertXmlToString(xmlMessage));
XMLUtils is a helper class we wrote - it's just a bunch of standard Java XML boilerplate code. The important part you need to know is XMLDataType.getDocument() will return an org.w3c.dom.Document.
I hope that was enough information to help.
-tim -
SSIS: How to use one Variable as Input and Output Parameter in an Execute SQL Task
Hello,
i need your help,I'm working on this issue since yesterday and have no idea how to deal with it.
As I already said in the tilte i want to start a stored procedure via a Execute SQL Task which has around 15 prameters. 10 of these should be used as input AND output value.
As an example:
i have three Variable:
var1 int 2
var2 int 100
var3 int 200
the stroed procedure:
sp_test
@var1 int
@var2 int output
@var3 int output
AS
BEGIN
SET @var2 = @var2 * @var1
SET @var3 = @var3 + @var1
END
So in the Execute SQL Task i call the Stored Procedure as follwos:
Exec sp_test @var1 = ?, @var2 = ? output, @var3 = ? output
(I use an OLE DB Connection)
The parameter mapping is as follows:
User::Var1 input numeric 0 -1
User::Var2 input/output numeric 1 -1
User::Var3 input/output numeric 2 -1
Now my problem. If i set Var2 and Var3 as Input parameter the values are still the same after running the package. If i set them to a output value the are both Null because the procedure doesnt get any values.
I already tried to list them a second time - like
User::Var2 input numeric 1 -1
User::Var2 output numeric 1 -1
or i use a new variable
User::Var2 input numeric 1 -1
User::Var2Return output numeric 1 -1
but i alwas get the error
"Multiple-step OLE DB operation generated errors. Check each OLE DB status value, if available. No work was done."
Has anybody an idea how I can solve this problem?
Thanks a lot.
Kind Regards,
AliceHi Alain,
thx for your answer.
I have around 15 procedures called one after the other to calculated and modify my values. Each procedure is responsible for an other but overlapping set of variables. So i thought it would be a good idea to call them one after the other with the needed variables via a execute sql task.
So if i use a result set, how i get my stored procedure to return 10 values? I would have to use a Function instead of a procedure, wouldn't i?
As if i have 15 procedures this would be a lot of work.
But thanks a lot for the idea. I think an other idea would be to create one function which calls all stored procedures and returns all the calculated values as a result set, wouldn't it?.
Kind Regards.
Alice -
Input and output parameter for subpanels
Hi,
i'm creating a measurement configuration tool within LabVIEW and i want
to use subpanels for the several inputs/outputs (analog, digital...).
The configuration data is hold within a data storage (variant) and
contains all needed configuration parameters. Now i placed a subpanel
control and needed stuff inside the block diagram of the wizard and i'm
able to run it. Changes i made in that subpanels are lost currently
because i'm not able to retrieve the output (connector) of the selected
subpanel.
Is there a way to exchange data over the connectors of the vi or do i
have to use global variables in such a case? I hope i can avoid this.
Thanks
HenrikSee the example in this recent posting. To get data from a subpanel, use Get Control Value or Get Control Value [Variant].
-
Problem with Output parameter in HR function
Hi,
I have a function "Z" done with tx PE04, the country it's venezuela, and i define the IT table as entry and output parameter.
When i run the payroll, ithe changes that i did by abap code in order to change one concept of the IT table doesn't appears in the log. I do this in others versions of sap and works... I working with SAP ECC 6.0.
Thanks,
Albio.-Hi,
This function it's not of the transaction se37, it was created using the transaction pe04, there are two types of parameters entry and output for the payrolls' log.
I have created several functions with pe04, and never this happened.
Thanks in advance.
Albio.- -
Oracle VarChar for ADO Output Parameter
I have a VB6 app on XP that uses OLE DB and ADO to access data from Oracle. I am trying to create and append and output parameter to my SQL command. The output parameter is of type VarChar in Oracle. I tried to choose adChar, adVarChar, adLongVarChar for this Output parameter type, but I keep getting "3708 Parameter object is imoproperly defined." error.
What should be right mapping from ADO's DataTypeEnum to Oracle's VarChar???I'm not up on the latest, but, the last time I looked at it, we were supposed to use VARCHAR2, not VARCHAR.
Anyhow, I use VB6 and ADO all the time ... usually with MSDAORA or ODBC, but, regardless, I use adVarChar and have never had a problem with it. You might check to make sure your Size is big enough. I usually just use 255 for Size. I haven't used an OUT parameter in a while, but you might try initialized your parameter value to String(" ", 255) or the like.
Good luck. -
How to check for null value of output parameter?
Hi guys, I get a test procedure with 2 output parameters and do nothing:
CREATE OR REPLACE PACKAGE BODY p_parameters_test AS
PROCEDURE p_null_output_basetype(p1 OUT NUMBER,p2 OUT VARCHAR2)
AS
BEGIN
DBMS_OUTPUT.PUT_LINE('DO NOTHING');
END p_null_output_basetype;
END;And I have below C# code:
cmd.CommandText = "p_parameters_test.p_null_output_basetype";
OracleParameter p1 = new OracleParameter("p1", OracleDbType.Decimal, System.Data.ParameterDirection.Output);
OracleParameter p2 = new OracleParameter("p2", OracleDbType.Varchar2, System.Data.ParameterDirection.Output);
cmd.Parameters.Add(p1);
cmd.Parameters.Add(p2);
try
conn.Open();
cmd.ExecuteNonQuery();
if (p1.Value==null)
Console.WriteLine("p1.Value==null");
else if (Convert.IsDBNull(p1.Value))
Console.WriteLine("Convert.IsDBNull(p1.Value)");
else
Console.WriteLine("p1 else "+p1.Value);
if (p2.Value==null)
Console.WriteLine("p2.Value==null");
else if (Convert.IsDBNull(p2.Value))
Console.WriteLine("Convert.IsDBNull(p2.Value)");
else
Console.WriteLine("p2 else "+p2.Value);
Console.WriteLine("finished");
catch......The output of it is:
p1 else null
p2 else null
Does anyone have any idea why it always goes to the 'else' of the condition-branching, and how can I check if the output parameter is null?
Thanks in advance.Morven... I ran into similar problems. Maybe you've found a solution of your own by now, but here's what I've learned...
The Value property of output parameters, like p1 and p2 in your code, actually varies, according to (I think) the OracleDbType of the parameter. You've got OracleDbType.Decimal for p1 and OracleDbType.Varchar2 for p2. These look about right, since they match the parameter types in your actual stored procedure.
After cmd.ExecuteNonQuery() executes, the respective Value properties of p1 and p2 are actually of different types. For p1, it's going to be "OracleDecimal" and for p2 it's "OracleString". Keep in miind that these are the types of the Value property of the OracleParameter objects, not the OracleParameter objects themselves.
OracleDecimal and OracleString (and some other types like OracleDate, etc.) have an "IsNull" property you can use if you cast the Value property to its runtime type...
if ((OracleDecimal)cmd.Parameters["p1"].Value).IsNull) { …do something… }
else { …do something else… }
Or maybe something like this...
Decimal p1val = ((OracleDecimal)cmd.Parameters["p1"].Value).IsNull ? 0 : ((OracleDecimal)cmd.Parameters["AVG_SALARY"].Value).Value;
I'll admit that expressions like this: ((OracleDecimal)cmd.Parameters["AVG_SALARY"].Value).Value look a little weird. But the "Value" of the "OracleDecimal" property is a regular .NET decimal type (System.Decimal). So, it's a "Value" of the "Value" property of the OracleParameter class.
Even when the stored procedure returns a null, the Value property is still populated. In the case of p1, it's populated with an OracleDecimal object (actually a struct) where IsNull is true. That's why "p1.Value==null" tests false.
From what I can see, OracleDecimal, OracleString, etc. will never be typed as DbNull, or DBNull.Value. So, that would be why Convert.IsDBNull(p1.Value)) always returns false. btw, it appears that these are Value types. That would suggest that coding something like like this, should be avoided…
OracleString p2val = ((OracleString)cmd.Parameters["p2"].Value;
if (p2val.IsNull) { …do something… }
else { …do something else… }
By assigning the value to another variable, you’d be actually creating an entire copy of the OracleString structure, which is pointless.
I hope that helps
Edited by: 897674 on Jan 3, 2012 10:44 AM
Edited by: 897674 on Jan 3, 2012 10:46 AM -
NET8의 LOGGING AND TRACE관련 PARAMETER에 대한 Q & A
제품 : SQL*NET
작성날짜 : 1999-07-30
NET8의 LOGGING AND TRACE관련 PARAMETER에 대한 Q & A
==================================================
PURPOSE
NET8의 LOGGING AND TRACE관련 PARAMETER에 대해 알아 보도록한다
Explanation
1. NET8에서 trace를 왜 사용하고 어떤 component들에 trace를 할 수 있나요 ?
Trace의 특징은 네트워크을 수행하게 될때 network event들을 기술한다
즉 trace와 관련된 일련의 문장들이 자세하게 생성된다.
"Tracing"의 운영으로 log파일에 제공되어 있는 것 보다 NET8의 component들의
내부적인 정보를 보다 많이 얻을 수 있다.
이러한 정보는 에러의 결과로 인하여 발생하는 동일한 event들로 파일들에
결과가 생성되어 이를 이용하여 문제의 원인을 판단할 수 있다.
주의 : trace의 기능을 이용하는 경우 충분한 disk space와 system
performance의 현격한 저하를 가져올 수 있다.
즉 trace의 기능은 반드시 필요할 경우에만 사용할 것을 권한다.
Example
Reference Ducumment
<< trace의 기능을 이용하여 trace를 할수 있는 component들 >>
* Network listener
* Net8 components on the client and server
* Connection Manager
* Oracle Names Server
* Oracle Names Control Utility
* TNSPING utility
2. 어떤 parameter들을 설정하면 trace 기능을 이용할 수 있는가 ?
tracing을 하기 위해서는 특정 trace parameter들을 설정함으로써 가능하며
아래에 주어진 방법들과 또는 utility들중 하나를 선택하여 설정함으로써
사용할 수 있다.
* Component Configuration Files
* Component Control Utilities
* Oracle Trace
component의 configuration 파일을 이용하여 traceing parameter를 설정하려면
1) component의 configuration 파일에 다음의 traceing parameter를 설정한다.
- SQLNET.ORA for client or server, LISTENER.ORA for listener:
TRACE_LEVEL_<CLIENT/LISTENER/SERVER>=(0/4/10/16)
TRACE_DIRECTORY_<CLIENT/LISTENER/SERVER>=<directory name>
LOG_DIRECTORY_<CLIENT/LISTENER/SERVER>=<directory name>
2) 만일 component들이 수행중인 동안 configuration 파일의 수정이 있었다면
변경된 parameter들을 사용하기 위해 component들을 다시 시작하여야 한다.
component control utility들을 이용하여 trace parameter들을 설정하려면
1) listener의 경우, Listener Control Utility(lsnrctl)에서 TRACE 명령어를
이용하여 listener가 수행중인 동안에도 trace level을 설정할 수 있다.
EX)
RC80:/mnt3/rctest80> lsnrctl
LSNRCTL for SVR4: Version 8.0.4.0.0 - Production on 01-SEP-98 15:16:52
(c) Copyright 1997 Oracle Corporation. All rights reserved.
Welcome to LSNRCTL, type "help" for information.
LSNRCTL> trace admin
Connecting to (ADDRESS=(PROTOCOL=ipc)(KEY=PNPKEY))
Opened trace file: /mnt4/coe/app/oracle/product/8.0.4/network/trace/
lsnr_coe.trc
The command completed successfully
LSNRCTL> trace off
Connecting to (ADDRESS=(PROTOCOL=ipc)(KEY=PNPKEY))
The command completed successfully
LSNRCTL> exit
RC80:/mnt3/rctest80>
2) Oracle Names의 경우, Names Control Utility(namesctl)에서 TRACE_LEVEL
명령어를 이용하여 Oracle Names가 수행중인 동안에도 trace level을
설정할 수 있다.
주의 : Connection Manager의 경우, trace level은 configuration 파일인
CMAN.ORA 에서만 설정할 수 있다.
Oracle Enterprose manager(이하 OEM)에 있는 Oracle Trace는 trace parameter
들을 설정하고 GUI를 통해 trace data의 형태를 볼수 있도록 하는 tracing tool
이다.
3. Trace된 data를 해석할 수 있는 다른 utility들이 있다면 ?
Trace Assistant를 사용하면 사용자의 *.trc 파일 (SQL*Net v2의 형식에 의해
생성된) 또는 *.txt (Orace Trace 과 TRCFMT에 의해 생성된 출력물)을 통해
trac된 정보를 해석할 수 있다.
이 유틸리티 네트워크의 문제들로 인해 발생하는 문제점들을 진단하고
해결하는 데 보다 많은 정보를 제공하여 사용자의 이해를 돕는다.
* the source and destination of trace files
* the flow of packets between network nodes
* which component of Net8 is failing
* pertinent error codes
다음에 주어진 명령어를 수행하므로써 Trace Assistant 실행할 수 있다.
trcasst [options] <filename>
Trace Assistant Text Formatting Options
-o Displays connectivity and Two Task Common (TTC) information.
After the -o the following options may be used:
c (for summary connectivity information)
d (for detailed connectivity information)
u (for summary TTC information)
t (for detailed TTC information)
q (displays SQL commands enhancing summary TTC
information)
-p Oracle Internal Use Only
-s Displays statistical information
-e Enables display of error information After the -e, zero
or one error decoding level may follow:
0 or nothing (translates the NS error numbers dumped
from the nserror function plus lists all
other errors)
1 (displays only the NS error translation from
the nserror function)
2 (displays error numbers without translation)
만일 option들이 제공되지 않는다면 기본적으로 -odt -e -s가 지정되어 자세한
connectivity, Two-Task Common, 에러 level 0 그리고 통계정보들이 tracing
된다.
4. SQL*Net v2 tracing과 어떻게 다른가 ?
Net8 tracing에서는 이전 버전인 SQL*NET V2에서 제공 되는 모든 option을
포함하고 있고 Oracle Trace의 기능이 추가되었다.
이것은 Oracle Trace Repository를 OEM 콘솔을 통하여 사용자의 trace 정보를
관리할 수 있도록 허용한다.
5. *.cdf와 *.dat은 어떤 파일 인가 ?
*.cdf 와 *.dat 파일들은 Oracle Trace에 의해 생성되는 파일들로서 이 파일들을
읽기 위해서는 반드시 trcfmt utility를 이용해야만 한다.
trcfmt는 binary (*.dat와 *.cdf의 확장자) 파일내에 있는 data를 일반text
(.txt의 확장자)로 정보를 추출한다. 이 tool을 사용하기 위해서는 다음의
명령어를 이용하면 된다.
$ trcfmt collection.cdf
주의 : .cdf와 .dat파일이 존재하는 디렉토리가 아닌 곳에서 이 tool을 이용
한다면 path가 포함되야 한다. 만일 하나의 .cdf 와 .dat 파일들내에
여러 프로세스들의 traceing정보가 수집된다면 그것들은 process_id.txt
의 이름과 함께 파일이 추출될 것이다.
6. trac관련 configuration은 어떤 것이 있으며 설정할 수 있는 parameter는
무엇이 있는가 ?
==========================================================================
|| SQLNET.ORA Parameters ||
==========================================================================
DAEMON.TRACE_DIRECTORY
Purpose: Controls the destination directory of the Oracle
Enterprise Manager daemon trace file
Default Value: $ORACLE_HOME/network/trace
Description
Available Oracle Enterprise Manager Installation Guide
Example: DAEMON.TRACE_DIRECTORY=/oracle/traces
DAEMON.TRACE_LEVEL
Purpose: Turns tracing on/off to a certain specified level for
the Oracle Enterprise Manager daemon.
Default Value: 0 or OFF
* 0 or OFF - No trace output
* 4 or USER - User trace information
Available Values
* 10 or ADMIN - Administration trace information
* 16 or SUPPORT - WorldWide Customer Support trace
information
Description
Available Oracle Enterprise Manager Installation Guide
Example: DAEMON.TRACE_LEVEL=10
DAEMON.TRACE_MASK
Purpose: Specifies that only the Oracle Enterprise Manager daemon
trace entries are logged into the trace file.
Default Value: $ORACLE_HOME/network/trace
Description
Available Oracle Enterprise Manager Installation Guide
Example: DAEMON.TRACE_MASK=(106)
LOG_DIRECTORY_CLIENT
Purpose: Controls the directory for where the log file is written
Default Value: Current directory where executable is started from.
Example: LOG_DIRECTORY_CLIENT=/oracle/network/trace
LOG_DIRECTORY_SERVER
Purpose: Controls the directory for where the log file is written
Default Value: Current directory where executable is started from.
Valid in File: SQLNET.ORA
Example: LOG_DIRECTORY_SERVER=/oracle/network/trace
LOG_FILE_CLIENT
Purpose: Controls the log output filename for an Oracle client.
Default Value: SQLNET.LOG
Example: LOG_FILE_CLIENT=client
LOG_FILE_SERVER
Purpose: Controls the log output filename for an Oracle server.
Default Value: SQLNET.LOG
Example: LOG_FILE_SERVER=svr
NAMESCTL.TRACE_LEVEL
Purpose: Indicates the level at which the NAMESCTL program should
be traced.
Default Value: OFF
Values: OFF, USER, or ADMIN
Example: NAMESCTL.TRACE_LEVEL=ADMIN
NAMESCTL.TRACE_FILE
Purpose: Indicates the file in which the NAMESCTL trace output is
placed.
Default Value: namesctl_PID.cdf and namesctl_PID.dat
Example: NAMESCTL.TRACE_FILE=NMSCTL
NAMESCTL.TRACE_DIRECTORY
Purpose: Indicates the directory where trace output from the NAMESCTL
utility is placed.
Default
Value: $ORACLE_HOME/network/trace
Example: NAMESCTL.TRACE_DIRECTORY=/ORACLE/TRACE
NAMESCTL.TRACE_UNIQUE
Indicates whether a process identifier is appended to the
Purpose: name of each trace file generated, so that several can
coexist.
Default
Value: OFF
Values: OFF or ON
Example: NAMESCTL.TRACE_UNIQUE = ON
TNSPING.TRACE_DIRECTORY
Purpose: Control the destination directory of the trace file
Default Value: $ORACLE_HOME/network/trace
Example: TNSPING.TRACE_DIRECTORY=/oracle/traces
TNSPING.TRACE_LEVEL
Purpose: Turns tracing on/off to a certain specified level
Default Value: 0 or OFF
* 0 or OFF - No trace output
* 4 or USER - User trace information
Available Values
* 10 or ADMIN - Administration trace information
* 16 or SUPPORT - WorldWide Customer Support trace
information
Example: TNSPING.TRACE_LEVEL=10
TRACE_DIRECTORY_CLIENT
Purpose: Control the destination directory of the trace file
Default Value: $ORACLE_HOME/network/trace
Example: TRACE_DIRECTORY_CLIENT=/oracle/traces
TRACE_DIRECTORY_SERVER
Purpose: Control the destination directory of the trace file
Default Value: $ORACLE_HOME/network/trace
Example: TRACE_DIRECTORY_SERVER=/oracle/traces
TRACE_FILE_CLIENT
Purpose: Controls the name of the client trace file
Default Value: SQLNET.CDF and SQLNET.DAT
Example: TRACE_FILE_CLIENT=cli
TRACE_FILE_SERVER
Purpose: Controls the name of the server trace file
Default Value: SVR_PID.CDF and SVR_PID.DAT
Example: TRACE_FILE_SERVER=svr
TRACE_LEVEL_CLIENT
Purpose: Turns tracing on/off to a certain specified level
Default Value: 0 or OFF
* 0 or OFF - No trace output
* 4 or USER - User trace information
Available Values
* 10 or ADMIN - Administration trace information
* 16 or SUPPORT - WorldWide Customer Support trace
information
Example: TRACE_LEVEL_CLIENT=10
TRACE_LEVEL_SERVER
Purpose: Turns tracing on/off to a certain specified level
Default Value: 0 or OFF
* 0 or OFF - No trace output
* 4 or USER - User trace information
Available Values
* 10 or ADMIN - Administration trace information
* 16 or SUPPORT - WorldWide Customer Support trace
information
Example: TRACE_LEVEL_SERVER=10
TRACE_UNIQUE_CLIENT
Used to make each client trace file have a unique name to
Purpose: prevent each trace file from being overwritten with the next
occurrence of the client. The PID is attached to the end of
the filename.
Default
Value: OFF
Example: TRACE_UNIQUE_CLIENT=ON
USE_CMAN
If the session is in an Enhanced Discovery Network with a
Purpose: Names Server, this parameter forces all sessions to go
through a Connection Manager to get to the server.
Default
Value: FALSE
Values: TRUE or FALSE
Example: USE_CMAN=TRUE
==========================================================================
|| LISTENER.ORA Parameters ||
==========================================================================
LOG_DIRECTORY_listener_name
Purpose: Controls the directory for where the log file is written
Default Value: Current directory where executable is started from.
Example: LOG_DIRECTORY_LISTENER=/oracle/traces
LOG_FILE_listener_name
Purpose: Specifies the filename where the log information is
written
Default Value: listener_name.log
Example: LOG_FILE_LISTENER=lsnr
TRACE_DIRECTORY_listener_name
Purpose: Control the destination directory of the trace file
Default Value: $ORACLE_HOME/network/trace
Example: TRACE_DIRECTORY_LISTENER=/oracle/traces
TRACE_FILE_listener_name
Purpose: Controls the name of the listener trace file
Default Value: LISTENER_NAME.CDF and LISTENER_NAME.DAT
Example: TRACE_FILE_LISTENER=lsnr
TRACE_LEVEL_listener_name
Purpose: Turns tracing on/off to a certain specified level
Default Value: 0 or OFF
* 0 or OFF - No trace output
* 4 or USER - User trace information
Available Values
* 10 or ADMIN - Administration trace information
* 16 - WorldWide Customer Support trace information
Example: TRACE_LEVEL_LISTENER=10
==========================================================================
|| NAMES.ORA Parameters ||
==========================================================================
NAMES.TRACE_DIRECTORY
Purpose: Indicates the name of the directory to which trace files
from a Names Server trace session are written.
Default
Value: platform specific
Example: names.trace_directory = complete_directory_name
NAMES.TRACE_FILE
Purpose: Indicates the name of the output file from a Names Server
trace session. The filename extension is always.trc
Default
Value: names
Example: names.trace_file = filename
NAMES.TRACE_LEVEL
Purpose: Indicates the level at which the Names Server is to be
traced.
Default Value: OFF
Example: names.trace_level = OFF
NAMES.TRACE_UNIQUE
indicates whether each trace file has a unique name, allowing
Purpose: multiple trace files to coexist. If the value is set to ON, a
process identifier is appended to the name of each trace file
generated.
Default
Value: OFF
Example: names.trace_unique = ON
names.trace_file = names_05.trc
==========================================================================
CMAN.ORA Parameters
==========================================================================
TRACING
Default
Value: NO
Example: TRACING = NO
References
7. listener.log 파일에 loggin정보를 남기지 않게 하는 방법이 있나요 ?
고객이 개발하여 사용중인 application에서 NET8을 이용하여 접속하거나 접속을
종료하는 경우 listener.log에 이와 관련된 정보가 남으며, 수 많은 사용자가
접속을 하게 되므로서 급속하게 listener.log 파일이 커져 $ORACLE_HOME이 있는
file system이 꽉 차서 데이터베이스가 hang이 되는 결과를 초래하는 경우가 있다.
고객들은 listener.log에 write할수 있는 메세지의 양에 제한을 두기를 원하는
경우가 있으나 이러한 기능은 제공되지 않는다. 하지만 listener의 logging은
ON 또는 OFF는 설정을 통해서 가능하다.
Net8에서는 listener.ora에 "LOGGING_(the listener name)=off"를 설정하게
되면 listener의 logging을 멈출 수 있다.
물론 설정후 listener stop후 재기동을 하셔야 변경된 paramerter에 의해
이 기능이 enable됩니다.
참고 : SQL*NET 2.3.x 에서도 이 parameter가 유효한가요 ?
물론 사용이 가능합니다. NET8에서 사용하는 것과 동일하게 parameter를
listener.ora에 설정함으로서 가능합니다.
EX)
LOGGING_LISTENER=OFF
이 parameter는 listener의 전체 logging을 disable하는 parameter로 일부만
여과하여 logging할 수 있는 기능은 아니다.
이 parameter는 NET8에 알려진 parameter로 SQL*NET 2.3.x manuals에 나와
있지는 않지만 정상적으로 사용할 수 있다. -
Hi! I am doing a conversion from MSSQL to Oracle with C++ and MFC ODBC. Any comment is appreciated!! I have Oracle 8i and Oracle ODBC 8.1.6 installed.
My question is how to retrieve the return value AND ALSO the resultSet at the same time by using Oracle function without modifying my souce codes (except puttting mypackage. string infron of my procedure name, see below).
-- My source code in C++ with MSSQL ....
sqlStr.Format("{? = call ListOfCustomers(%i)}", nNameID);
RcOpen = CustomerList.Open(CRecordset::forwardOnly, sqlStr, CRecordset::readOnly );
Where CustoemrList is a Crecordset object...
IN DoFieldExchange(CFieldExchange* pFX) I have ...
//{{AFX_FIELD_MAP(CQOSDB_Group)
pFX->SetFieldType(CFieldExchange::outputColumn);
RFX_Long(pFX, T("Name"), mCustoemrName);
//}}AFX_FIELD_MAP
// output parameter
pFX->SetFieldType( CFieldExchange::outputParam );
RFX_Int( pFX, T("IndexCount"), mCustomerNumber);
-- m_CustomerNumber is where i store the return value!!!
-- In Oracle Version, i have similar codes with ...
sqlStr.Format("{? = call mypackage.ListOfCustomers(%i)}", nNameID);
RcOpen = CustomerList.Open(CRecordset::forwardOnly, sqlStr, CRecordset::readOnly );
-- I have oracle package/Body codes as following...
create or replace package mypackage
as
type group_rct is ref cursor;
Function listgroups(
nameID NUMBER ,
RC1 IN OUT Mypackage.group_rct ) return int;
end;
Create or replace package body mypackage
as
Function listgroups(
NameID NUMBER ,
RC1 IN OUT Mypackage.group_rct )return int
IS
BEGIN
OPEN RC1 FOR SELECT Name
from Customer
WHERE ID = NameIDEND ListGroups;
END
return 7;
END listgroups;
END MyPackage;
Ive simplified my codes a bit....
nullyes, it is exactly what i want to do and I am using Oracle ODBC driver.
I tried using procedure with 1 OUT var fo numeric value and the other IN OUT ref cursor var instead of function, but error occurs when I called it from the application. It give me a memory ecxception error!!
sqlStr.Format("{? = call ListOfCustomers(%i)}", nNameID);
RcOpen = CustomerList.Open(CRecordset::forwardOnly, sqlStr, CRecordset::readOnly );
it seems to me that the ? marker var is making all the trouble... can you please give me any more comment on this?? thanks!
null -
Getting error while Calling Oracle Stored Procedure with output Parameter
HI All,
From long days i am working on this but i unable to solve it.
Even i have studied so many forums in SAP but i didn't find the solution.
I am calling Oracle Store procedure with 3 inputs and 1 output without cursor.
Store Procedure:-
CREATE OR REPLACE PROCEDURE PDS.send_rm
IS
proc_name VARCHAR2(64) := 'send_rm';
destination_system VARCHAR2(32) := 'RAWMAT';
xml_message VARCHAR2(4000);
status_code INTEGER;
status_message VARCHAR2(128);
debug_message VARCHAR2(128);
p_ret INTEGER;
BEGIN
DBMS_OUTPUT.PUT_LINE( proc_name || ' started' );
xml_message := '<RAW_MATERIAL>'||
'<BAR_CODE>10000764601</BAR_CODE>'||
'<MATERIAL>1101448</MATERIAL>'||
'<VENDOR_CODE/>'||
'<PRODUCTION_DATE>0000-00-00</PRODUCTION_DATE>'||
'<EXPIRE_DATE>0000-00-00</EXPIRE_DATE>'||
'<BATCH/>'||
'<PO_NUM/>'||
'<MATERIAL_DESCRIPTION>POWER SUPPLY</MATERIAL_DESCRIPTION>'||
'<SPEC_NAME/>'||
'<STOCK_CODE>BSW-JH</STOCK_CODE>'||
'<INSPECTION_LOT>00</INSPECTION_LOT>'||
'<USAGE_DECISION_CODE/>'||
'<MATERIAL_GROUP>031</MATERIAL_GROUP>'||
'</RAW_MATERIAL>';
dbms_output.put_line('XML '||xml_message);
-- vp_interface.load_rawmat@cnprpt1_pds(SYSDATE, destination_system,
-- xml_message, p_ret);
vp_interface.load_rawmat(SYSDATE, destination_system,
xml_message, p_ret);
dbms_output.put_line('Return Code '||p_ret);
COMMIT;
EXCEPTION
WHEN OTHERS THEN
status_code := SQLCODE;
status_message := SUBSTR(SQLERRM, 1, 64);
-- Extract_Error_Logger(proc_name, 'LOCAL', SYSDATE, -999,
-- status_message, 0, debug_message);
ROLLBACK;
END send_rm;
And while i am calling this Store procedure in MII, I am facing error.
I have tried different ways but didnt solved
In SQL Query, i kept mode as: FixedQueryOutput
Can anyone tell me or send code for calling above store procedure
And onemore thing, While creating store procedure in Oracle for MII. Do we need to Create output parameter as cursor or normal.
Thanks,
Kind Regards,
Praveen Reddy MHi Praveen
Our wrapper was created because we could not modify the procedure we call (it was not returning a cursor).
CREATE OR REPLACE PROCEDURE CHECK_PUT_IN_USE
(STRCMPNAME in varchar2,
STRSCANLABEL in varchar2,
RCT1 out SYS_REFCURSOR
AS
charDispo Char(1);
charStatus Char(1);
intCatNo Integer;
charCatDispo Char(1);
strCatQual VarChar2(2);
strCatDesc VarChar2(30);
strMsg VarChar2(128);
BEGIN
qa.check_put_in_use@AR(STRCMPNAME,
STRSCANLABEL,
charDispo,
charStatus,
intCatNo,
charCatDispo,
strCatQual,
strCatDesc,
strMsg);
OPEN RCT1
FOR Select charDispo,charStatus,charDispo,charStatus,intCatNo,charCatDispo,strCatQual,strCatDesc,strMsg from Dual;
END;
Hope this helps
Regards
Amrik
then with a FixedQueryWithOutput
call mixar.qasap.wrapper_update_put_in_use('[Param.1]','[Param.2]',[Param.3],?)
Hope this helps. -
Associative Array with more than one field - retrieving as output parameter
Hello,
I'm developing an C# Application that is showing a datagrid with results from a PL/SQL procedure inside a Package.
The .net project is in .net 4 and the DB is an oracle 10g.
I have read the odp.net sample about the associative array. I could successfully pass as an input parameter a string[] and dealing with it inside my PL/SQL procedure.
Now it become more complex to me because I would like to return an associative array defined like this :
TYPE r_FinalExtract IS RECORD
RecordmyTable myTable%ROWTYPE,
Tel1 varchar2(25),
Tel1Libelle varchar2(50),
Tel2 varchar2(25),
Tel2Libelle varchar2(50),
Tel3 varchar2(25),
Tel3Libelle varchar2(50),
Tel4 varchar2(25),
Tel4Libelle varchar2(50),
Tel5 varchar2(25),
Tel5Libelle varchar2(50),
Email1 varchar2(50),
Email1Libelle varchar2(50),
Email2 varchar2(50),
Email2Libelle varchar2(50)
TYPE t_FinalExtract IS TABLE OF r_FinalExtract INDEX BY BINARY_INTEGER;
You can guess my PL/SQL stored procedure is filling this collection.
The spec of my procedure :
PROCEDURE P_SELECTDATA( ptab_ListRef IN t_AssocArrayVarchar2, ptab_Result OUT t_FinalExtract );
Unfortunately, in my .net project, I don't know how to deal with that.
I tryed to add p_Result as an output parameter but you have to define the OracleCollectionType for that parameter and the array type is not the good one because my t_FinalExtract is not a simple array...
I searched over the internet and the only one thread I could find is someone who was doing like me... and finally reply to his own thread 3 months later and said that he had to create CSV lines and return a table of varchar2...
This is what I will do because I'm loosing time for finding the way to do it with my associative array, but if someone has the solution I would be glad to read it.
Thanks in advance.For PL/SQL records, I would recommend using User-Defined Types (UDTs), rather than associative arrays.
You can read more on how to use ODP.NET UDTs here:
http://docs.oracle.com/cd/E20434_01/doc/win.112/e23174/featUDTs.htm#CJAGCAID
Strictly speaking, ODP.NET doesn't support PL/SQL Records per se. Instead, ODP.NET supports building any generic UDT in the Oracle DB, which covers the effective functionality of a Record.
If you want to walk through the process of taking a sample DB UDT, generating a .NET custom class, then passing an instance between DB and application, here's a tutorial that shows you how to do that:
http://www.oracle.com/webfolder/technetwork/tutorials/obe/db/dotnet/userdefinedtypes/userDefinedTypes.htm -
How to call a Stored Procedure with a REF CURSOR output parameter
I am looking forward an example that call a stored function/procedure with a REF CURSOR output parameter and get the result.
In other words, I have a stored function/procedure that execute a SELECT statement using the OCI library and then it could get the values of each column and each row.
I put a code snippet, it have only the main thing to call a simple stored procedure and print the name of each column of the cursor, but I couldn´t to print out the values in the table that call the stored procedure.
I understand that the next step, it is to call a OCIStmtFetch.
How to associate the cursor with the OCIStmtFetch?
If you need more information, only tell me.
I am using ANSI C with HP-UX Operative System (C for HP-UX) and Oracle 10g.
Regards.
Antonio Garcia
/* callOracleSP */
#include <stdio.h>
#include <string.h>
#include <oci.h>
#include <stdlib.h>
char* pConnectChar ="server";
char* pUsernameChar = "user";
char* pPasswordChar = "passwd";
char* sqlCharArray1 = "BEGIN SP_GETCITIES(:s, :c); END;";
int retval;
ub4 parmcnt=0;
ub4 pos2=0;
text *pcoln[20];
ub4 namelen[20];
char state_key[5];
OCIStmt* pOciStatement;
OCIStmt* pOciStatCursor;
OCIError* pOciError;
OCIEnv* pOciEnviron;
OCIServer* pOciServer;
OCISession* pOciSession;
OCISvcCtx* pOciServiceContext;
OCIBind* pOciBind[500];
OCIParam* pOciParam;
int main()
retval = OCIEnvCreate(&pOciEnviron, OCI_DEFAULT, NULL, NULL, NULL, NULL,0,NULL);
retval = OCIEnvInit(&pOciEnviron, OCI_DEFAULT, 0, NULL);
retval = OCIHandleAlloc(pOciEnviron, (void **)&pOciError, OCI_HTYPE_ERROR, 0, NULL);
retval = OCIHandleAlloc(pOciEnviron, (void **)&pOciServiceContext, OCI_HTYPE_SVCCTX, 0, NULL);
retval = OCIHandleAlloc(pOciEnviron, (void **)&pOciStatement, OCI_HTYPE_STMT, 0, NULL);
retval = OCILogon(pOciEnviron,pOciError,&pOciServiceContext,(unsigned char *)pUsernameChar,
strlen(pUsernameChar), (unsigned char *)pPasswordChar, strlen(pPasswordChar),
(unsigned char *)pConnectChar,strlen(pConnectChar));
printf("OCILogon retval=%d\n",retval);
retval = OCIStmtPrepare(pOciStatement, pOciError, (unsigned char *)sqlCharArray1,strlen(sqlCharArray1),
OCI_NTV_SYNTAX, OCI_DEFAULT);
printf("StmtPrepare retval=%d\n",retval);
retval = OCIHandleAlloc(pOciEnviron, (void **)&pOciStatCursor, OCI_HTYPE_STMT, 0, NULL);
retval = OCIBindByPos(pOciStatement,&pOciBind[0], pOciError, (ub4) 1, (void *)&state_key,
(sb4) sizeof(state_key), SQLT_STR, (void *) 0, (ub2 *) 0, (ub2 *)0,(ub4)0, (ub4 *)0, (ub4) OCI_DEFAULT);
printf("BindByPos OCI_HTYPE_STMT retval=%d\n",retval);
retval = OCIBindByPos(pOciStatement,&pOciBind[1], pOciError, (ub4) 2, (void *)&pOciStatCursor,
(sb4) 0, SQLT_RSET, (void *) 0, (ub2 *) 0, (ub2 *)0,(ub4)0, (ub4 *)0, (ub4) OCI_DEFAULT);
printf("BindByPos OCI_HTYPE_STMT retval=%d\n",retval);
strcpy(state_key,"CA");
retval = OCIStmtExecute(pOciServiceContext, pOciStatement, pOciError, (ub4)1, (ub4) 0,
(OCISnapshot *)NULL, (OCISnapshot *)NULL, (ub4) OCI_DEFAULT);
printf("StmtExecute retval=%d\n",retval);
/* How to get the values of the cursor? */
/* Get number of parameters of the Cursor */
OCIAttrGet((void *) pOciStatCursor, (ub4)OCI_HTYPE_STMT, (void*) &parmcnt,(ub4 *) 0,
(ub4)OCI_ATTR_PARAM_COUNT, pOciError);
printf("\nNumber of parameters of the cursor = %d\n",parmcnt);
for (int pos = 1; pos <= (int)parmcnt; pos++)
OCIAttrGet((void *) pOciStatCursor, (ub4)OCI_HTYPE_STMT, (void*) &pos2,(ub4 *) 0,
(ub4)OCI_ATTR_CURRENT_POSITION, pOciError);
retval = OCIParamGet((void *)pOciStatCursor, (ub4)OCI_HTYPE_STMT, pOciError, (void **)&pOciParam,
(ub4) pos );
OCIAttrGet((void*) pOciParam, (ub4) OCI_DTYPE_PARAM,(void*) &pcoln[pos-1],(ub4 *) &namelen[pos-1],
(ub4) OCI_ATTR_NAME,(OCIError *)pOciError );
for (int i = 1; i <=(int)parmcnt; i++)
printf("Column %i\tNAME = %.*s\n",i,namelen[i-1],pcoln[i-1]);
return 0;
This is the script that create the table, insert records and create the stored procedure
CREATE TABLE CITIES (
STATE_CODE VARCHAR2(2) NULL,
CITY_CODE NUMBER(15,5) NULL,
CITY_NAME VARCHAR2(30) NULL
INSERT INTO CITIES(STATE_CODE, CITY_CODE, CITY_NAME)
VALUES('CA', 30, 'SAN DIEGO')
INSERT INTO CITIES(STATE_CODE, CITY_CODE, CITY_NAME)
VALUES('CA', 40, 'SACRAMENTO')
INSERT INTO CITIES(STATE_CODE, CITY_CODE, CITY_NAME)
VALUES('FL', 10, 'MIAMI')
INSERT INTO CITIES(STATE_CODE, CITY_CODE, CITY_NAME)
VALUES('FL', 20, 'ORLANDO')
INSERT INTO CITIES(STATE_CODE, CITY_CODE, CITY_NAME)
VALUES('NY', 10, 'NEW YORK')
INSERT INTO CITIES(STATE_CODE, CITY_CODE, CITY_NAME)
VALUES('NY', 20, 'ALBANY')
INSERT INTO CITIES(STATE_CODE, CITY_CODE, CITY_NAME)
VALUES('CA', 10, 'LOS ANGELES')
INSERT INTO CITIES(STATE_CODE, CITY_CODE, CITY_NAME)
VALUES('CA', 20, 'SAN FRANCISCO')
CREATE OR REPLACE PACKAGE globalPkg AUTHID CURRENT_USER AS
/* The following are T/SQL specific global variables. */
TYPE RCT1 IS REF CURSOR;/*new weak cursor definition*/
END globalPkg;
CREATE OR REPLACE PROCEDURE SP_ADDCITY(
P_STATE_CODE IN VARCHAR,
P_CITY_CODE IN NUMBER,
P_CITY_NAME IN VARCHAR2,
P_RETURN IN OUT NUMBER)
AS
StoO_error INTEGER;
StoO_selcnt INTEGER;
StoO_rowcnt INTEGER;
StoO_errmsg VARCHAR2(255);
BEGIN
StoO_rowcnt := 0;
StoO_error := 0;
StoO_selcnt := 0;
P_RETURN := 0;
INSERT INTO CITIES (STATE_CODE, CITY_CODE, CITY_NAME)
VALUES (P_STATE_CODE, P_CITY_CODE, P_CITY_NAME);
StoO_rowcnt := SQL%ROWCOUNT;
EXCEPTION
WHEN TOO_MANY_ROWS THEN
StoO_rowcnt := 2;
WHEN OTHERS THEN
StoO_rowcnt := 0;
StoO_selcnt := 0;
StoO_error := SQLCODE;
StoO_errmsg := SQLERRM;
IF StoO_error != 0 THEN
BEGIN
P_RETURN := 1;
RETURN;
END;
END IF;
END;
CREATE OR REPLACE PROCEDURE SP_GETCITIES(
STATE_KEY IN VARCHAR,
RC1 IN OUT globalPkg.RCT1)
AS
StoO_error INTEGER;
StoO_selcnt INTEGER;
StoO_rowcnt INTEGER;
StoO_errmsg VARCHAR2(255);
BEGIN
StoO_rowcnt := 0;
StoO_error := 0;
StoO_selcnt := 0;
OPEN RC1 FOR
SELECT STATE_CODE, CITY_CODE, CITY_NAME
FROM CITIES
WHERE STATE_CODE = STATE_KEY
ORDER BY CITY_CODE;
StoO_rowcnt := SQL%ROWCOUNT;
EXCEPTION
WHEN OTHERS THEN
StoO_rowcnt := 0;
StoO_error := SQLCODE;
StoO_errmsg := SQLERRM;
END;
/Hi Mark,
Thanks for your recommendations.
I change the code with OCIDefineByPos, one for each parameter from cursor and then use the OCIStmtFetch.
I don´t receive a error when call OCIDefineByPos, but when I call OCIStmtFetch receive a -1 error number.
What is wrong with the code?
The script is the same.
I need your help!
Best Regards!
Antonio Garcia (Mexico)
This the new code:
#include <stdio.h>
#include <string.h>
#include <oci.h>
#include <stdlib.h>
char* pConnectChar ="ORAC617";
char* pUsernameChar = "C617_005_DBO_01";
char* pPasswordChar = "Tempora1";
char* sqlCharArray1 = "BEGIN SP_GETCITIES(:s, :c); END;";
int retval;
ub4 parmcnt=0;
ub4 pos2=0;
sb2 *c_indp;
text *pcoln[20], *name,*name2;
ub4 namelen[20],len;
ub2 type,size;
char state_key[5];
OCIDefine *pdef;
OCIBind *p_bnd;
ub1 **c_buf;
OCIStmt* pOciStatement; /* Statement handle */
OCIStmt* pOciStatCursor; /* Statement handle */
OCIError* pOciError; /* Error handle */
OCIEnv* pOciEnviron; /* Environment handle */
OCIServer* pOciServer; /* Server handle */
OCISession* pOciSession; /* Session handle */
OCISvcCtx* pOciServiceContext; /* Service Context handle */
OCIBind* pOciBind[500]; /* Bind handle */
OCIParam* pOciParam; /* Param handle */
int OCI_Fetch(OCIStmt *p_select,OCIError *p_err, int *piOcc)
int iOcc, rc;
rc=OCIStmtFetch(p_select,p_err,1,OCI_FETCH_NEXT,OCI_DEFAULT);
printf("rc fetch %i",rc);
if(rc==0&&piOcc!=NULL){
printf("entro al if");
iOcc=*piOcc;
*piOcc=iOcc+1;
return rc;
int main()
int pos,i=0,rc;
retval = OCIEnvCreate(&pOciEnviron, OCI_DEFAULT, NULL, NULL, NULL, NULL,0,NULL);
printf("EnvCreate retval=%d\n", retval);
retval = OCIEnvInit(&pOciEnviron, OCI_DEFAULT, 0, NULL);
printf("EnvInit retval=%d\n",retval);
retval = OCIHandleAlloc(pOciEnviron, (void **)&pOciError, OCI_HTYPE_ERROR, 0, NULL);
printf("HandleAlloc OCI_HTYPE_ERROR retval=%d\n",retval);
retval = OCIHandleAlloc(pOciEnviron, (void **)&pOciServiceContext, OCI_HTYPE_SVCCTX, 0, NULL);
printf("HandleAlloc OCI_HTYPE_SVCCTX retval=%d\n",retval);
retval = OCIHandleAlloc(pOciEnviron, (void **)&pOciStatement, OCI_HTYPE_STMT, 0, NULL);
printf("HandleAlloc OCI_HTYPE_STMT retval=%d\n",retval);
retval = OCILogon(pOciEnviron,pOciError,&pOciServiceContext,(unsigned char *)pUsernameChar,
strlen(pUsernameChar), (unsigned char *)pPasswordChar, strlen(pPasswordChar),
(unsigned char *)pConnectChar,strlen(pConnectChar));
printf("OCILogon retval=%d\n",retval);
retval = OCIStmtPrepare(pOciStatement, pOciError, (unsigned char *)sqlCharArray1,strlen(sqlCharArray1),
OCI_NTV_SYNTAX, OCI_DEFAULT);
printf("StmtPrepare retval=%d\n",retval);
retval = OCIHandleAlloc(pOciEnviron, (void **)&pOciStatCursor, OCI_HTYPE_STMT, 0, NULL);
printf("HandleAlloc OCI_HTYPE_STMT retval=%d\n",retval);
retval = OCIBindByPos(pOciStatement,&pOciBind[0], pOciError, (ub4) 1, (void *)&state_key,
(sb4) sizeof(state_key), SQLT_STR, (void *) 0, (ub2 *) 0, (ub2 *)0,(ub4)0, (ub4 *)0, (ub4) OCI_DEFAULT);
printf("BindByPos OCI_HTYPE_STMT retval=%d\n",retval);
retval = OCIBindByPos(pOciStatement,&pOciBind[1], pOciError, (ub4) 2, (void *)&pOciStatCursor,
(sb4) 0, SQLT_RSET, (void *) 0, (ub2 *) 0, (ub2 *)0,(ub4)0, (ub4 *)0, (ub4) OCI_DEFAULT);
printf("BindByPos OCI_HTYPE_STMT retval=%d\n",retval);
strcpy(state_key,"CA");
retval = OCIStmtExecute(pOciServiceContext, pOciStatement, pOciError, (ub4)1, (ub4) 0,
(OCISnapshot *)NULL, (OCISnapshot *)NULL, (ub4) OCI_DEFAULT);
printf("StmtExecute retval=%d\n",retval);
c_buf=(ub1 **)calloc(sizeof(ub1 *),3);
c_indp=(sb2 *)calloc(sizeof(sb2 *),3);
// Get number of parameters of the Cursor
OCIAttrGet((void *) pOciStatCursor, (ub4)OCI_HTYPE_STMT, (void*) &parmcnt,(ub4 *) 0,
(ub4)OCI_ATTR_PARAM_COUNT, pOciError);
printf("\nNumber of parameters of the cursor = %d\n",parmcnt);
for (pos = 1; pos <= (int)parmcnt; pos++)
OCIAttrGet((void *) pOciStatCursor, (ub4)OCI_HTYPE_STMT, (void*) &pos2,(ub4 *) 0,
(ub4)OCI_ATTR_CURRENT_POSITION, pOciError);
retval = OCIParamGet((void *)pOciStatCursor, (ub4)OCI_HTYPE_STMT, pOciError, (void **)&pOciParam,(ub4) pos );
// Get the column name
OCIAttrGet((void*) pOciParam, (ub4) OCI_DTYPE_PARAM,(void*) &name,(ub4 *) &len, (ub4) OCI_ATTR_NAME,(OCIError *)pOciError );
// Get the column datatype
OCIAttrGet((void*) pOciParam, (ub4) OCI_DTYPE_PARAM,(void*) &type,(ub4 *)0,(ub4)OCI_ATTR_DATA_TYPE,(OCIError *)pOciError);
// Get the column size
OCIAttrGet((void*) pOciParam, (ub4) OCI_DTYPE_PARAM,(void*) &size,(ub4 *)0,(ub4)OCI_ATTR_DATA_SIZE,(OCIError *)pOciError);
printf("Column %i\tNAME = %.*s \ttype %d \tsize %d\n",pos,len,name,type,size);
// OCIDefine ByPos, one for each parameter
// c_buf store the STATE_CODE, CITY_CODE and CITY_NAME columns from the cursor
rc=OCIDefineByPos(pOciStatCursor,&pdef,(OCIError *)pOciError,pos,c_buf[pos-1],size+1,(ub2)type,(dvoid *)c_indp[pos-1],(ub2 *)0,(ub2 *)0,OCI_DEFAULT);
printf("OCIDefineByPos retval=%d\n,rc);
// call OCIStmtFetch. In the next line, I receive the error
rc=OCIStmtFetch(pOciStatCursor,pOciError,1,OCI_FETCH_NEXT,OCI_DEFAULT);
printf("rc fetch %i",rc);
return 0;
{code} -
Pass output parameter from mapping to external process in a Process Flow
In Process flow, how do we pass an Output parameter from a mapping (generated by a post mapping operator) into an external process (shell script)?
I have a mapping that generates an output parameter and I would like to pass this parameter to an external process (a shell script) with a process flow. Is this possible?Hi Norman,
Unfortunately in the current release, you cannot do this. What you can do, is store the value into a table and read it in the external process, or write it into a file and read it from there. The next release will support passing output parameters from one activity to the next.
Thanks,
Mark. -
How to control (the input and output) EXE file after I call it using exec?
Hi,
I knew that I can use runtime.exec() to call one EXE file, and this works. But this EXE has two characteristics:
1. After this exe starts, it asks user to input number such as 1 or 2 onto computer screen, then press return. Then the exe will start the calculation.
2. after it starts calculation, it prints 3 columns of numbers onto the screen.
My two questions are:
1. How to use java to input the number such as 1 or 2 automatically? this EXE can not work like this in DOS command line:
C:> file.exe parameter
The parameter is the number such as 1 or 2 that I wanna input.
2. how to redirect the 3 columns of numbers from computer screen to txt file?
My colleague can solve these two questions using Mathematica. So I know that definitely there is at least one solution for it. I just can not do it using Java. This wierd exe file bothered me a lot and I really wish that I can get help from someone in java community.
Thank you!
TonyWhen you call Runtime.exec, you get a Process object. (I presume something similar happens when you use ProcessBuilder.) Process has methods with names getOutput, getInput, and getError. These correspond to the standard input, standard output, and standard error streams of the spawned process.
You can read and write to the process on the streams corresponding to input and output that the process writes to the console.
[add]
In fact, you should be grabbing and reading the output/error streams anyway, because of the points raised by the Traps article. Google "Java Runtime exec traps" and you'll probably get a link to this JavaWorld article, which describes common Runtime.exec problems and how to solve them.
Edited by: paulcw on Jun 15, 2010 4:09 PM -
Connecting the Sequence Operator to the Mapping Output Parameter?
my OWB Client: 10.2.0.2.8
my OWB Repository: 10.2.0.2.0
I need to obtain a sequence number (from the Sequence Operator), then output it
using the Mapping Output Parameter, if possible.
I have tried two things:
1. Connect Sequence Operator nextval variable to the Mapping Output Parameter.
This generates error:
"Table,View Or Sequence reference 'xx_SEQ.NEXTVAL' not allowed in this
context"
2. Join the Sequence Operator nextval variable with a source table, then
connect a port from the dataflow to Mapping Output Parameter.
This generates error:
"Mapping Input Parameter and Mapping Output Parameter are intended to be
executed before and after the data flow of the mapping and cannot accept
inputs from any part of the data flow."
From what I have seen so far, it appears it may not be possible to use the
Sequence Operator along with the Mapping Output Parameter. If Im wrong, please
let me know of an example of how the Sequence Operator and Mapping Output
Parameter can be connected.
ThanksUser -
Look at adding a Post-Mapping Process to your mapping, there you have a choice of built in functions or custom ones that could return a sequence value for you. You may have to create the sequence outside of OWB ...
TXB
Maybe you are looking for
-
How to submit a conurrent request with MLS attached from PL/SQL?
Hi Friends, I am trying to submit RAXINV_SEL from backend. This one has MLS attached. If we submit it from request window,it fires 'Multilanguage' program first and then the RAXINV_SEL. How to set this MLS option from backend? I tried submitting the
-
I don't like that conversations are linked together in mail. It always scares me that I sent something to someone who it wasn't intended for. Sometimes the conversations are relevant but most of the time one email has absolutely nothing to do with an
-
I have Photoshop CS2 and recently acquired Windows 7. I want to bring images in directly to Photoshop but the images go through Photo Gallery in Windows. I can import them into PS, but i want them to come into PS directly. Also I cannot include im
-
Acrobat 9 - portfolio, collection or combine into one document
I have downloaded the trial of Adobe Acrobat 9 to see if would work for my project. I have about 150-200 PDF documents that I created a portfolio for. It works except I can't figure out how to do an advanced search (I have several FAQ documents tha
-
How do I TRULY remove the CRLF (#) from the last field read in CSV dataset?
Good day, everyone! PLEASE NOTE: I spent most of yesterday searching SDN and reading all kinds of threads on this topic. Yes, I know, there ARE other threads out there regarding this topic, but I spent all of yesterday afternoon trying every soluti