Return Collection or Set from interface methods?
When designing abstract entities, like interfaces, abstract classes and utility classes, that hence shouldn't assume too much about neither implementation nor usage, I've been thinking a lot about whether it is better practice to use return types that are as (semantically) specific as possible, or as abstract as possible.
Consider as an example a method in an interface that returns a set of units. It can be declared at two levels of abstraction - with Collection or Set as the return type.
public Set getUnits();
public Collection getUnits();
The users of the interface instances do not have knowledge of the implementation. The implementations of the interface do not have knowledge of the users.
That means, some implementations may be utilizing the non-duplicate property of the collection and implement it as a HashSet. Another implementation may also need special ordering and therefore implements it as a LinkedList.
To specify Set in the interface forces the implementations - either to implement using Sets, or to incur a possibly very significant overhead by converting the internal representation to a Set for the method's return value.
To specify Collection in the interface does not force anything on the implementations, and the contract that no duplicate elements occur can still be clearly specified (and obvious in the context). On the other hand, the users of the interface lose the Set semantics they might like to make use of, for instance O(1) random access is reasonable to expect from most Set implementations. But this isn't certain, so is it a strong argument?
Any thoughts?
Hi,
I've had to make a similar decision recently, where I'm creating implementations of a generic time-series database, each of which consists of a number of measuring 'stations', which are returned via a method. My initial design of the database interface had the method:
Set getStationSet();This seemed the most obvious solution, as there would certainly be no duplicate stations defined by a given database. However, I subsequently changed this to
Collection getStations();for a number of reasons.
Some databases return the stations in a specified order (the order in which the users of that database are most familar with). If the return type is a Set it forced the use of a TreeSet (assuming I don't write my own SortedSet implementation), which for some (large) databases imposes quite an overhead.
Also, most database client code just iterates through the returned Set/Collection, sees whether a station meets a certain criteria, and uses it if so. Most code (in my example at least) simply does not need Set behaviour. Any code that does can simply use
Set s = new HashSet( getStations() );which is hardly a major coding effort for clients using the interface.
Subsequent coding indicates I've made the right choice. I would definitely say you should return a Collection and simply state in the associated documentation that the collection wont contain any duplicates and it can be put in a Set, or SortedSet, if required.
In general, I also think it makes sense for interfaces to be as generic (or abstract) as possible.
Ol.
Similar Messages
-
Return a record set from a procedure
I am building an application for my company.
Before oracle I had used MS SQL Server for a long time.
I build a procedure as following
CREATE OR REPLACE PROCEDURE YBP.ReturnSet
-- Return a record set from a procedure
IS
BEGIN
SELECT * FROM fdbase;
END;
But the complier show me a error message:
<font color="#0000FF">PLS-00428 an INTO clause is expected in this SELECT statement</font>
I read the error details
<font color="#0000FF">"In PL/SQL, only a subquery is written without an INTO clause."</font>
But I know that this procedure can run well in <font color="#0000FF">MS SQL Server .</font>
How I can do this thing in Oracle
Any help will be appreciate!I have a stored proc that is defined as
CREATE or REPLACE
PROCEDURE ABC
(linkid IN CHAR,
Year_in IN DATE,
Method_in IN CHAR,
Date_out OUT DATE,
average_out OUT NUMBER)
is
begin
.. Date_out := ...;
average_out := ...;
end;
another partially completed stored proc that returns a ref
cursor defined as follows:
create or replace package zzz
as
type cursorType is ref cursor;
end;
create or replace function test return zzz.cursortype
as
date_OUT date;
Average_OUT number;
l_cursor zzz.cursorType;
CURSOR temp_cur is
SELECT l.linkid, L.routenumber, ABC(l.linkid,
to_date('01/01/2000', 'mm/dd/yyyy'),
'2',
date_OUT,
average_OUT)
FROM LINK l
WHERE l.LINKID <= '010999';
begin
open temp_cur;
end;
inside test (which I need help completing), how can I refer to
the date_out and the average_out params returned by ABC() so
that these values are in turn passed to the cursortype defined
in package zzz?
Thanks in advance. -
Returning collection-associative array from pl-sql procedure
CREATE OR REPLACE procedure test_ganesh( p_deptno IN number,gana out PARTIES_RESULT)
is
query varchar2(200);
PARTY_ID varchar2(200);
PARTY_CODE varchar2(200);
PARTY_NAME varchar2(200);
PARTY_SEQ VARCHAR2(200);
counter number;
TYPE PARTIES IS TABLE OF varchar2(2000) index by binary_integer;
txn_parties PARTIES;
type PARTIES_RESULT IS TABLE OF PARTIES index by binary_integer;
total_result PARTIES_RESULT;
TYPE EmpTyp IS REF CURSOR;
p_du EmpTyp;
p_cursor EmpTyp;
global_counter number;
begin
global_counter:=1;
counter:=1;
open p_cursor FOR
select A.ref_no
from ot_lc_txn_details A
where rownum <12;
LOOP
FETCH p_cursor INTO query;
EXIT WHEN p_cursor%NOTFOUND;
counter:=1;
open p_du FOR
select party_id,party_code,seq_no,party_name from ot_txn_party where ref_no=query;
LOOP
FETCH p_du INTO PARTY_ID,PARTY_CODE,PARTY_SEQ,PARTY_NAME;
EXIT WHEN p_du%NOTFOUND;
txn_parties(counter):=PARTY_ID || '&&&' || PARTY_CODE || '&&&'||PARTY_SEQ || '&&&' || PARTY_NAME;
counter:=counter+1;
END LOOP;
CLOSE p_du;
total_result(global_counter):=txn_parties;
global_counter:=global_counter+1;
END LOOP;
CLOSE p_cursor;
--open gana FOR SELECT * FROM table(cast(total_result as PARTIES_RESULT)) ;
end;
The error comes at line one, PLS-00905- object PARTIES_RESULT is invalid.
i have used the create type thing to create this type.
if i remove the out parameter it works, no compilation error.
Questions i) How to return the associative array as out parameter?
ii)Am i doing aynthing qrong here?
iii) Can i open a ref cursor to this associative array and then return that ref_cursor?
Please anyone reply back, Thanks in advance
Message was edited by:
user649602As an example:
SQL> create type PARTIES is table of varchar2(2000);
2 /
Type created.
SQL> create or replace procedure proc1(p_deptno number,gana out parties) as
2 begin
3 select ename
4 bulk collect into gana
5 from emp
6 where deptno = p_deptno;
7 end;
8 /
Procedure created. -
Return a Result set from a cursor
Is it necessary to create a temporary table to show the rows I want? there is another way?
Ex.:
DECLARE
CURSOR c1 is
SELECT ename, empno, sal FROM emp
ORDER BY sal DESC;
my_ename VARCHAR2(10);
my_empno NUMBER(4);
my_sal NUMBER(7,2);
BEGIN
OPEN c1;
FOR i IN 1..5 LOOP
FETCH c1 INTO my_ename, my_empno, my_sal;
EXIT WHEN c1%NOTFOUND;
INSERT INTO temp VALUES (my_sal, my_empno, my_ename);
COMMIT;
END LOOP;
CLOSE c1;
END;
SELECT * FROM temp ORDER BY col1 DESC;No cursor or temp table needed. Note the difference between dense_rank() and rank().
sql>select *
2 from (select ename, empno, sal, dense_rank() over (order by sal desc) rank
3 from emp)
4 where rank <= 5;
ENAME EMPNO SAL RANK
KING 7839 5000 1
SCOTT 7788 3000 2
FORD 7902 3000 2
JONES 7566 2975 3
BLAKE 7698 2850 4
CLARK 7782 2450 5
6 rows selected.
sql>select *
2 from (select ename, empno, sal, rank() over (order by sal desc) rank
3 from emp)
4 where rank <= 5;
ENAME EMPNO SAL RANK
KING 7839 5000 1
SCOTT 7788 3000 2
FORD 7902 3000 2
JONES 7566 2975 4
BLAKE 7698 2850 5
5 rows selected.
-- and the non-analytic function approach
sql>select *
2 from (select ename, empno, sal
3 from emp
4 order by sal desc)
5 where rownum <= 5;
ENAME EMPNO SAL
KING 7839 5000
SCOTT 7788 3000
FORD 7902 3000
JONES 7566 2975
BLAKE 7698 2850
5 rows selected. -
Returning an array type from a local method in Web Dynpro Java application
Hi,
In my project, we have a requirement to display 18 rolling months along with the year, starting from current month.
How I am going to approach is that I will get the system date and get the current month and send the month and year value to a local method which will return 18 rolling months along with the year.
But, when I tried to create a new method there is no option to return an array type. It was greyed out.
So, we can not return an array type from a method from Web Dynpro for Java application?
If so, what is the alternative and how am I going to achieve it?
I will appreciate your help!
Regards
RamHI
You can create new methods in
//@@begin others
private ArrayList MyMethod(){
// ** Put your code here
return new ArrayList();
//@@end
Other option are create a context node with cardinality 0...n with one or more attributes, and in your method create the needed registers into this node. To read this values, you only need to read your context node.
Best regards
Edited by: Xavier Aranda on Dec 2, 2010 9:41 AM -
It is required to get the result set from the last query.
I need this SP to return the result set from the last query.
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
alter proc spQ_GetASCBillingRateIDs2
@ScheduleID CHAR(15),
@startdate smalldatetime,
@enddate smalldatetime
as
set nocount on
truncate table tbltmpgroup
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[tbltmptbltest]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[tbltmptbltest]
exec sp_CreateTblTmpGroup
insert into tbltmpgroup
SELECT DISTINCT
case when pd.billparent = 'N' then org.eligibleorgid
else isnull(af.parentid, org.eligibleorgid) end as billorgid,
pd.individualbill , pd.cobrabill, pd.billparent,
org.eligibleorgid, org.polid, org.orgpolicyid,
pp.planid, pp.rateid,
ps.ascinvoicedate,
case when ps.ascclaimfromdate > @startdate then ps.ascclaimfromdate
else @startdate end as premiumrundayFrom,
case when ps.ascclaimtodate < @enddate then ps.ascclaimtodate
else @enddate end as premiumrundayTo,
fts.effdate, fts.termdate,
case when fts.effdate > @startdate then fts.EffDate
else @startdate end as ascStartDate,
case when fts.termdate < @enddate then fts.termdate
else @enddate end as ascEndDate
FROM premiumschedule ps (nolock)
inner join orgpolicy org (nolock)
on org.ascinvoicerungroup between ps.premiumrundayfrom and ps.premiumrundayto
inner join FundingTypeStatus fts
on fts.orgpolicyid = org.orgpolicyid
and fts.fundtype = 'ASC'
and ((fts.effdate between @startdate and @enddate)
or (fts.termdate between @startdate and @enddate)
or (fts.effdate < @startdate and fts.termdate > @enddate))
inner join eligibilityorg o (nolock)
on org.eligibleorgid = o.eligibleorgid
inner join policydef pd (nolock)
on pd.polid = org.polid
inner join policyplans pp (nolock)
on pp.polid = org.polid
inner join program p (nolock)
on pd.programid = p.programid
left join orgaffiliation af with (nolock)
on org.eligibleorgid = af.childid
WHERE ps.premiumscheduleid = @ScheduleID
AND org.orgpolicyid <> ''
go
SELECT DISTINCT z.rateid, e.enrollid, z.ascstartdate, z.ascenddate
into tbltmptbltest FROM enrollment E (nolock)
inner join tbltmpgroup z
on e.rateid = z.rateid
go
CREATE UNIQUE CLUSTERED INDEX IDXTempTable ON tbltmptbltest(enrollid)
create index IDXTemptableDates on tbltmptbltest(ascstartdate,ascenddate)
go
select distinct t.*
from tbltmpgroup t
where rateid in (
select distinct t.rateid from VW_ASC_Billing)
order by billorgid
set nocount off
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GOPlease post DDL, so that people do not have to guess what the keys, constraints, Declarative Referential Integrity, data types, etc. in your schema are. Learn how to follow ISO-11179 data element naming conventions and formatting rules (you have no idea).
Temporal data should use ISO-8601 formats. Code should be in Standard SQL as much as possible and not local dialect.
What you did post is bad SQL.
The prefix “tbl-” is a design flaw called tibbling and we do not do it. We seldom use temp tables in RDBMS; it is how magnetic tape file programmers fake scratch tapes.
If the schema is correct, then SELECT DISTINCT is almost never used.
Your “bill_parent” looks like a assembly language bit flag; we never use those flags in SQL.
“Funding_Type_Status” is an absurd name for a table. A status is a state of being, not an entity. A type is an attribute property. So this table ought to be column that is either a “funding_type” or “funding_status” (with the time period for the state of being
shown in other columns). But this hybrid is not possible in a valid data model.
Want to try again, with DDL and some specs?
--CELKO-- Books in Celko Series for Morgan-Kaufmann Publishing: Analytics and OLAP in SQL / Data and Databases: Concepts in Practice Data / Measurements and Standards in SQL SQL for Smarties / SQL Programming Style / SQL Puzzles and Answers / Thinking
in Sets / Trees and Hierarchies in SQL -
Returning multiple values from a method
I have to return a string and int array from a method (both are only of size 5 for a total of 10) What would be considered the best manner in which to do this ?
Dr there's 10 points in it for you or whoever gives me the best idea ;-Phey here it is easy that you can return many things
what ever you want from a single method man....
you know the main thing what you have to do is.....
Just create a VECTOR or LIST object, then add all the
values what ever you want to return like string and
int array like etc...
Then make the method return type is VECTOR and after
getting the Vector you can Iterate that and you can
get all the values from that method what ever you
want....
jus try this,,,,,,,,,,
Its really work......
reply me..but it relies purely on trust that the returned collection would contain exactly the right number and type of arguments -
Problem with image returned from getGeneratedMapImage method
I'm a newbie as far as map viewer and Java 2D goes....
My problem is the java.awt.Image returned from the getGeneratedMapImage method of the MapViewer API. The image format is set to FORMAT_RAW_COMPRESSED. The image returned is of poor quality with colors not being correct and lines missing. I'm painting the Image returned from this method onto my own custom JComponent by overriding the paint() method...
public void paint( Graphics g )
Image image = map.getGeneratedMapImage();
if ( image != null )
g.drawImage( image, getLocation().x, getLocation().y, Color.white, this );
If I take the xml request sent to the application server and paste it into a "sample map request" on the map admin website (along with changing format to PNG_STREAM) my image renders exactly how I expect it to.
Anyone have any idea what I need to do to get the java.awt.Image with format set to FORMAT_RAW_COMPRESSED to render correctly. I was hoping to get back a BufferedImage or a RenderedImage from the getGeneratedMapImage call but I'm getting back a "sun.awt.motif.X11Image".
Will downloading the JAI (java advanced imaging) from sun help me at all?Joao,
Turns out it is related to colors. I'm dynamically adding themes, linear features and line styles. I ran a test where I changed the color being specified in the line style from magenta (ff00ff) to black. When I changed the color the linear feature would show up. It was being rendered as white on a white background when I was specifying it to be magenta. I'm specifying another linear feature to be green and it is showing up in the java image as yellow. This doesn't happen when I take the generated XML from the request and display it as a PNG_STREAM.
Any clue what is going on there?
Jen -
How do you return more than one value from a method?
say I have this:
public static int myFunc(String inString)
// I want to return two values from this method
}yeah so how would i do that?If the two values are somehow related--like a person's name and his age--define a class that has those two values as member variables--for example, Person. But only if that class and the assocation of those two quantities makes sense as an entity in your program. Don't do it just to jam to quantities into one return.
Or, if the two values are two of the same thing--person A's age and person B's age--then you can return an array or Collection.
If it doesn't fit either of those two scenarios, then your method is trying to do too much unrelated stuff and you should break it into multiple methods. For example, calculating a Person's age based on his birthdate and today's date and calculating his Body Mass Index based on his height and weight. Those two quantities should NOT be returned together. -
How to return a object from a method in a java program to a C++ call (JNI )
Sir,
I am new to java and i have been assigned a task to be done using JNI.
My question is,
How can i return an object from a method in a java program to a call for the same method in a C++program using JNI.
Any help or suggesstions in this regard would be very useful.
Thanking you,
Anjan KumarHello
I would like to suggest that JNI should be your last choice and not your first choice. JNI is hard to get right. Since the JNI code is executing in the same address space as the JVM, any problems (on either side) will take down the entire process. It dilutes the Write Once Run Anywhere (WORA) value proposition because you need to provide the JNI component for all hardware/OS platforms. If you can keep your legacy code(or whatever you feel you need to do in JNI) in a separate address space and communicate via some inter-process channel, you end up with a system that is more flexible, portable, and scalable.
Having said all that, head over to the Java Native Interface: Programmer's Guide and Specification web page:
http://java.sun.com/docs/books/jni/
Scroll down to the Download the example code in this book in ZIP or tar.gz formats. links and download the example source. Study and run the example sources. The jniexamples/chap5/MyNewString demo creates a java.lang.String object in native code and returns it to the Java Language program. -
How to return Collection from from entity bean to servlet?
hi
is it possible to return Collection from entity bean (Which is returns form CMR field ) to servlet ?
thanksSERVLET
public class test extends HttpServlet {
@EJB
private LocalBean lookupBean;
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
for(Item i : lookupBean.getMyCollection() )
out.println(i.getItemName());
out.close();
}BEAN INTERFACE
public interface BeanLocal {
Collection<Item> getMyCollection();
}BEAN IMPLEMENTATION
@Stateless()
public class Bean implements BeanLocal {
@PersistenceContext()
private EntityManager em;
public Collection<Item> getMyCollection() {
return em.createQuery("SELECT i from ITEM i").getResultList();
} and if you create an instance of your servlet you'll have to reinitialize LocalBean
@EJB(name="myejbref", beanInterface=BeanLocal.class)
private BeanLocal lookupBean;
private BeanLocal getLookupBean() {
if(lookupBean == null) {
try {
InitialContext ic = new InitialContext();
lookupBean = (BeanLocal) ic.lookup("java:comp/env/myejbref");
catch(Exception e){
System.out.println(e.getMessage());
return lookupBean;
} -
NEED HELP on returning values from a method
Hello Java World,
Does anyone know how to return more then 1 value from a method..
ex.
//the following returns one value
//Person Class
private String getname()
return this.name;
how can i get two values (ex. name and occupation of person)
Thank you in advance.Create a Class which will hold the values you want and return that object. Or return a List, or return an array, or - taking your example with the person, why don't you return the whole person object?
Thomas -
Accessing Custom Controller from setter and Getter methods
Hi Gurus
How can we access the custom controller from setter and getter methods,is there any way to do that.
Thanks & Regards
RajasekharHi Steve.
Thanks very much for valuable information, the main controller class is getting tracked in mo_owner which is declared as CL_BSP_WD_VIEW_CONTROLLER, and I'm getting the reference through
mo_owner ?= owner. (since mo_owner = owner is not getting converted of type mo_owner ). After doing this on whatever the contexnode class (say zl_xxxx_xxx_cnxx) the corressponding context node values are getting turned as <#ERROR IN METADATA.
I mean when I'm checking the configuration in bsp_wd_cmpwb configuration tab -> Available Fields->Enlarge the contex node->BTSTATUS (say for Example) there the values are showing as <#ERROR IN METADATA , After executing the above procedure
I cross checked several times before and after redefining the context node method IF_BSP_MODEL~INIT, before redefining this method UI is working fine, after redefintion UI is throwing below error .
Exception Details
CX_SY_REF_IS_INITIAL - Dereferencing of the NULL reference
Method: CL_BSP_MODEL=>IF_BSP_MODEL_BINDING~IS_ATTRIBUTE_VALID
Source Text Row: 13
Thanks & Regards
Rajasekhar -
Returning result set from procedure out parameter, display with anon block
I'm trying to do something pretty simple (I think it should be simple at least). I want to use a pl/sql procedure to return a result set in an OUT parameter. If I run this code by itself (in the given anonymous block at the end, without trying to display any results), toad says that the PL/SQL procedure successfully completed.
How can I display the results from this procedure? I am assuming that the result set should be stored in the O_RETURN_REDEEM_DTL, but how can I get anything out of it?
I have this package with the following procedure:
/* FUNCTION - REDEEM_DTL_READ */
PROCEDURE REDEEM_DTL_READ(
ZL_DIVN_NBR_IN IN REDEEM_DTL.ZL_DIVN_NBR%TYPE,
GREG_DATE_IN IN REDEEM_DTL.GREG_DATE%TYPE,
ZL_STORE_NBR_IN IN REDEEM_DTL.ZL_STORE_NBR%TYPE,
REGISTER_NBR_IN IN REDEEM_DTL.REGISTER_NBR%TYPE,
TRANS_NBR_IN IN REDEEM_DTL.TRANS_NBR%TYPE,
O_RETURN_REDEEM_DTL OUT REDEEM_DTL_TYPE,
o_rtrn_cd OUT NUMBER,
o_err_cd OUT NUMBER,
o_err_msg OUT VARCHAR2
IS
BEGIN
o_rtrn_cd := 0;
o_err_msg := ' ';
o_err_cd := 0;
--OPEN REDEEM_DTL_READ_CUR(ZL_DIVN_NBR_IN, GREG_DATE_IN, ZL_STORE_NBR_IN, REGISTER_NBR_IN, TRANS_NBR_IN);
OPEN O_RETURN_REDEEM_DTL FOR SELECT * FROM REDEEM_DTL;
-- LOOP
-- FETCH REDEEM_DTL_READ_CUR INTO O_RETURN_REDEEM_DTL;
-- EXIT WHEN REDEEM_DTL_READ_CUR%NOTFOUND;
-- END LOOP;
-- CLOSE REDEEM_DTL_READ_CUR;
EXCEPTION
WHEN OTHERS
THEN
o_rtrn_cd := 7;
o_err_msg := SUBSTR (SQLERRM, 1, 100);
o_err_cd := SQLCODE;
END REDEEM_DTL_READ;and call it in an anonymous block with:
DECLARE
ZL_DIVN_NBR_IN NUMBER;
GREG_DATE_IN DATE;
ZL_STORE_NBR_IN NUMBER;
REGISTER_NBR_IN NUMBER;
TRANS_NBR_IN NUMBER;
O_RETURN_REDEEM_DTL PSAPP.CY_SALESPOSTING.REDEEM_DTL_TYPE;
O_RETURN_REDEEM_DTL_OUT PSAPP.CY_SALESPOSTING.REDEEM_DTL_READ_CUR%rowtype;
O_RTRN_CD NUMBER;
O_ERR_CD NUMBER;
O_ERR_MSG VARCHAR2(200);
BEGIN
ZL_DIVN_NBR_IN := 71;
GREG_DATE_IN := TO_DATE('07/21/2008', 'MM/DD/YYYY');
ZL_STORE_NBR_IN := 39;
REGISTER_NBR_IN := 1;
TRANS_NBR_IN := 129;
-- O_RETURN_REDEEM_DTL := NULL; Modify the code to initialize this parameter
O_RTRN_CD := NULL;
O_ERR_CD := NULL;
O_ERR_MSG := NULL;
PSAPP.CY_SALESPOSTING.REDEEM_DTL_READ ( ZL_DIVN_NBR_IN, GREG_DATE_IN, ZL_STORE_NBR_IN,
REGISTER_NBR_IN, TRANS_NBR_IN, O_RETURN_REDEEM_DTL, O_RTRN_CD, O_ERR_CD, O_ERR_MSG );
FOR item IN O_RETURN_REDEEM_DTL
LOOP
DBMS_OUTPUT.PUT_LINE('ZL_DIVN_NBR = ' || item.ZL_DIVN_NBR);
END LOOP;
END; And end up with an error:
ORA-06550: line 25, column 15:
PLS-00221: 'O_RETURN_REDEEM_DTL' is not a procedure or is undefined
ORA-06550: line 25, column 3:
PL/SQL: Statement ignoredMessage was edited by:
user607908Aha, I knew I forgot something!
I actually had it defined as a REF CURSOR in PSAPP.CY_SALESPOSTING package spec:
TYPE REDEEM_DTL_TYPE IS REF CURSOR;since I wasn't sure what to make it.
Cursor used in procedure:
CURSOR REDEEM_DTL_READ_CUR (
zl_divn_nbr_in IN NUMBER,
greg_date_in IN DATE,
zl_store_nbr_in IN NUMBER,
register_nbr_in IN NUMBER,
trans_nbr_in IN NUMBER)
IS
SELECT ZL_DIVN_NBR, GREG_DATE, ZL_STORE_NBR, REGISTER_NBR, TRANS_NBR, PAYMENT_TYP_NBR
FROM REDEEM_DTL
WHERE ZL_DIVN_NBR = zl_divn_nbr_in AND GREG_DATE = greg_date_in AND
ZL_STORE_NBR = zl_store_nbr_in AND REGISTER_NBR = register_nbr_in AND
TRANS_NBR = trans_nbr_in;Updated code:
/* PROCEDURE - REDEEM_DTL_READ */
PROCEDURE REDEEM_DTL_READ(
ZL_DIVN_NBR_IN IN REDEEM_DTL.ZL_DIVN_NBR%TYPE,
GREG_DATE_IN IN REDEEM_DTL.GREG_DATE%TYPE,
ZL_STORE_NBR_IN IN REDEEM_DTL.ZL_STORE_NBR%TYPE,
REGISTER_NBR_IN IN REDEEM_DTL.REGISTER_NBR%TYPE,
TRANS_NBR_IN IN REDEEM_DTL.TRANS_NBR%TYPE,
O_RETURN_REDEEM_DTL OUT REDEEM_DTL_TYPE,
o_rtrn_cd OUT NUMBER,
o_err_cd OUT NUMBER,
o_err_msg OUT VARCHAR2
IS
BEGIN
o_rtrn_cd := 0;
o_err_msg := ' ';
o_err_cd := 0;
OPEN REDEEM_DTL_READ_CUR(ZL_DIVN_NBR_IN, GREG_DATE_IN, ZL_STORE_NBR_IN,
REGISTER_NBR_IN, TRANS_NBR_IN);
--OPEN O_RETURN_REDEEM_DTL FOR SELECT * FROM REDEEM_DTL;
LOOP
FETCH REDEEM_DTL_READ_CUR INTO O_RETURN_REDEEM_DTL;
EXIT WHEN REDEEM_DTL_READ_CUR%NOTFOUND;
DBMS_OUTPUT.PUT_LINE('ZL_DIVN_NBR = ' || O_RETURN_REDEEM_DTL.ZL_DIVN_NBR);
END LOOP;
CLOSE REDEEM_DTL_READ_CUR;
-- LOOP
-- FETCH REDEEM_DTL_READ_CUR INTO O_RETURN_REDEEM_DTL;
-- EXIT WHEN REDEEM_DTL_READ_CUR%NOTFOUND;
-- END LOOP;
-- CLOSE REDEEM_DTL_READ_CUR;
EXCEPTION
WHEN OTHERS
THEN
o_rtrn_cd := 7;
o_err_msg := SUBSTR (SQLERRM, 1, 100);
o_err_cd := SQLCODE;
END REDEEM_DTL_READ;the updated anon block:
DECLARE
ZL_DIVN_NBR_IN NUMBER;
GREG_DATE_IN DATE;
ZL_STORE_NBR_IN NUMBER;
REGISTER_NBR_IN NUMBER;
TRANS_NBR_IN NUMBER;
O_RETURN_REDEEM_DTL PSAPP.CY_SALESPOSTING.REDEEM_DTL_TYPE;
O_RTRN_CD NUMBER;
O_ERR_CD NUMBER;
O_ERR_MSG VARCHAR2(200);
BEGIN
ZL_DIVN_NBR_IN := 71;
GREG_DATE_IN := TO_DATE('07/21/2008', 'MM/DD/YYYY');
ZL_STORE_NBR_IN := 39;
REGISTER_NBR_IN := 1;
TRANS_NBR_IN := 129;
-- O_RETURN_REDEEM_DTL := NULL; Modify the code to initialize this parameter
O_RTRN_CD := NULL;
O_ERR_CD := NULL;
O_ERR_MSG := NULL;
PSAPP.CY_SALESPOSTING.REDEEM_DTL_READ ( ZL_DIVN_NBR_IN, GREG_DATE_IN, ZL_STORE_NBR_IN,
REGISTER_NBR_IN, TRANS_NBR_IN, O_RETURN_REDEEM_DTL, O_RTRN_CD, O_ERR_CD, O_ERR_MSG );
FOR item IN 1..O_RETURN_REDEEM_DTL.COUNT
LOOP
DBMS_OUTPUT.PUT_LINE('ZL_DIVN_NBR = ' || O_RETURN_REDEEM_DTL(item).ZL_DIVN_NBR);
END LOOP;
END;and the new error:
ORA-06550: line 25, column 38:
PLS-00487: Invalid reference to variable 'O_RETURN_REDEEM_DTL'
ORA-06550: line 25, column 3:
PL/SQL: Statement ignoredAlso, it would be nice if the forums would put a box around code so that it would be easy to
distinguish between what is supposed to be code and what should be regular text...
Message was edited by:
user607908 -
How to return more than one varibles from a method?
can you use the codes:
return var1, var2,var3;
If not, what is the correct way to do so? thanks.You can only return 1 object from a method in Java.
However, this 1 object can contain multiple other objects. For example, a Vector object:
public Vector someMethod() {
Vector v = new Vector();
v.add("abc");
v.add("xyz");
v.add("123");
return v;
}If these multiple objects are the same type, you can also use array to achieve want you want.
public String[] someMethod() {
String ss = new String[3];
ss[0] = "abc";
ss[1] = "xyz";
ss[2] = "123";
return ss;
}--lichu
Maybe you are looking for
-
I need to figure out how to unlock my locked account. I just got a new iPod touch 5th generation and since it's my first purchase I have to answer security questions. When I answer I am wrong I guess and it doesn't show me a straight forward way on h
-
Audit columns not updated when update statement is invoked
I am trying to perform DML operation using "Process Row" process. I have provided the default values for audit columns in the default section of the page item attributes. When I insert, the record is inserted with proper default values. The problem a
-
Why can't I sign in to iCloud on Apple TV
I can sign in to iTunes, but not iCloud on my Apple TV 2. Using the same Apple ID and password I Can sign in to iTunes and icloud on all other devices.
-
I am looking for best design approach for a topology supporting vlan, ip telephony, video conferencing and wireless solution thanks.
-
I cannot partition drive for boot camp.
I am installing windows 7 professional and cannot get the partition to install. The HDD will not partition. Please help.