Function return large data
Hi, I know that OUT NOCOPY hint makes procedures return values by reference, but what about return of a function?
And, in general, what about:
array_var:= some_large_array;
Does it always perform copy?
Thanks
So, even in the case of NOCOPY hint, it may not always pass by reference.Quite fair, NOCOPY is ignored in some documented cases.
Do you want some_large_array to reflect the change automatically whenever you make any subsequent changes to array_var?I want to have control over the situation. Aliasing is
a problem when you are not careful, but you cannot simply copy everything in order to avoid aliasing in principal. Besides it already exists in the language ( IN OUT NOCOPY ).
However the discussion is :
is there a way to return the referency by function and to assign the reference? I think not, but ... who knows!
Thanks for the answer Kamal!
Similar Messages
-
Best approach to return Large data ( 4K) from Stored Proc
We have a stored proc (Oracle 8i) that:
1) receives some parameters.
2)performs computations which create a large block of data
3) return this data to caller.
compatible with both ASP (using MSDAORA.Oracle), and ColdFusion (using Oracle ODBC driver). This procedure is critical in terms of performance.
I have written this procedure as having an OUT param which is a REF CURSOR to a record containing a LONG. In order to make this work, at the end of the procedure I have to store the working buffer (an internal LONG variable) into a temp table, and then open the cursor as a SELECT from the temp table.
I have tried to open the cursor as a SELECT of the working buffer (from dual) but I get the error "ORA-01460: unimplemented or unreasonable conversion requested"
I suspect this is taking too much time; any tips about the best approach here? is there a resource with REAL examples on returning large data?
If I switch to CLOB, will it speed the process, be compatible with callers, etc ? all references to CLOB I saw use trivial examples.
Thanks for any help,
Yoram AyalonWe have a stored proc (Oracle 8i) that:
1) receives some parameters.
2)performs computations which create a large block of data
3) return this data to caller.
compatible with both ASP (using MSDAORA.Oracle), and ColdFusion (using Oracle ODBC driver). This procedure is critical in terms of performance.
I have written this procedure as having an OUT param which is a REF CURSOR to a record containing a LONG. In order to make this work, at the end of the procedure I have to store the working buffer (an internal LONG variable) into a temp table, and then open the cursor as a SELECT from the temp table.
I have tried to open the cursor as a SELECT of the working buffer (from dual) but I get the error "ORA-01460: unimplemented or unreasonable conversion requested"
I suspect this is taking too much time; any tips about the best approach here? is there a resource with REAL examples on returning large data?
If I switch to CLOB, will it speed the process, be compatible with callers, etc ? all references to CLOB I saw use trivial examples.
Thanks for any help,
Yoram Ayalon -
What is the best approach to return Large data from Stored Procedure ?
no answers to my original post, maybe better luck this time, thanks!
We have a stored proc (Oracle 8i) that:
1) receives some parameters.
2)performs computations which create a large block of data
3) return this data to caller.
compatible with both ASP (using MSDAORA.Oracle), and ColdFusion (using Oracle ODBC driver). This procedure is critical in terms of performance.
I have written this procedure as having an OUT param which is a REF CURSOR to a record containing a LONG. In order to make this work, at the end of the procedure I have to store the working buffer (an internal LONG variable) into a temp table, and then open the cursor as a SELECT from the temp table.
I have tried to open the cursor as a SELECT of the working buffer (from dual) but I get the error "ORA-01460: unimplemented or unreasonable conversion requested"
I suspect this is taking too much time; any tips about the best approach here? is there a resource with REAL examples on returning large data?
If I switch to CLOB, will it speed the process, be compatible with callers, etc ? all references to CLOB I saw use trivial examples.
Thanks for any help,
Yoram AyalonCreate a new farm in the secondary Data Center at the same patch level with the desired configuration. Replicate the databases using the method of choice (Mirroring, AlwaysOn, etc.). Create a downtime window where you can then attach the databases to the
new farm's Web Application(s)/Service Application(s).
Trevor Seward
Follow or contact me at...
  
This post is my own opinion and does not necessarily reflect the opinion or view of Microsoft, its employees, or other MVPs. -
WCF service connection forcibly closed by the remote host for large data
Hello ,
WCF service is used to generate excel report , When the stored procedure returns large data around 30,000 records. Service fails
to return the data . Below is the mentioned erorr log :
System.ServiceModel.CommunicationException: An error occurred while receiving the HTTP
response to <service url> This could be due to the service
endpoint binding not using the HTTP protocol. This could also be due to an HTTP request context being aborted by
the server (possibly due to the service shutting down). See server logs for more details. ---> System.Net.WebException:
The underlying connection was closed: An unexpected error occurred on a receive. ---> System.IO.IOException:
Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host.
---> System.Net.Sockets.SocketException: An existing connection was forcibly closed by the remote host
at System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags)
at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
--- End of inner exception stack trace ---
at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
at System.Net.PooledStream.Read(Byte[] buffer, Int32 offset, Int32 size)
at System.Net.Connection.SyncRead(HttpWebRequest request, Boolean userRetrievedStream, Boolean probeRead)
--- End of inner exception stack trace ---
at System.Net.HttpWebRequest.GetResponse()
at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout).
--- End of inner exception stack trace ---
Server stack trace:
at System.ServiceModel.Channels.HttpChannelUtilities.ProcessGetResponseWebException(WebException webException, HttpWebRequest request, HttpAbortReason abortReason)
at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)
at System.ServiceModel.Channels.RequestChannel.Request(Message message, TimeSpan timeout)
at System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)
Exception rethrown at [0]:
at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
at IDataSetService.GetMastersData(Int32 tableID, String userID, String action, Int32 maxRecordLimit, Auditor& audit, DataSet& resultSet, Object[] FieldValues)
at SPARC.UI.Web.Entities.Reports.Framework.Presenters.MasterPresenter.GetDataSet(Int32 masterID, Object[] procParams, Auditor& audit, Int32 maxRecordLimit).
WEB CONFIG SETTINGS OF SERVICE
<httpRuntime maxRequestLength="2147483647" executionTimeout="360"/>
<binding name="BasicHttpBinding_Common" closeTimeout="10:00:00" openTimeout="10:00:00"
receiveTimeout="10:00:00" sendTimeout="10:00:00" allowCookies="false"
bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="2147483647" maxBufferPoolSize="0" maxReceivedMessageSize="2147483647"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="2147483647"
maxStringContentLength="2147483647" maxArrayLength="2147483647"
maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
<security mode="None">
WEB CONFIG SETTINGS OF CLIENT
<httpRuntime maxRequestLength="2147483647" requestValidationMode="2.0"/>
<binding name="BasicHttpBinding_Common"
closeTimeout="10:00:00" openTimeout="10:00:00"
receiveTimeout="10:00:00" sendTimeout="10:00:00"
allowCookies="false" bypassProxyOnLocal="false"
hostNameComparisonMode="StrongWildcard" maxBufferSize="2147483647"
maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"
messageEncoding="Text" textEncoding="utf-8"
transferMode="Buffered" useDefaultWebProxy="true">
<readerQuotas
maxDepth="2147483647"
maxStringContentLength="2147483647"
maxArrayLength="2147483647"
maxBytesPerRead="2147483647"
maxNameTableCharCount="2147483647" />Doing binding configuration on a WCF service to override the default settings is not done the sameway it would be done on the client-side config file.
A custom bindng must be used on the WCF service-side config to override the defualt binding settings on the WCF service-side.
http://robbincremers.me/2012/01/01/wcf-custom-binding-by-configuration-and-by-binding-standardbindingelement-and-standardbindingcollectionelement/
Thee readerQuotas and everything else must be given in the Custom Bindings to override any default setttings on the WCF service side.
Also, you are posting to the wrong forum.
http://social.msdn.microsoft.com/Forums/vstudio/en-us/home?forum=wcf -
BAPI_INCOMINGINVOICE_GETDETAIL returns "old" data
Hello,
I have developed some WF which handles incomming invoices but also have some Z tables behind.
I will describe my problem now. One of the tasks opens a secondary screen with tx MIR7, on a primary screen there is a button which reads data from invoice. Steps are:
1. user opens a task - he has a screen with some data
2. wf automaticallly opens a secondary window with MIR7 (so user can switch between two sap windows with e.g. alt+tab)
3. user make some changes in MIR7 and save invoice
4. user click the button in the primary window -> action which reads data from invoice with BAPI_INCOMINGINVOICE_GETDETAIL -> sometimes this function returns "old" data.
Do u know if the data from MIR7 are saved in some update task, or are they buffered, or....? how can i avoid this?
thx,
JJhi..
U have to give vendor invoice number for it to work. The invoice should be posted in MM, if u post in FI this BAPI wont work.
MIR4: In this tcode, you can display the vendor invoice numbers.
MIR5: THIS CODE gives the list of available invoice documents.
Regards,
VIshwa. -
Function returning string. Data type question
Hello all,
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
Our database has a parent record master_member_record_id & and children of those records member_record_id. I wrote a function which returns the master record for the child.
eg. get_master(member_record_id). simple enough.
I have wrote the opposite of this also, get_member_records(master_member_record_id). Obviously this function has multiple records to return so I have it set to return a listagg string with ',' separation. They want to be able to use this function as follows:
select * from member_table where member_record_id in (get_member_records(master_member_record_id));
or something similar, I realize this is a data type issue here, wondering if this is even possible. What do you think?
Thanks in advance for your criticism/help,
ChrisMy disagreement is with how pipeline table functionality is used.
Instead of this (what it sounds like the OP is doing but returning CSV format)
create or replace type TClientIdArray is table of number;
create or replace function GetClientIDs( parentID number ) return TClientIdArray is
array TClientIdArray;
begin
select
client_id bulk collect into array
from master_table
where parent_id = parentID;
return( array );
end;A pipeline would look as follows:
create or replace type TClientIdArray is table of number;
create or replace function GetClientIDs( parentID number ) return TClientIdArray pipelined is
begin
for c in (select
client_id
from master_table
where parent_id = parentID ) loop
pipe row( c.client_id );
end loop;
return;
end;The first method is in fact more sensible in this case, especially when used from PL/SQL. A single SQL call/context switch to get a list of client identifiers. The issues with the first method are
- cannot effectively deal with a large data set of client identifiers
- would be suboptimal to use this function in subsequent SQL
- if called by a client, a ref cursor (not collection) should be returned
But assuming that the list of client identifiers are needed to be stepped through via complex PL/SQL app processing, using a (small) array is fine (assuming that concurrency/locking is not needed via a FOR UPDATE on the select that identifies the client identifiers to process).
A pipeline in this case does not do anything better. It introduces more moving parts - as a native PL/SQL can no longer be used to get the collection and step through it. A TABLE() SQL function is needed, a SQL statement, and more context switching.
The pipeline is simply an unnecessary layer between the code wanting to use the client identifiers and the SQL statement supplying the client identifiers. This approach of SQL -calls-> PIPELINE -calls-> MORE SQL is invariable wrong - unless the pipeline (PL/SQL code) does something very funky with the data from its SQL call, prior to piping it, that cannot be done using SQL.
If the "user" of that client identifiers is SQL code, then both the above methods are flawed. As this code is already SQL, why use PL/SQL to call more SQL code? Simply use the SQL code/logic that supplies the client identifier list directly in the SQL code that needs the client identifiers. This means something like SQL JOIN, EXISTS, or IN clauses. -
How to make a function return number(10,0) data type (ORACLE 10g)?
With 10g, how to make a function return number(10,0) data type?
here is the function, it returns a number type :
create or replace FUNCTION Get_portfolio_Id3 (p_HistObjTable In Varchar2,p_LHISTOBJID IN NUMBER) RETURN view_cpu_STD_Asset.LPORTFOLIOITEMID%Type IS
v_Id view_cpu_STD_Asset.LPORTFOLIOITEMID%Type;
BEGIN
If p_HistObjTable ='amPortfolio'
then v_Id:=p_LHISTOBJID ;
elsIf p_HistObjTable = 'amComputer' then
select litemid into v_Id from smcdba.amComputer c where c.LCOMPUTERID=p_LHISTOBJID ;
else v_Id:=-99;
End If;
RETURN v_Id;
END Get_portfolio_Id3;
Thanks.
Message was edited by:
user631701create or replace FUNCTION Get_portfolio_Id3 (p_HistObjTable In Varchar2,p_LHISTOBJID IN NUMBER) RETURN view_cpu_STD_Asset.LPORTFOLIOITEMID%Type IS
v_Id view_cpu_STD_Asset.LPORTFOLIOITEMID%Type;
BEGIN
If p_HistObjTable ='amPortfolio'
then v_Id:=p_LHISTOBJID ;
elsIf p_HistObjTable = 'amComputer' then
select litemid into v_Id from smcdba.amComputer c where c.LCOMPUTERID=p_LHISTOBJID ;
else v_Id:=-99;
End If;
RETURN round(v_Id);
END Get_portfolio_Id3; -
I get an error when i try to execute a function that returns a date value
Hi,
I'm new in ODP.NET, i'm make a package that contains a function that returns a date i.e.
Package Body General_pkg is
Function Get_Day Return Date is
vd_day date;
Begin
select sysdate into vd_day from dual;
return vd_day;
end Get_Day;
End General_pkg;
i use the next code to execute the function:
OracleCommand cmdData = new OracleCommand("General_pkg.Get_Day", cnx);
cmdData.CommandType = Commandtype.StoredProcedure;
OracleParameter PRM;
PRM = new OracleParameter();
PRM.ParameterName = "VDATE";
PRM.OracleDbType = OracleDbType.Date;
PRM.Direction = ParameterDirection.ReturnValue;
cmdData.Parameters.Add(PRM);
try
cmdData.ExecuteNonQuery();
catch(OracleException e);
When i execute this code, i have and exception, which say "identifier GENERAL_PKG.Get_Day must be declare..."
Obviously the package is correctly created in ORACLE i tested first in sql plus and it works but in ODP.NET they don't recognize the package or the function i don't know... please help!!!OOOOOPSS.... i forgot that i change the user in my conecction string that's why it didn't work...
i guess i had to much beer last night.;. :)
thanks. -
Problem Description:
ODBC functions SQLExecDirectW and SQLExecute functions return error:”DIAG [22001] [Microsoft][SQL Server Native Client 10.0]String data, right
truncation (0) “. When we enable tracing in the ODBC administrator, in the SQL.log we see that values for the arguments: ColumnSize, BufferLength, and StrLen_or_IndPtr of ODBC function SQLBindParameter are not being displayed.
Environment Used:
OS: Microsoft Windows Server 2003 R2 Standard x64 Edition.
Complier: Microsoft Visual Studio 2008 SP1 for x64.
Database: Microsoft SQL Server 2008
MDAC: Microsoft Data Access Components SDK 2.8
Note: This problem is seen only in our 64bit application. However, in 32bit
SQLExecDirectW and SQLExecute functions return successfully.
As we could not find the values of 6<sup>th</sup>, 9<sup>th</sup> and 10<sup>th</sup> arguments(ColumnSize,
BufferLength, and StrLen_or_IndPtr) passed to
SQLBindParameter in the ODBC traces for 64bit, we are not sure whether the values for the above mentioned arguments are received correctly by SQLBindParameter or not. This information would help us to debug further. So, could you please let us know why
these values are not displayed.
1)Here is the extract of the SQL.log file for 32bit where the values for SQLULEN , SQLLEN and SQLLEN* are displayed properly:
PR0CNFG 1028-15f0 ENTER SQLBindParameter
HSTMT 0x006FBDD8
UWORD 1
SWORD 1 <SQL_PARAM_INPUT>
SWORD -8 <SQL_C_WCHAR>
SWORD -9 <SQL_WVARCHAR>
SQLULEN 23
SWORD 0
PTR 0x0595EBBA
SQLLEN 46
SQLLEN * 0x05A5FB00
2)Here is the extract of the SQL.log file for 64bit where the values for SQLULEN , SQLLEN are not displayed properly and
SQLExecDirectW function return error:”DIAG
[22001] [Microsoft][SQL Server Native Client 10.0]String data, right truncation (0) “. :
PR0CNFG a78-fe4 ENTER SQLBindParameter
HSTMT 000000000431D2F0
UWORD 1
SWORD 1 <SQL_PARAM_INPUT>
SWORD -8 <SQL_C_WCHAR>
SWORD -9 <SQL_WVARCHAR>
SQLULEN SQLULEN SWORD 0
PTR 0x0000000005364EFA
SQLLEN SQLLEN
SQLLEN * SQLLEN *
PR0CNFG a78-fe4 EXIT SQLBindParameter with return code 0 (SQL_SUCCESS)
HSTMT 000000000431D2F0
UWORD 1
SWORD 1 <SQL_PARAM_INPUT>
SWORD -8 <SQL_C_WCHAR>
SWORD -9 <SQL_WVARCHAR>
SQLULEN SQLULEN SWORD 0
PTR 0x0000000005364EFA
SQLLEN SQLLEN SQLLEN *Hi Nalsr,
From my research, I found:
"[Microsoft][ODBC SQL Server Driver]String
data right truncation" error may be returned from a call to
SQLBindParameter if the size of the string parameter being used is greater than the size of the column being compared to. In other words if the
string size of the <expression> to the left of the <comparison_operator> is less than the
string size of the <expression> to the
right, ODBC may return this error.
The resolution is to make the string size of the <expression> to the
right of the <comparison_operator> less than or equal to the
string size of the <expression> on the left.
It is difficult to track down this type of problem when third party development applications are being used. ODBC Trace can be used to help determine if this problem is occuring.
Here is an example where the customer has submitted a query "select count(*) from type1 where type1 = ?", type1 is varchar(5) and the
data type being passed by the application is char[9].
Here is the relevant portion of the trace. The following information from the "exit" of SQLDescribeParam
SWORD * 0x0095e898 (12)
UDWORD * 0x0095e880 (5)
Maps to the following with the actual value in parenthesis - SQL_VARCHAR Size 5:
SQLSMALLINT *DataTypePtr
SQLUINTEGER *ParameterSizePtr
The "exit" value from SQLBindParameter provides the following
information:
SWORD 1 <SQL_PARAM_INPUT>
SWORD 1 <SQL_C_CHAR>
SQL Data Type SWORD 12 <SQL_VARCHAR>
Parameter Size UDWORD 5
SWORD 0
Value PTR 0x0181c188
Value Buffer Size SDWORD 5
String Length SDWORD * 0x0181c103 (9)
The string length parameter is the length of the
string being bound to the parameter, in this instance there is a size mismatch which results in the SQLError and the SQLErrorW with the message "[Microsoft][ODBC SQL Server
Driver]String data
right truncation" .
Hope this could be helpful.
Best regards,
Halin Huang -
How to return more data from function
Following is the scenario:
CREATE OR REPLACE TYPE OBJ IS OBJECT
TEST_ID NUMBER(9),
TEST_DESC VARCHAR(30)
CREATE OR REPLACE FUNCTION FN_MY_DATA
RETURN OBJ
AS
OBJ1 OBJ;
BEGIN
OBJ1.TEST_ID := 444;
OBJ1.TEST_DESC := 'FFF';
RETURN OBJ;
END;
I WANT USED VALUE TEST_ID AND TEST_DESC THE EXISTING IN FUNCTION FN_MY_DATA WITH A VARIABLES :
DECLARE
X NUMBER(9);
Y VARCHAR(30);
BEGIN
X := -- VALUE TEST_ID EXISTING IN FN_MY_DATA;
Y := -- VALUE TEST_DESC EXISTING IN FN_MY_DATA;
END;see can oracle function return more than one value
SQL> CREATE OR REPLACE TYPE OBJ IS OBJECT
2 (
3 TEST_ID NUMBER(9),
4 TEST_DESC VARCHAR(30)
5 )
6 /
Type created.
SQL> create or replace
2 FUNCTION FN_MY_DATA
3 RETURN OBJ
4 as
5 --obj1 obj;
6 begin
7 --OBJ1.TEST_ID := 444;
8 --obj1.test_desc := 'FFF';
9 return obj(444,'FFF');
10 end;
11 /
Function created.
SQL> set serveroutput on
SQL> DECLARE
2 X NUMBER(9);
3 y varchar(30);
4 l OBJ;
5 begin
6 l := fn_my_data();
7 dbms_output.put_line(l.test_id || ' ' || l.test_desc);
8 END;
9 /
444 FFF
PL/SQL procedure successfully completed.
SQL> -
hi all,
i am using Forms [32 Bit] Version 6.0.8.24.1 (Production)
Oracle Database 10g Release 10.2.0.1.0 - Production
i am selecting some fileds from some tables for certain condition
for ex:
select a,b,c
from table1
where trunc(col) between from_date and to_date
with the help of cursor i am accessing these selected columns.
the problem is if i run it for small date range(from 01-jan-2009 to 10-jan-2009) its giving the correct result but if i run it for large date range for example 2005 to 2011 i am getting error as ora-302000.
i have written this code in the button in the front end.
what could be the reason behind this?
Please help to sort it out..
Thanks..I appreciate your views. However here is why it works...
The default date format is DD-MON-RR (RR Date Format)
Oracle does an implicit convertion from CHAR to DATE when we specify in this format 'DD-MON-RR'
Here is how it works...
SELECT * FROM EMP WHERE TRUNC(HIREDATE) = '17-DEC-80'This SQL will give me this record from emp table
SQL> SELECT * FROM EMP WHERE TRUNC(HIREDATE) = '17-DEC-80';
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
7369 SMITH CLERK 7902 17-12-1980 800 20Regarding, specifying 2 digits for the year. Oracle is intelligent enough to decode it based on its built-in internal functionality...
Quoting from Oracle Docs..
•If the specified two-digit year is 00 to 49, then
◦If the last two digits of the current year are 00 to 49, then the returned year has the same first two digits as the current year.
◦If the last two digits of the current year are 50 to 99, then the first 2 digits of the returned year are 1 greater than the first 2 digits of the current year.
•If the specified two-digit year is 50 to 99, then
◦If the last two digits of the current year are 00 to 49, then the first 2 digits of the returned year are 1 less than the first 2 digits of the current year.
◦If the last two digits of the current year are 50 to 99, then the returned year has the same first two digits as the current year.To know more about implicit year decoding you can refer this.
Look for The RR Datetime Format Element at this page http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/sql_elements004.htm#SQLRF00210
Regards,
Rakesh
Edited by: Rakesh Desai on Mar 28, 2011 8:11 PM -
Pipelined functions with spatial data
hi,
i've been trying to use pipelined functions (using the TABLE and CAST operators to query data from them) to retrieve large amounts of spatial data.
i've followed the examples on metalink, and they work fine. my problem arises when i apply similar functions to query data using SDO_FILTER, i've been trying to pipe a mdsys.sdo_geometry datatype (ref cursor) into the function - returns null.
are spatial datatypes supported for use in pipelined functions, and using the table and cast operators?
if they are, where can i find further reading/reference on the subject?
thanks
santosh sewlalCheck out http://otn.oracle.com/products/spatial/pdf/mapviewerfaq_31.pdf
or
You can look for a third party solution that can draw maps.
Then you call out to this component from Forms. -
Report- Pl/sql function returning sql query parsing page items as text?
Hi Team,
I am facing a strange issue .
I have four page items namely
1)JOB_CODE
2)MIN_EXP
3) MAX_EXP
4) SOURCES1
I have a report of the type "Pl/sql function returning sql query"
declare
v_sql varchar2(4000);
begin
if (:JOB_CODE IS NOT NULL and :MIN_EXP IS NOT NULL and :MAX_EXP IS NOT NULL and :SOURCES1 IS NOT NULL) then
v_sql:= 'select v_candidate_id, v_fname,v_current_employer,v_Experience_years from candidature where V_REQUIREMENT = :JOB_CODE and v_experience_years >= :MIN_EXP and v_experience_years <= :MAX_EXP and source like ' || '''' || '%'|| ':SOURCES1' || '%' || '''';
elsif (:JOB_CODE IS NULL and :MIN_EXP IS NOT NULL and :MAX_EXP IS NOT NULL and :SOURCES1 IS NOT NULL) then
v_sql := 'select v_candidate_id, v_fname,v_current_employer,v_Experience_years from candidature where v_experience_years >= :MIN_EXP and v_experience_years <= :MAX_EXP and source like ' || '''' || '%'|| ':SOURCES1' || '%' || '''';
elsif (:MIN_EXP IS NULL and :JOB_CODE IS NOT NULL and :MAX_EXP IS NOT NULL and :SOURCES1 IS NOT NULL) then
v_sql := 'select v_candidate_id, v_fname,v_current_employer,v_Experience_years from candidature where v_experience_years <= :MAX_EXP and V_REQUIREMENT = :JOB_CODE and source like ' || '''' || '%'|| ':SOURCES1' || '%' || '''';
elsif (:MAX_EXP is null and :JOB_CODE IS NOT NULL and :MIN_EXP IS NOT NULL and :SOURCES1 IS NOT NULL) then
v_sql := 'select v_candidate_id, v_fname,v_current_employer,v_Experience_years from candidature where V_REQUIREMENT = :JOB_CODE and v_experience_years >= :MIN_EXP and source like ' || '''' || '%'|| ':SOURCES1' || '%' || '''';
end if;
insert into query_list values (v_sql);
insert into debug values (:JOB_CODE , :MIN_EXP , :MAX_EXP , :SOURCES1);
return v_sql;
end;
Please not that I am insertin the query into a table called Query_list and the page item values into the table called Debug thru the pl/sql function which returns teh query.
Now I select the data from the debug tables.
select unique(query) from query_list;
select v_candidate_id, v_fname,v_current_employer,v_Experience_years from candidature where V_REQUIREMENT = :JOB_CODE and v_experience_years >= :MIN_EXP and v_experience_years <= :MAX_EXP and source like '%:SOURCES1%'
select * from debug;
JOBCODE MINEX MAXEX SOURCE
21 1 10 donkeyHire
And if I run the query in sql I get some records returned
select v_candidate_id, v_fname,v_current_employer,v_Experience_years from candidature where V_REQUIREMENT = 21 and v_experience_years >= 1 and v_experience_years <= and source like 'donkeyHire'
V_CANDIDATE_ID V_FNAME V_CURRENT_EMPLOYER V_EXPERIENCE_YEARS
2 Vengu Andale Tech 4
But the record does not show up in the report!
does this type of report parse page items as text?
Why is it so?
Waiting for an early reply.
Thanks,
venkatVenkat - You don't want to put ':SOURCES1' in quotes like that.
Scott -
Return default data if no data is returned by sql query
Hi,
I have a requirement.
I have an inner query that returns no data. However I still want to return default data (say 'abc'). The below sql does not return anything inspite of using nvl . Please advise .
select nvl( x.vencode,'abc') vencode
from
-- below sql returns no data!
SELECT a.vencode vencode,
a.mid mid,
a.title title,
ROW_NUMBER() OVER (PARTITION BY a.vencode ORDER BY a.title) rnk
FROM (
SELECT *
FROM (SELECT vencode FROM vendor where login is not null and vencode = 'BKFI'
and login > (sysdate - 90) )
CROSS JOIN
(SELECT mid, title, ROWNUM num FROM tcommmemos where mid is not null)
) a,
(SELECT * FROM (
SELECT v.vencode, tc.mid, tc.title
FROM
(select * from vendor
where login is not null and vencode = 'BKFI'
and login > (sysdate - 90)) v,
tcommmemosviewed tcv, tcommmemos tc
WHERE v.vencode = tcv.vencode
and tc.mid is not null
--AND tc.post_date > v.hiredate
AND tc.mid = tcv.mid)
) b
where a.vencode = b.vencode(+)
and a.title = b.title(+)
and a.mid = b.mid(+)
and b.mid is null
) xUse any aggregate function it'll always return a value even if there no data in the table
create table r_dummy_1 (a number);
SQL> select * from r_dummy_1;
no rows selected
SQL> select nvl(max(a),1) from r_dummy_1;
NVL(MAX(A),1)
1 -
Function Modules for Data and Time
Hi all,
I need 2 function modules for date and time. when we pass current data(sy-datum) and current time (sy-uzeit) into function modules, shoud get date in <b>dd/mm/yyyy or dd.mm.yyyy</b> and time in<b> HH:MM:SS</b> formats.
Thanks in advanceHi Ranjith,
i think this will b usefull for you..
SAP Bar Chart Function Modules and what they are used for
Function module
Used for
BARC_GRAPHIC_PBO
Starting bar chart at PBO time, using a graphic profile (parameter PROFILE)
BARC_GRAPHIC_PAI
Analyzing data returned by the graphic
BARC_SET_TIME_AXIS
Setting start and end of time axis
BARC_SET_OPTIONS
Setting options
BARC_ADD_CHART
Creating a chart
BARC_SET_CHART_ATTRIB
Setting chart attributes
BARC_ADD_SECTION
Creating a section on the time axis
BARC_SET_SECTION_ATTRIB
Setting section attributes
BARC_ADD_RIBBON
Adding a ribbon to the time axis
BARC_SET_RIBBON_ATTRIB
Setting attributes for ribbons in the chart
BARC_ADD_GRID
Adding a time grid
BARC_SET_GRID_ATTRIB
Setting grid attributes
BARC_ADD_LAYER
Adding a layer (graphic elements)
BARC_SET_LAYER_ATTRIB
Setting layer attributes
BARC_ADD_LINE
Adding a line
BARC_ADD_CALENDAR
Creating a calendar
BARC_SET_CALENDAR_ATTRIB
Setting attributes for a calendar
BARC_ADD_TIME_PROFILE
Creating time profiles
BARC_SET_TIME_PROFILE_ATTRIB
Setting attributes for time profile
BARC_ADD_INTERVAL
Adding a time interval
BARC_SET_INTERVAL_ATTRIB
Setting time interval attributes
BARC_ADD_TIME_OBJECT
Creating a time object
BARC_CONVERT_DATE
Creating a date string in bar chart format
BARC_REVERT_DATE
Converting a date string in bar chart format to date and time
BARC_ADD_DATELINE
Creating a date line
BARC_SET_DATELINE_ATTRIB
Setting dateline attributes
BARC_GET_PROFILE_CONTENTS
Obtaining profile contents for customizing a chart
BARC_GET_COLUMN_WIDTH
Selecting new column width
BARC_SET_COLUMN_WIDTH
Setting the column width
BARC_GET_TEXTINDEX
Obtaining the text index of a field
BARC_SET_LABELS
Positioning the chart display
BARC_SET_COLUMN_ATTRIB
Setting column attributes
BARC_SET_ROW_ATTRIB
Setting row attributes
BARC_SET_ROW_HEIGHT
Setting the line height
BARC_SET_MAXCHARTS
Setting the maximum number of charts sent
<b>If its usefull reward points
</b>
Maybe you are looking for
-
Hi Gurus, My client want to have a report which tells us the PO number and its corresponding GRNs and the invoice verification number for the GRN.Also he wants a excise document captured against a GDN in the report. Is there is any stanadard report a
-
Hi Experts, I'mcreating a popup in a standard way from a normal View called 'MAIN': lr_popup = lr_window_manager->create_window( modal = abap_true window_name = 'WND_POPUPMAIN' title = lv_text close
-
80GB classic hard drive problem
Ive had the ipod for just over 2 years (typically just out of warranty), and the hard drive has started to do the dreaded click of death when booting up. Ive left it on the charger, and eventually (sometimes half an hour later), it will boot up. Howe
-
Raised GPEngineException when runtime get the process instance
Dear Ladies/Gentlemen: I have developped a guided procedure process, it pop up GPEngineException when it met the code like below. IUser userCurrentProcessorLogonID = UMFactory.getUserFactory().getUserByLogonID(wdUser.getSAPUser().getName()); IGPUserC
-
Keyboarded slash character transformed into space in all Office applications.
OK in Notepad and Open Office applications. I have verified keyboard is OK and is only set to English. //////////////////////////////// Obviously OK here.