Golgappa.net | Golgappa.org | BagIndia.net | BodyIndia.Com | CabIndia.net | CarsBikes.net | CarsBikes.org | CashIndia.net | ConsumerIndia.net | CookingIndia.net | DataIndia.net | DealIndia.net | EmailIndia.net | FirstTablet.com | FirstTourist.com | ForsaleIndia.net | IndiaBody.Com | IndiaCab.net | IndiaCash.net | IndiaModel.net | KidForum.net | OfficeIndia.net | PaysIndia.com | RestaurantIndia.net | RestaurantsIndia.net | SaleForum.net | SellForum.net | SoldIndia.com | StarIndia.net | TomatoCab.com | TomatoCabs.com | TownIndia.com
Interested to Buy Any Domain ? << Click Here >> for more details...

What is nocopy in plsql?

Answer Posted / anks

Prior to Oracle 8i releases, the IN OUT parameters in
PL/SQL routines were passed using the copy-in and copy-out
semantics (call by value).

For example:


create or replace procedure cpy_chk
(pi_val in varchar2,
po_dat out date,
pio_status in out varchar2) is
begin
po_dat := sysdate;
pio_status := pio_status || 'amar is testing';
end;
When the above code is executed, Oracle will copy the value
being passed to parameters PO_DAT and PIO_STATUS in a
separate buffer for the routine. On completion of the
routine, Oracle will copy the value being held in the
PO_DAT and PIO_STATUS parameters back to the original
variable. This results in multiple buffers being opened in
memory and the overhead of copying data back and forth.
This can be huge in terms of CPU and Memory overhead if the
parameter is meant for large strings or collection objects.
The IN parameter is passed by reference; that is, a pointer
to the actual IN parameter is passed to the corresponding
formal parameter. So, both parameters refer to the same
memory location and no copying overhead is involved.
However, the OUT and IN OUT parameters are passed by value.

To get around this, package variables were being used to
pass values around. Though serviceable as an alternative to
prevent multiple buffers and copy overhead, it resulted in
higher maintenance cost.

From Oracle 8i onwards, the NOCOPY parameter hint has been
introduced for OUT and IN OUT parameters. Using this hint
tells Oracle to make a call by reference. Use this hint
when there is no need to preserve the original value (in
case the called routine raises an exception). Oracle's
internal benchmark testing shows improvements of 30% to
200% for PL/SQL tables being passed as parameters. NOCOPY
is the ideal hint for OUT and IN OUT parameters when the
original value is not to be preserved (as is generally the
case).

Here's an example:


create or replace procedure cpy_chk
(pi_val in varchar2,
po_dat out nocopy date,
pio_status in out nocopy varchar2) is
begin
po_dat := sysdate;
pio_status := pio_status || 'amar is testing';
end;


Drawbacks
NOCOPY is a hint and Oracle does not guarantee a parameter
will be passed by reference when explicitly mentioned. Here
are some places where this is not possible:

When the call is a remote procedure call
When the actual parameter being passed is an expression
When there is an implicit conversion involved
There may be other situations where Oracle may decide a
call by value over a call by reference. Since this is not
clearly specified, it is advisable not to build any process
logic on this feature when exceptions being raised in the
called routine are being trapped in the calling routine.

Is This Answer Correct ?    2 Yes 0 No



Post New Answer       View All Answers


Please Help Members By Posting Answers For Below Questions

Write a shell program to test whether a given year is leap year or not ?

2735


Difference between views and index in sas programming

1575


Write a function which accepts a sentence as input parameter.Each word in that sentence is to be reversed. Space should be there between each words.Return the sentence with reversed words to main function and produce the required output. for eg:- i/p: jack jill jung kill o/p: kcaj llij gnuj llik

2410


How to create a new dataset only duplicate observations in proc sort procedure?

2073


You are given some denominations of coins in an array (int denom[])and infinite supply of all of them. Given an amount (int amount), find the minimum number of coins required to get the exact amount. What is the method called?

1123


what is the difference between read the data from table and infotype

2594


What is the difference beween joblib and steplib statements

2332


What is autocall macro and how to create autocall macro? what is the use of it?

2113


what are stubs related to foxpro?

2140


When we have two versions of the dot net installed how does the compiler know which version of DLL it has to select to an application.

1962


What is the use of sas software? Is sas and sap are different?

1576


SAS question: I have 50 fils a1,a2,...,a50. the primary key is upc. then if i want to merge all 50 files, the code is as follows, data test; merge a1 ... a50; by upc; run; we know that writing all 50 files name is time consuming, is there any standard format of this code?

1998


how to check single or double byte in struts

2042


what is meaning of MDM in sap?let me know that meaning

2330


Do not use more than 3 nested IF. Use Evaluate statement in case of more IF required. Please give a detail explantion besides readability and clarity for Evaluate stmt.

2033