Using out variable in a proceadure
hi im trying to use out to return a value from a proceadure
im not getting the syntax corect below could somone point be in the right direction
-------spec--------
create or replace package test
AS
TYPE result_set_type IS REF CURSOR;
PROCEDURE run_report
(main_cursor IN OUT result_set_type,
answer out varchar2);
end testJW;
---body-----
----im expecting the reult of the select below to be loaded in to answer
the cursor bit is because ultimatly this will be used with crystal reports
create or replace package body testJW
as
PROCEDURE run_report
(main_cursor IN OUT result_set_type,
v_channel_id NUMBER,
v_on_date DATE)
IS
BEGIN
OPEN main_cursor FOR
select block_type_name from onair.block_type where block_type_id = 1 ;
into answer ??????
end ;
end test;
create or replace package test
AS
TYPE result_set_type IS REF CURSOR return block_type%ROWTYPE;
PROCEDURE run_report
(main_cursor IN OUT result_set_type,
answer out varchar2);
end test;
---body-----
----im expecting the reult of the select below to be loaded in to answer
the cursor bit is because ultimatly this will be used with crystal reports
create or replace package body test
as
PROCEDURE run_report
(main_cursor IN OUT result_set_type,
v_channel_id NUMBER,
v_on_date DATE)
IS
BEGIN
OPEN main_cursor FOR
select * from onair.block_type where block_type_id = 1 ;
end ;
end test;
Similar Messages
-
How to use OUT variables in my stored procedure
I'm wondering if I can get some help using OUT variables in my stored procedure. Here's my code...
CREATE OR REPLACE PROCEDURE testProj.testProcedure (
v_segment_id IN VARCHAR2,
v_student_id OUT VARCHAR2,
v_current_code OUT NUMBER,
v_new_code OUT NUMBER
) AS
BEGIN
SELECT
s.student_id,
s.quad_code_id,
nc.quad_code_id
INTO
v_student_id,
v_current_quad_code,
v_new_quad_code
FROM testProj.students s
INNER JOIN testProj.new_codes nc ON s.student_id = nc.student_id
WHERE s.segment_id = v_segment_id ;
END testProcedure ;
EXECUTE testProj.testProcedure ('44') ;
When I execute that stored procedure with the above execute statement, I get this error:
Error report:
ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to 'testProcedure'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
+06550. 00000 - "line %s, column %s:\n%s"+
*Cause: Usually a PL/SQL compilation error.+
*Action:+Using Refcursor is one way you can do that ->
satyaki>
satyaki>select * from v$version;
BANNER
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Prod
PL/SQL Release 10.2.0.3.0 - Production
CORE 10.2.0.3.0 Production
TNS for 32-bit Windows: Version 10.2.0.3.0 - Production
NLSRTL Version 10.2.0.3.0 - Production
Elapsed: 00:00:00.21
satyaki>
satyaki>
satyaki>create or replace procedure r_arg(
2 choice in number,
3 b in out sys_refcursor
4 )
5 is
6 str varchar2(500);
7 begin
8 str := 'select * from emp';
9 open b for str;
10 exception
11 when others then
12 dbms_output.put_line(sqlerrm);
13 end;
14 /
Procedure created.
Elapsed: 00:00:01.84
satyaki>
satyaki>
satyaki>declare
2 rec_x emp%rowtype;
3 w sys_refcursor;
4 begin
5 dbms_output.enable(1000000);
6 r_arg(1,w);
7 loop
8 fetch w into rec_x;
9 exit when w%notfound;
10 dbms_output.put_line('Employee No: '||rec_x.empno||' - '||
11 'Name: '||rec_x.ename||' - '||
12 'Job: '||rec_x.job||' - '||
13 'Manager: '||rec_x.mgr||' - '||
14 'Joining Date: '||rec_x.hiredate||' - '||
15 'Salary: '||rec_x.sal||' - '||
16 'Commission: '||rec_x.comm||' - '||
17 'Department No: '||rec_x.deptno);
18 end loop;
19 close w;
20 exception
21 when others then
22 dbms_output.put_line(sqlerrm);
23 end;
24 /
Employee No: 9999 - Name: SATYAKI - Job: SLS - Manager: 7698 - Joining Date: 02-NOV-08 - Salary: 55000 - Commission: 3455 - Department No: 10
Employee No: 7777 - Name: SOURAV - Job: SLS - Manager: - Joining Date: 14-SEP-08 - Salary: 45000 - Commission: 3400 - Department No: 10
Employee No: 7521 - Name: WARD - Job: SALESMAN - Manager: 7698 - Joining Date: 22-FEB-81 - Salary: 1250 - Commission: 500 - Department No: 30
Employee No: 7566 - Name: JONES - Job: MANAGER - Manager: 7839 - Joining Date: 02-APR-81 - Salary: 2975 - Commission: - Department No: 20
Employee No: 7654 - Name: MARTIN - Job: SALESMAN - Manager: 7698 - Joining Date: 28-SEP-81 - Salary: 1250 - Commission: 1400 - Department No: 30
Employee No: 7698 - Name: BLAKE - Job: MANAGER - Manager: 7839 - Joining Date: 01-MAY-81 - Salary: 2850 - Commission: - Department No: 30
Employee No: 7782 - Name: CLARK - Job: MANAGER - Manager: 7839 - Joining Date: 09-JUN-81 - Salary: 4450 - Commission: - Department No: 10
Employee No: 7788 - Name: SCOTT - Job: ANALYST - Manager: 7566 - Joining Date: 19-APR-87 - Salary: 3000 - Commission: - Department No: 20
Employee No: 7839 - Name: KING - Job: PRESIDENT - Manager: - Joining Date: 17-NOV-81 - Salary: 7000 - Commission: - Department No: 10
Employee No: 7844 - Name: TURNER - Job: SALESMAN - Manager: 7698 - Joining Date: 08-SEP-81 - Salary: 1500 - Commission: 0 - Department No: 30
Employee No: 7876 - Name: ADAMS - Job: CLERK - Manager: 7788 - Joining Date: 23-MAY-87 - Salary: 1100 - Commission: - Department No: 20
Employee No: 7900 - Name: JAMES - Job: CLERK - Manager: 7698 - Joining Date: 03-DEC-81 - Salary: 950 - Commission: - Department No: 30
Employee No: 7902 - Name: FORD - Job: ANALYST - Manager: 7566 - Joining Date: 03-DEC-81 - Salary: 3000 - Commission: - Department No: 20
PL/SQL procedure successfully completed.
Elapsed: 00:00:00.48
satyaki>
satyaki>Regards.
Satyaki De. -
Using bind variables (in & out) with dynamic sql
I got a table that holds pl/sql code snippets to do validations on a set of data. what the code basically does is receiving a ID and returning a number of errors found.
To execute the code I use dynamic sql with two bind variables.
When the codes consists of a simpel query, it works like a charm, for example with this code:
BEGIN
SELECT COUNT (1)
INTO :1
FROM articles atl
WHERE ATL.CSE_ID = :2 AND cgp_id IS NULL;
END;however when I get to some more complex validations that need to do calculations or execute multiple queries, I'm running into trouble.
I've boiled the problem down into this:
DECLARE
counter NUMBER;
my_id NUMBER := 61;
BEGIN
EXECUTE IMMEDIATE ('
declare
some_var number;
begin
select 1 into some_var from dual
where :2 = 61;
:1 := :2;
end;
USING OUT counter, IN my_id;
DBMS_OUTPUT.put_line (counter || '-' || my_id);
END;this code doesn't really make any sense, but it's just to show you what the problem is. When I execute this code, I get the error
ORA-6537 OUT bind variable bound to an IN position
The error doesn't seem to make sense, :2 is the only IN bind variable, and it's only used in a where clause.
As soon as I remove that where clause , the code will work again (giving me 61-61, in case you liked to know).
Any idea whats going wrong? Am I just using the bind variables in a way you're not supposed to use them?
I'm using Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bitCorrection. With execute immediate binding is by position, but binds do not need to be repeated. So my statement above is incorrect..
You need to bind it once only - but bind by position. And the bind must match how the bind variable is used.
If the bind variable never assigns a value in the code, bind as IN.
If the bind variable assigns a value in the code, bind as OUT.
If the bind variable assigns a value and is used a variable in any other statement in the code, bind as IN OUT.
E.g.
SQL> create or replace procedure FooProc is
2 cnt number;
3 id number := 61;
4 begin
5 execute immediate
6 'declare
7 n number;
8 begin
9 select
10 1 into n
11 from dual
12 where :var1 = 61; --// var1 is used as IN
13
14 :var2 := n * :var1; --// var2 is used as OUT and var1 as IN
15 :var2 := -1 * :var2; --// var2 is used as OUT and IN
16 end;
17 '
18 using
19 in out id, in out cnt; --// must reflect usage above
20
21 DBMS_OUTPUT.put_line ( 'cnt='||cnt || ' id=' || id);
22 end;
23 /
Procedure created.
SQL>
SQL> exec FooProc
cnt=-61 id=61
PL/SQL procedure successfully completed.
SQL> -
Can i use instance variables in page flow controller with out restriction?
I am using instance variable in pageflow controller.
1) Will it give any problem if concurrent users are accessing that controller class?
2) How many controller objects will be created if multiple users (Say 10 users) accessing same controller class?
Thanks.1) Will it give any problem if concurrent users are accessing that controller class? Pageflows are pere user session, different users wont cause it problems. however a single user can cause problems by using open new tab on a link etc(or back button or refresh on browser, problems with using state in a stateless protocol) . A bigger problem is that since a pageflow is indirect in session, using private variables in pageflow increases your session footprint and in a cluster , if replicated, your network trafiic as well. Using state also causes problem in HTTP , a stateless protocol,. Highly not recommended (unless you have no other choice)
2) How many controller objects will be created if multiple users (Say 10 users) accessing same controller class? 10. assuming the portlet is used once only. If you use the same portlet in multiple pages , then you have that many.
Edited by: deepshet on Feb 27, 2010 12:10 PM -
Using a variable as a value in jsp:param
I was wondering, I have a String variable, vid_1, and want to use a jsp:include and pass that in as one of the parameters. How can I do this? I have to do some testing to make sure vid_1 is valid and set a default if not. It contains a number referring to which video needs to be displayed.
Is there anyway I can get this value to be used in jsp:param value?
JohnRahulSharna wrote:
Well,First thing you haven't pharsed your question properly.
Anyways as per my understading.
The first thing is make use of in this case as your defined requirement states you need to make use of variables of both the JSP's which need compile time include not at the runtime.use of
<%@ include file="url" %>would be more appropriate as you want to use the variable of parent jsp to the child one.
Anyways if you are thinking to apply a solution using <jsp:include/>
<jsp:include page="url">
<jsp:param name="paramName" value="<%=stringVariable>"/>
</jsp:include>and extract the paramName's corresponding value as a request parameter in other JSP.
Hope that might answer your question :)
REGARDS,
RaHuLRaHul,
Thanks for the reply. The second example you gave is what I was trying to do. I thought I did exactly what you have there and it was not working. I will check it over again and post back on here when I have a chance.
For now I was trying to use c:set to save the variable in the request and then using the EL expression ${requestScope.variable} to put it in the <jsp:param> element. I had some things working and others not when I quit. Hopefully tomorrow I can give you a full report and we can get this worked out.
Maybe my problem is something else? Look at this post of mine:
http://forum.java.sun.com/thread.jspa?threadID=5236252&tstart=10
Thanks so much for the help.
John -
Printing OUT variables from a Stored Procedure
Hi all,
I'm running an SQL command that calls a Stored Procedure and passes in some value. I've pasted in the important parts of it below. What I am trying to do is access the OUT variables that have been assigned to the DECLARED variables. I come from a SQL Server background and there we can do "SELECT @variable" which will print it to screen. I'm trying to do something similar here.
I need to access the contents of the three variables declared at the top of the script.
Thanks in advance.
DECLARE
l_error_value NUMBER;
l_error_product VARCHAR2 (10);
l_CE_DOC_ID number;
BEGIN
PEM.create_enquiry
( ce_cat => 'COMP'
, ce_class => 'FRML'
, error_value => l_ERROR_VALUE
,error_product => l_ERROR_PRODUCT
, ce_doc_id => l_ce_doc_id
END;Ah yes I see. Sorry I misunderstood what you were suggesting. I'm currently working on a test script that uses an approach similar to the one you mentioned, but I'm having trouble resolving foreign key relationships with test data.
I've no access to the tables or anything so it's proving to be a time consuming task!!
Is it required that all fields are given a value, even if they have a "DEFAULT" defined for them within the procedure. At the moment I'm using a rather cumbersome approach to this:
i.e.
With cmmAddRequest
.ActiveConnection = strConnect
.CommandType = adCmdText
.CommandText = strSQL
.Parameters(0).Direction = adParamInput
.Parameters(1).Direction = adParamInput
.Parameters(2).Direction = adParamInput
.Parameters(3).Direction = adParamOutput
.Parameters(4).Direction = adParamOutput
.Parameters(5).Direction = adParamOutput
.Parameters(0).Value = "COMP"
.Parameters(1).Value = "FRML"
.Parameters(2).Value = "1"
.Execute
WScript.Echo(.Parameters(5).Value)
End With -
How to use a variable between interfaces or class?
Hello All;
Far by now I can say that the forum is very helpful for me. Thanks for all the people who have the time and generosity to help our problems. Thank you.
Unfortunately I have a problem <Again :( >
I want to use a variable in two different *.java files.
Is it possible?
The Variable i want to use is; int CiftSayisi
The variable is declared in the CamCalib.Java under a button's Action Listener.
Here is the code;
public void actionPerformed(ActionEvent arg0) {
ImagePair.main(null);
String[] ImPath = list.getItems(); //Storing Items in an Array
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize(); //Dimensions of the Screen Storing in an object
int ScreenHeight = dim.height; //Definition ScreenHeight
int ScreenWidth = dim.width; //Definition ScreenWidth
// System.out.println(ScreenHeight); //Testing of the Dimensions
// System.out.println(ScreenWidth); //Testing of the Dimensions
int CiftSayisi = ImPath.length -1 ;
if (CiftSayisi == 0){
System.out.println("Added Images do not Construct a Pair");
else {
}Now i want to use it in another java file which is ImagePair.Java in the loading part of the interface;
setType(Type.UTILITY);
setTitle("Image Pair Selection");
setResizable(false);
setAlwaysOnTop(true);
setBounds(100, 100, 450, 68);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
textField = new JTextField();
textField.setBounds(61, 11, 22, 20);
textField.setEditable(false);
textField.setEnabled(false);
contentPane.add(textField);
textField.setColumns(2);I have a text field in here that i need to fill with the value of CiftSayisi
Any help please?
ömer kaya
METU-GGIT
Edited by: Ömer K. on Apr 10, 2012 12:43 AMI didn't bother reading the code, since you didn't format it.
But to answer your question (if I understand it correctly), yes, it is possible to pass variables between different object instances (not from an interface specifically, since interfaces don't have members). The simplest way to pass the variable as an argument to a method or constructor. If these aren't available, you could create a static global variable, though in a multithreaded app you'd have to synchronize access. -
SCEP - Using a variable in the Subject field
Hi
Has anyone out there successfully installed a SCEP certificate on an iOS device using a unique identifier of some sort in the subject field? We are using iPhone configuration utility but ultimately want to use Apple configurator.
We can install the certificate, but cannot get the common name (CN) to populate using something like the device serial number or UDID. We have tried variations on CN=SERIALNUMBER, CN=%SERIALNUMBER%, CN = %$UDID%, CN = $UDID$ but it just populates the field with the string itself rather than the device serial number or UDID.
I know others have posted similar issues on this forum:
https://discussions.apple.com/message/22162313#22162313
https://discussions.apple.com/message/22162318#22162318
https://discussions.apple.com/message/20635765#20635765
But no-one seems to have successfully managed this.
Any help or pointers would be greatly appreciated.
Thanks, MarkSimple answer... When I used the variable, I marked it as a string. There is an email address setting.
-
How to use the variables of Function exit in the include program
i have a problem of using the variables of a function exit in the include program..
If i use those variables there will be an error indicating 'Field FEBVW_IN is unknown. It is neither in one of the specified tables nor defined by a DATA statement'. Please help... Below is the code of the function exit:
FUNCTION EXIT_SAPLIEDP_202.
""Lokale Schnittstelle:
*" IMPORTING
*" VALUE(IDOC_CONTROL_INDEX)
*" VALUE(IDOC_DATA_INDEX)
*" VALUE(FEBVW_IN) LIKE FEBVW STRUCTURE FEBVW
*" VALUE(FEBKO_IN) LIKE FEBKO STRUCTURE FEBKO
*" VALUE(FEBEP_IN) LIKE FEBEP STRUCTURE FEBEP
*" VALUE(FEBRE_IN) LIKE FEBRE STRUCTURE FEBRE
*" VALUE(FEBPI_IN) LIKE FEBPI STRUCTURE FEBPI
*" EXPORTING
*" VALUE(I_FIMSG) LIKE FIMSG STRUCTURE FIMSG
*" VALUE(FEBVW_OUT) LIKE FEBVW STRUCTURE FEBVW
*" VALUE(FEBKO_OUT) LIKE FEBKO STRUCTURE FEBKO
*" VALUE(FEBEP_OUT) LIKE FEBEP STRUCTURE FEBEP
*" VALUE(FEBRE_OUT) LIKE FEBRE STRUCTURE FEBRE
*" VALUE(FEBPI_OUT) LIKE FEBPI STRUCTURE FEBPI
*" TABLES
*" IDOC_CONTROL STRUCTURE EDIDC
*" IDOC_DATA STRUCTURE EDIDD
*" IDOC_AVIP STRUCTURE AVIP OPTIONAL
*" IDOC_AVIR STRUCTURE AVIR OPTIONAL
*" IDOC_AVIT STRUCTURE AVIT OPTIONAL
*" CHANGING
*" REFERENCE(IDOC_AVIK) TYPE AVIK OPTIONAL
*" EXCEPTIONS
*" PROC_ERROR
INCLUDE ZXF08U10.
Here is the code for the include program.
INCLUDE ZXF08U10
MOVE febvw_in TO febvw_out.Sometimes you will get this error message when checking include code in exits even though there is really no error - it happens because the include does not realise it is in the function due to the navigation index being out of date.
Try activating the code - it may work even though the check said there were errors.
You can also get this issue when trying to drill down on the field in the include to view its structure.
Andrew -
How can I execute a Procedure with OUT variable is %ROWTYPE on SQL Prompt
Hi,
I have a procedure with OUT variable is %ROWTYPE
How can I execute the following procedure on SQL prompt.
(without creating anonymous block)
CREATE OR REPLACE PROCEDURE zz_sp_EMP(VEMPNO IN EMP.EMPNO%TYPE,
V_REC IN OUT EMP%ROWTYPE)
AS
BEGIN
SELECT * INTO V_REC FROM EMP WHERE EMPNO = VEMPNO;
END;
Thanks & Regards,
Nareshas previous posters said: it's not possible to do this without declaring a variable in the anonymous block.
With anonymous block it would look like this (had to change it a bit, since i'm using hr-schema on oracle XE):
declare
l_rec EMPLOYEES%ROWTYPE;
begin
zz_sp_EMP(VEMPNO => 100, V_REC => l_rec);
DBMS_OUTPUT.PUT_LINE ( 'first_name = ' || l_rec.first_name );
DBMS_OUTPUT.PUT_LINE ( 'last_name = ' || l_rec.last_name );
end;
first_name = Steven
last_name = King -
Using Shared Variables and Initialize Front Panel Binding (to PSP)
Hi,
I use LV DSC RT 8.2.1
I have a Vacuum System That includes signals from - Pumps failure, Valves status, Vacuum gauge, start Pump ...
Each signal is read by a FieldPoint.
All the relevant FieldPoint Channels are read by the Server (a computer in the Ethernet Network) and published to the network in the form of Shared Variables.
I have a client VI that is reading the Shared Variables published by the Server using Front Panel Binding.
Problem :
Some of the Bindings are in the mode 'Write &Read' and that causes some initialization problems.
For example - Valve #1 is Open, and then a User start running the Client VI, (the Valve #1 Status mode is 'Write & Read")
if in the VI the status of Valve #1 is closed (before running it) then the Valve status is changing to Closed.
I want the Client VI to first read the Physical status of the instrument and then to change the Value if the User changes it.
But that's seems to be a problem when using Front Panel Binding... (is it?)
I know I can Deploy a lvlib in the Client Side and Item Bind to the Shared Variables or Use DataSocket.
(Is DataSocket is a Reliable method when connecting to Shared Variables? What are the disadvantages when using DataSocket?)
What is recommended by those of you that are experienced or by NI ?
Sincerely Yours,
Amitai Abramson.Amitai Abramson,
Hello and thanks for using the NI Forums.
I'm glad that you've read the Using the LabVIEW Shared Variable Tutorial on our website. Check out these other resources:
Network Variable Technical Overview
Troubleshooting Network-Published Shared Variables
Why Do I See Unexpected Value Change Events for Shared Variables Using LabVIEW DSC?
All You Need to Know About Shared Variables
Creating a Value Change Event for Shared Variables
Alternative Method for Using Shared Variables Between Systems in LabVIEW 8.x
What Is The Difference Between Using Shared Variables And DataSocket VIs To Access OPC Tags?
The issue that you are seeing by having "Write & Read" bound items on both the server and client side is essentially a race condition, you don't know which one is being read/written at what time. To resolve this issue I would take a look at some of the documents below.
Using a Local, Global, or Shared Variable in Parallel Loops Can Cause Race Conditions
Using Local and Global Variables Carefully
Tutorial: Local Variable, Global Variable, and Race Conditions
Locking a Shared Resource or Variable in LabVIEW Using Semaphores
You mentioned not wanting to have two sets of shared variables (one on each side), but this is a great method to resovle this issue, that, or you can develope some sort of hand shaking to prevent these race conditions.
I would suggest that in the future when using these forums you try to ask only one question per thread and make it more concise. It's hard to tackle multiple questions and such broad questions as "I want to know all the ways that I can connect to Shared Variables, and I want to know the advantages and disadvantages." I suggest this because we want you to get your questions answered and more concise questions will result in quicker and better answers.
Message Edited by Ben S on 10-01-2009 06:05 PM
Ben Sisney
FlexRIO V&V Engineer
National Instruments -
Query don't use the right index when using bind variables
Hi people !
I need some help because I have an issue with a query that don t use the right Indexes as it should
First of all, I have mainly three tables :
ORDER : Table that contains description for each Order (approximately 1 000 000 Records)
ORDER_MVTS : Table that contains the tasks made (called movements) to set up each Orders
with quantity of packages prepared for each product (approximately 10 000 000 Records)
PRODUCT : Tables that contains the products (approximately 50 000 Records)
When I launch the query with hard coded values, it brings back response very fast
because it uses the right index (ORDER_DHR_VALID) which represent the date and hour of the order
(with format 'DD/MM/YYYY HH24:MI:SS'). The selectivity for this index is good.
NB 1: I have to use the trick " >= Trunc(date) and < trunc(date) +1 " to filter on a simple date because
the index contains hour and minutes (I know it wasn't probably a bright idea at conception time).
NB 2: The index on ORDER_MVTS.PRODUCT_CODE is'nt discriminating enough because there is'nt enough different products.
It's the same for index on CUSTOMER_CODE and on MVT_TYPE so only the index on ORDER.DHR_VALID is good.
Here is the correct explain plan when I execute the query with hard coded values :
SELECT SUM(ORDER_MVTS.NB_PACKAGE)
FROM ORDER_MVTS, PRODUCT, ORDER
WHERE ORDER.DHR_VALID >= TRUNC(to_date('14/11/2008 10:04:56','DD/MM/YYYY HH24:MI:SS'))
AND ORDER.DHR_VALID < TRUNC(to_date('14/11/2008 10:04:56','DD/MM/YYYY HH24:MI:SS')) + 1
AND ORDER_MVTS.MVT_TYPE = 'DELIVERY'
AND PRODUCT.CODE = ORDER_MVTS.PRODUCT_CODE
AND ORDER_MVTS.ORDER_CODE = ORDER.CODE
AND ORDER.CUSTOMER_CODE = 'ADIDAS'
AND PRODUCT.CODE = 1234
Rows Row Source Operation
1 SORT AGGREGATE
2 NESTED LOOPS
4 NESTED LOOPS
2 INDEX UNIQUE SCAN (object id 378548) --> PRODUCT_PK
4 TABLE ACCESS BY INDEX ROWID ORDER
777 INDEX RANGE SCAN (object id 378119) --> ORDER_DHR_VALID
2 TABLE ACCESS BY INDEX ROWID ORDER_MVTS
30 INDEX RANGE SCAN (object id 377784) --> ORDER_MVTS_ORDER_FK
Now the problem is when the query is used in a Cursor with bind variables.
It seems like Oracle don't use index on ORDER.DHR_VALID because he can't figure out that he have
to actually filter on a short period of time (only one day).
So Oracle uses the index on ORDER_MVTS.PRODUCT_CODE which is'nt a bright idea (it takes 10 secondes instead of just one)
Here is the bad explain plan :
Rows Row Source Operation
1 SORT AGGREGATE
2 NESTED LOOPS
722 NESTED LOOPS
2 INDEX UNIQUE SCAN (object id 378548) --> PRODUCT_PK
722 TABLE ACCESS BY INDEX ROWID ORDER_MVTS
1790 INDEX RANGE SCAN (object id 377777) --> ORDER_MVTS_PRODUCT_FK
2 TABLE ACCESS BY INDEX ROWID ORDER
1442 INDEX UNIQUE SCAN (object id 378439) --> ORDER_PK
Now I have found two solutions to this problem :
1) using a Hint to force the use of index on ORDER.DHR_VALID (with /*+ INDEX(ORDER ORDER_DHR_VALID) */ )
2) Using Dynamic SQL and keeping the date hard coded (but not the other values except mvt_type)
For example :
QUERY :=
'SELECT SUM(ORDER_MVTS.NB_PACKAGE)
FROM ORDER_MVTS, PRODUCT, ORDER
WHERE ORDER.DHR_VALID >= TRUNC(TO_DATE('''||To_char(P_DTE_VAL,'DD/MM/YYYY')||''',''DD/MM/YYYY'')) '||
AND ORDER.DHR_VALID < TRUNC(TO_DATE('''||To_char(P_DTE_VAL,'DD/MM/YYYY')||''',''DD/MM/YYYY'')) + 1 '||
AND ORDER_MVTS.MVT_TYPE = 'DELIVERY'
AND PRODUCT.CODE = ORDER_MVTS.PRODUCT_CODE
AND ORDER_MVTS.ORDER_CODE = ORDER.CODE
AND ORDER.CUSTOMER_CODE = :CUSTOMER
AND PRODUCT.CODE = :CODE ';
These two solutions work but Number 1 is bad in theory because it uses a Hint
and Number 2 may be difficult to code.
So my question is : Does someone knows another solution to force the use of index ORDER_DHR_VALID that can be simple and reliable.
Thank you very much for support
Edited by: remaï on Apr 1, 2009 4:08 PMWhat version of oracle you have? CBO work is different in 9i and 10g.
Usually cost based optimizer do not want to use index for >< condition with binding variables because optimizer can not use statistic to determine selectivity, and by default selectivity of <> operators is low.
(As I remember '>' selectivity by default is 5%, you have two conditions > and <, therefore resulting selectivity will be 0.05*0.05=0.0025 as two independent events, but selectivity of other conditions
ORDER_MVTS.MVT_TYPE = 'DELIVERY' or ORDER.CUSTOMER_CODE = 'ADIDAS' looks much better for CBO)
The best solution I see is do not use binding variables. Actually your query looks as searching query, which executes not so often, therefore you will not have perfomance win along of skipping execution plan creation.
Edited by: JustasVred on Apr 1, 2009 10:10 AM -
How to use a table name in the select statement using a variable?
Hi Everybody,
I got a internal table which has a field or a variable that gets me some tables names. Now I need to retrieve the data from all these tables in that field dynamically at runtime. So could you suggest me a way out to use the select query which uses this variable as a table ?
Regards,
Mallik.Hi all,
Actually i need some more clarification. How to use the same select statement, if i've to use the tabname in the where clause too?
for ex : select * from (tab_name) where....?
Can we do inner join on such select statements? If so how?
Thanks & Regards,
Mallik. -
Problem using local variable in event loop
I have a state machine from which I want to monitor various controls, including "Start" and "Stop" buttons. Not every state needs to monitor the controls. At present, most states run timed loops. In the first state that reads the front panel, I have an Event structure (inside a While loop) that monitors the various controls' Change Value events. For numeric controls, I update variables (in shift registers) as needed. The "Start" button is used to end the While loop controlling the Event structure, allowing the State to exit to the next state.
My problem comes in subsequent states that employ this same idea. Here, I put a Local Variable bound to the Start button and use the same code, but it frequently happens that when I enter this particular state, I cannot "turn on" the control -- I push the button, but it stays off. Curiously, if it was On when I enter, I can turn it off, but then I'm stuck not being able to turn it on.
I mocked up a very simply routine that illustrates this. There are two sequences (corresponding to the two states). Both use an Event loop with a local variable bound to my Stop button (really this is an LED control with custom colors). I've deliberately moved the "initialization" (the declaration of the control in the block diagram) out of the Event loops -- putting it inside the first loop modifies the behavior in another strange way.
Here's my thinking on how I would expect this to work: The code outside Event Loop 1 should have little effect. Assume the Stop button is initially Off. You will "sit" in Event Loop 1 until you push the Stop button, changing its value to True; this value will be passed out of the Event case and cause the first While loop to exit. You now enter the second sequence. As I understand the Exit tunnel, it defaults to "False", so I'd expect to stay in the second Event loop until I turn the Stop button from On to Off, which will pass out a False, and keep me in the While for one more button push. However, this doesn't happen -- I immediately exit, as though the "True" value of the Stop local variable is being seen and recognized by the Event loop (even though it hasn't changed, at least not in the context of this second loop).
An even more curious thing occurs if I start this routine with the Stop button turned on. Now I start in my Event loop waiting for a change, but this time the change will be from On to Off, which won't cause an exit from the frame. This will be reflected by having the While loop count increment. We should now be in the state of the example above, i.e. in an Event loop waiting for the control to be pushed again, and turned On. However, clicking the control has no effect -- I cannot get it to "turn on".
Where am I going astray in my thinking? What is it about this method of doing things that violates the Labview paradigm? As far as I can tell, what I'm doing is "legal", and I don't see the flaw in my reasoning, above (of course not -- otherwise I'd have fixed it myself!). Note that because I'm using local variables inside Event loops (and I'm doing this because there are two places in my code where I want to do such testing), the Stop control is not latching (as required). Is there something that gets triggered/set when one reads a latched control? Do I need to do this "manually" using my local variable?
I'll try to attach the simple VI that illustrates this behavior.
Bob Schor
Attachments:
Simple Stop Conundrum.vi 14 KBaltenbach wrote:
Ravens Fan wrote:
NEVER have multiple event structures that share the same events.
Actually, that's OK. NOT OK is having multiple event structures in the same sequence structure.
See also: http://forums.ni.com/ni/board/message?board.id=170&message.id=278981#M278981
That's interesting. I had always thought I read more messages discouraging such a thing rather than saying it was okay. Your link lead me to another thread with this message. http://forums.ni.com/ni/board/message?board.id=170&message.id=245793#M245793. Now that thread was mainly concentrating on registered user events which would be a different, but related animal.
So if you have 2 event structures they each have their own event queue? So if you have a common event, one structure pulls it off its event queue and it does not affect the other structure's event queue? I guess the inherent problem with this particular VI was that the second event structure locked the front panel. Since the code never got to that 2nd event structure because the first loop never stopped because the change was from true to false. After reading your post and the others, I did some experimentation and turned off the Lock front panel on the 2nd structure, and that prevented the lockup of the program.
Overall, the example VI still shows problems with the architecture and I think your answer should put the original poster on the right track. I think as a rule I would probably never put the same event in multiple structures, I feel there are better ways to communicate the same event between different parts of a program, but I learned something by reading your reply and about how the event structures work in the background. Thanks. -
Using a variable outside of the block it has been incremented
Hello everyone,
I came across a scenario where in I am having to use a variable (for summing up), outside of the block within which it has been incremented. Its something like below:
-------------- Header section of MS Word RTF (repeats for every page) -----------------------
For Each Header
<?xdoxslt:set_variable($_XDOCTX, 'TotalTax', 0)?>
-------------- Body section of MS Word RTF -----------------------
<?start:body?>
Lines Group
Increment TotalTax for each loop
End Lines Group
<?end body?>
-------------- Footer section of MS Word RTF (repeats for every page)-----------------------
<?xdoxslt:get_variable($_XDOCTX, 'TotalTax')?>
End For Each Group
---------------------------- End of template ----------------------------
The varaible 'TotalTax' is being declared in the header, incremented within the Body and is being used in the footer section. For the above mentioned syntax, the value being displayed for TotalTax is '0', i.e the value for which it has been defaulted while declaration.
Can someone please help me in getting it fixed such that TotalTax would display the value it was assigned in the Body rather than '0'.
Thanks,Hello and thank you for responding. I checked out the link you provided; however, my problem is not reviwed there.
I am setting a variable inside a <?start:body?>. Inside the body are several loops - which is fine. But it ends with <?end body?>. If I reference my variable BEFORE <?end body?> it retains it's value from the calculations within the program. But if I try to use the variable AFTER the <?end body?>, it give me an error "NULL" value or similar.
Any thoughts?
Rob
Maybe you are looking for
-
I've created my photo stream group of pictures and selected the contacts with whom to share them and I've posted them. What is the next step? How are the contacts notified?
-
Mass download of documents from SM to PC
Hi, I am using Solution Manger 4.0 Up to now, i am only able to download one document (already stored in SM) from SM to my PC. I would like to select N documents to download them at once on my PC. How to proceed ? Kind regards, Yann
-
Hi MM experts, where can i get the mm certification certification MODEL papers online. if any one having can u pls send me . to anthyodayaGMAIL.COM Tanks inadvance, Anthyodaya.
-
HT201471 I have an ipad 4th generation and my screen cracked but it still works how can I fix this
Hep please
-
Copy/Paste between guest and host system
I'm looking for the way to use the clipboard so that I can copy from host system to guest system. Is that possible? Thanks, Olivier.