Refcursor bind variables
Hi all
I have a variable refcursor, to which I will assign running queries.
All are defined (union) queries, with 5 or 6 selects the union, each select returns the same variable where clause. Value of the variable will be known at run time.
For example: (just an example)
{code}
Start
v_sql: = ' select col1, col2
of the Department
where dept_no =: 1
Union
Select col1, col2
of eur_dept
where dept_no =: 1
Union
Select col1, col2
of us_dept
where dept_no =: 1 ';
Open the v_ref_cur for v_sql using 20, 20, 20;
-rest of the logic
------------
-----------------
end;
{code}
Question is how to avoid the bind variable value repeat (in the open statement). Is there a way I can mention value 20 only once when the cursor is opened.
Thank you!
DS says:
Question is how to avoid the bind variable value repeat (in the open statement). Is there a way I can mention value 20 only once when the cursor is opened.
Yes - can be done using a dynamic anonymous block to create the refcursor (containing the SQL text), as oppose to the creation of the refcursor directly from the SQL text.
Not an approach I consider myself - unless there is absolutely no better way to address this particular issue.
SQL > var refcursor c.
SQL >
SQL > declare
News 2 sys_refcursor;
3. start
4 immediate execution
5 ' declare
6 varchar2 (4000) var1: =: 1; -/ / simple definition var - used several times
7. start
open 8: news for
9 select * from emp where mgr = var1
10 the union all the
11. Select * from emp where empno = var1;
12 end; »
13 using 7698-past the variable once
14 in the news; -getting refcursor as answer
15
16: c: = cur;
end 17;
18.
PL/SQL procedure successfully completed.
SQL >
SQL > print c
EMPNO, ENAME, JOB HIREDATE DEPTNO COMM SAL MGR
---------- ---------- --------- ---------- ------------------- ---------- ---------- ----------
7499 ALLEN SALESMAN 7698 1981/02/20 00:00:00 1600 300 30
7521 WARD SALESMAN 7698 1981/02/22 00:00:00 1250 500 30
7654 MARTIN SALESMAN 7698 1981/09/28 00:00:00 1250 1400 30
7844 TURNER SALESMAN 7698 1981-09-08 00:00:00 1500 0 30
7900 JAMES CLERK 7698 1981/12/03 00:00:00 950 30
7698 BLAKE MANAGER 7839 1981/05/01 00:00:00 2850 30
6 selected lines.
SQL >
Tags: Database
Similar Questions
-
Hello
Can anyone help with why I get BIND variable undeclared please?
Here is my file specifications:
create or replace
common package as
is of type recordList RECORD
(
recList VARCHAR2 (100)
);
type recordList_CV is ref cursor return recordList;
PROCEDURE generateRecord (p_owner IN VARCHAR2, p_tableName IN VARCHAR2, recMainlist IN OUT recordList_CV);
end;
File from SQLPlus:
-variable o VARCHAR2 (40);
-variable t VARCHAR2 (40);
var refcusror rc;
-: o: = 'keep ';
-: t: = "employees";
REM exec common.generateRecord(:o,:t,:rec);
execute common.generateRecord('store','employees',:rc);
print the RECS;
Output:
SQL > @common_test.sql
Use: VAR [IABLE] [< variable > [NUMBER |]] TANK | CHAR (n [CHAR |]) BYTE]) |
VARCHAR2 (n [CHAR |]) BYTE]) | NCHAR. NCHAR (n) |
NVARCHAR2 (n) | CLOB | NCLOB | BLOB | BFILE
REFCURSOR | BINARY_FLOAT TYPES | BINARY_DOUBLE]]
SP2-0552: Bind 'RC' variable not declared.
SP2-0552: Bind "REC" undeclared variable.
> var refcusror rc;
Check the spelling.
In addition, REC undeclared.
-
Estimate of poor cardinality using Bind Variables
Hi I'm using the 11.2.0.4.0 Oracle version. I have a query that is underway for the plan of the poor execution by the estimate of poor cardinality for two tables (I've extracted and published this part only) as I mentioned below, the individual conditions for which the estimate goes bad and moving entire query execution path.
These are for two tables and currently we use BIND variable for them in our code, and I notice, its best estimate gives with literals. I need to know how to handle this scenario that I need this query to execute for all types of volumes. Is there something I can do without changing the code, as it works well for most of the execution? In the current scenario of the main query that uses those below tables providing a plan (index + nested loop) that works very well for small volume, but running for 10 hr + for large volume as ideally its going to the same regime.
And Yes, most time that this request will be hit for small volume, but killing some appearance of large volume presents the performance of the queries.
Here are the values of the variable binding.B1 VARIABLE VARCHAR2 (32);
B2 VARIABLE VARCHAR2 (32);
B3 VARIABLE NUMBER;
B4 VARIABLE VARCHAR2 (32);
B7 VARIABLE VARCHAR2 (32);
B5 VARIABLE NUMBER;
B6 VARIABLE NUMBER;EXEC: B1: = 'NONE ';
EXEC: B2: = NULL;
EXEC: B3: = 0;
EXEC: B4: = NULL;
EXEC: B7: = NULL;
EXEC: B5: = 0;
EXEC: B6: = 0;---- For TABLE1------- -- Published Actual VS Etimated cardinality -- With bind values select * from TABLE1 SF WHERE ( (SF.C1_IDCODE = :B4) OR (NVL (:B4, 'NONE') = 'NONE')) AND ( (SF.C2_ID = :B3) OR (NVL (:B3, 0) = 0)); Plan hash value: 2590266031 ----------------------------------------------------------------------------------------------------------------------------------------------- | Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers | Reads | OMem | 1Mem | Used-Mem | ----------------------------------------------------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | | 28835 |00:00:00.08 | 2748 | 46 | | | | |* 1 | TABLE ACCESS STORAGE FULL| TABLE1 | 1 | 11 | 28835 |00:00:00.08 | 2748 | 46 | 1025K| 1025K| | ----------------------------------------------------------------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 1 - storage((("SF"."C1_IDCODE"=:B4 OR NVL(:B4,'NONE')='NONE') AND ("SF"."C2_ID"=:B3 OR NVL(:B3,0)=0))) filter((("SF"."C1_IDCODE"=:B4 OR NVL(:B4,'NONE')='NONE') AND ("SF"."C2_ID"=:B3 OR NVL(:B3,0)=0))) -- With literals select * from TABLE1 SF WHERE ( (SF.C1_IDCODE = null) OR (NVL (null, 'NONE') = 'NONE')) AND ( (SF.C2_ID = 0) OR (NVL (0, 0) = 0)); Plan hash value: 2590266031 -------------------------------------------------------------------------------------------------------------------------------------- | Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers | OMem | 1Mem | Used-Mem | -------------------------------------------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | | 28835 |00:00:00.03 | 2748 | | | | | 1 | TABLE ACCESS STORAGE FULL| TABLE1 | 1 | 28835 | 28835 |00:00:00.03 | 2748 | 1025K| 1025K| | -------------------------------------------------------------------------------------------------------------------------------------- --------For TABLE2 ----------------------- -- Published Autotrace plan, as it was taking long time for completion, and actual cardinality is 45M, but its estimating 49 With bind value--- --withbind value select * from TABLE2 MTF WHERE ( (MTF.C6_CODE = TRIM (:B2)) OR (NVL (:B2, 'NONE') = 'NONE')) AND ( (MTF.C3_CODE = :B1) OR (NVL (:B1, 'NONE') = 'NONE')) AND ( (MTF.C4_CODE = :B7) OR (:B7 IS NULL)) AND ( (MTF.C5_AMT <= :B6) OR (NVL (:B6, 0) = 0)) AND ( (MTF.C5_AMT >= :B5) OR (NVL (:B5, 0) = 0)); Execution Plan ---------------------------------------------------------- Plan hash value: 1536592532 ----------------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop | ----------------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 49 | 10437 | 358K (1)| 01:11:43 | | | | 1 | PARTITION RANGE ALL | | 49 | 10437 | 358K (1)| 01:11:43 | 1 | 2 | |* 2 | TABLE ACCESS STORAGE FULL| TABLE2 | 49 | 10437 | 358K (1)| 01:11:43 | 1 | 2 | ----------------------------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 2 - storage(("MTF"."C4_CODE"=:B7 OR :B7 IS NULL) AND ("MTF"."C3_CODE"=:B1 OR NVL(:B1,'NONE')='NONE') AND ("MTF"."C5_AMT"<=TO_NUMBER(:B6) OR NVL(:B6,0)=0) AND ("MTF"."C5_AMT">=TO_NUMBER(:B5) OR NVL(:B5,0)=0) AND ("MTF"."C6_CODE"=TRIM(:B2) OR NVL(:B2,'NONE')='NONE')) filter(("MTF"."C4_CODE"=:B7 OR :B7 IS NULL) AND ("MTF"."C3_CODE"=:B1 OR NVL(:B1,'NONE')='NONE') AND ("MTF"."C5_AMT"<=TO_NUMBER(:B6) OR NVL(:B6,0)=0) AND ("MTF"."C5_AMT">=TO_NUMBER(:B5) OR NVL(:B5,0)=0) AND ("MTF"."C6_CODE"=TRIM(:B2) OR NVL(:B2,'NONE')='NONE')) -- with literal select * from TABLE2 MTF WHERE ( (MTF.C6_CODE = TRIM (null)) OR (NVL (null, 'NONE') = 'NONE')) AND ( (MTF.C3_CODE = 'NONE') OR (NVL ('NONE', 'NONE') = 'NONE')) AND ( (MTF.C4_CODE = null) OR (null IS NULL)) AND ( (MTF.C5_AMT <= 0) OR (NVL (0, 0) = 0)) AND ( (MTF.C5_AMT >= 0) OR (NVL (0, 0) = 0)); Execution Plan ---------------------------------------------------------- Plan hash value: 1536592532 ----------------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop | ----------------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 45M| 9151M| 358K (1)| 01:11:41 | | | | 1 | PARTITION RANGE ALL | | 45M| 9151M| 358K (1)| 01:11:41 | 1 | 2 | | 2 | TABLE ACCESS STORAGE FULL| TABLE2 | 45M| 9151M| 358K (1)| 01:11:41 | 1 | 2 | ----------------------------------------------------------------------------------------------------------- select column_name,num_nulls,num_distinct,density from dba_tab_col_statistics where table_name='TABLE2' and column_name in ('C3_CODE','C4_CODE','C5_AMT','C6_CODE'); C3_CODE 0 65 0.0153846153846154 C4_CODE 0 2 0.5 C5_AMT 0 21544 4.64166357222429E-5 C6_CODE 1889955 71 0.0140845070422535
933257 wrote:
((SF. C1_IDCODE =: B4) OR (NVL (: B4, 'NONE') = 'NONE'))
In fact for literals, I did not find any section of the predicate after running the sql code with activation "set autotrace traceonly explain."
The main problem is with another large query whose cardinality is underestimated due to the presence of these table (table1, table2) with the above mentioned clause, and the query is for the analysis of index + nested with values of Bind loops and take 10 hr +, whereas with literals, its completion in ~ 8minutes with FTS + Hash Join.
Your real problem is that you try to have just a single SQL query handle all POSSIBLE thanks to the use of embedded FILTERS ' either / or ' filters in the WHERE clause. You want only a select this OPTION to run whatever filters have been selected at run time by the user or the application using it. And it would never work. You really need to SELECT different queries for different combinations of filter conditions.
Why? Think for a minute. How Oracle works internally? A SQL SELECT query gets analyzed and an execution plan is produced which is stored in the library cache and gets REUSED on all subsequent executions of this query - except in certain cases where there may exist several plans run through several cursors of the child. So with only SELECT a query you only AN execution plan in the library cache, to be used by all THE executions of this query, regardless of the value of your run-time binding variables.
Lets put another way - each library cache execution plan is associated with a SQL statement. If you want a DIFFERENT execution plan then you need run a DIFFERENT SQL statement. That's how you get a different execution plan - by running a different SQL statement. Running the SAME SQL query generally you will get the SAME execution plan every time.
In addition, because of the "either / or" filters that you use you will end up generally with a full Table Scan on each of the referenced tables. Why? Given that the optimizer must produce an implementation plan that manages all possible contingencies for all values of possible bind variables in the SELECT. If the optimizer should choose to use any index based on one of these "either / or" filters then it would only help performance when real value was provided, but it would be really bad if a NULL value was supplied. If the optimizer ends up ignoring the index because they are not always optimal for all possible input values and instead chose a plan that is "good enough" for all input values possible. That means that it will use a scanning Table full.
I hope you can see that it is precisely what is happening for you with your query. You select this OPTION to manage the different combinations of filter, which leads to the execution plan only one, which leads to scans full Table on the referenced tables in these ' either / or ' filters.
The solution? Build queries SELECT DIFFERENT when input values are NULL. How you do that? Read this article to ask Tom that tells you:
http://www.Oracle.com/technetwork/issue-archive/2009/09-Jul/o49asktom-090487.html
To sum up - when you have real value for a bind variable 'bind_var1' add the following filter to your CHOICE:
AND column_name1 =: bind_var1
When the binding variable is NULL, add the filter according to your CHOICE:
AND (1 = 1 OR: bind_var1 IS NULL)
Now, you'll have 2 queries SELECT must be performed, which have exactly the same number of variables in the same order bind, which is important. When you then run one of these variations, Oracle can analyze and optimize each one SEPARATELY, with a single execution by the SELECT query plan.
When you provide a real value, the filter is a normal 'column = value' that the optimizer can use all indexes on this column, because NULL values are not referenced.
When there is no real value, the optimizer will analyze the '1 = 1 GOLD' and realize that "1 = 1" is set to TRUE and GOLD, it is quite TRUE regardless because the binding variable is null or not. This means that the optimizer will actually REMOVE this filter, because it filters nothing because it is always TRUE. You will end up with an operating plan based on the other filters in the query, which is what you want because you have no filter on this column.
What is it - producing distinct SELECT queries to determine if you have a real value to filter or not you end up with DIFFERENT execution plans for each of them, and each of them is OPTIMAL for this particular set of filters. Now you get good performance for each variation of the performance of the SELECTION, rather than sometimes good and sometimes very bad when using SELECT only one. It is impossible to try to get multiple shots of execution 'optimal' out of a SELECT query. That's why you get mediocre performance under different bound the values of the variables.
John Brady
-
Estimates of cardinality for index range scan with bind variables
Oracle 11.2.0.4
I am struggling to explain that the cardinality estimates for a scan of the index systematic range when using the bind variable.
Consider the following query:
SELECT /*+ INDEX(t1) */ * FROM t1 WHERE source_id <= ?;
Cardinalities for the INDEX RANGE SCAN and ACCESS of the TABLE are the same for different literal predicates, for example, source_id < = 5:
------------------------------------------------------------------------------------ | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ------------------------------------------------------------------------------------ | 0 | SELECT STATEMENT | | 50 | 350 | 12 (0)| 00:00:01 | | 1 | TABLE ACCESS BY INDEX ROWID| T1 | 50 | 350 | 12 (0)| 00:00:01 | |* 2 | INDEX RANGE SCAN | IX1 | 50 | | 2 (0)| 00:00:01 | ------------------------------------------------------------------------------------ Predicate Information (identified by operation id): --------------------------------------------------- 2 - access("SOURCE_ID"<=5)
If a variable binding is used instead of a literal, the overall selectivity is 5%. However, why the optimizer based on CSSTidy gives a cardinality estimated 11 for the scan of the index systematic range? As with the predicates literal, surely the cardinalities of the index range scan and access table should be the same?
------------------------------------------------------------------------------------ | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | ------------------------------------------------------------------------------------ | 0 | SELECT STATEMENT | | 50 | 350 | 5 (0)| 00:00:01 | | 1 | TABLE ACCESS BY INDEX ROWID| T1 | 50 | 350 | 5 (0)| 00:00:01 | |* 2 | INDEX RANGE SCAN | IX1 | 11 | | 2 (0)| 00:00:01 | ------------------------------------------------------------------------------------ Predicate Information (identified by operation id): --------------------------------------------------- 2 - access("SOURCE_ID"<=TO_NUMBER(:A))
Unit test code:
CREATE TABLE t1 ( id NUMBER , source_id NUMBER ); CREATE INDEX ix1 ON t1 (source_id); INSERT INTO t1 SELECT level , ora_hash(level,99)+1 FROM dual CONNECT BY level <= 1000; exec DBMS_STATS.GATHER_TABLE_STATS(user,'T1') EXPLAIN PLAN FOR SELECT /*+ INDEX(t1) */ * FROM t1 WHERE source_id <= 5; SELECT * FROM TABLE(dbms_xplan.display); EXPLAIN PLAN FOR SELECT /*+ INDEX(t1) */ * FROM t1 WHERE source_id <= :a; SELECT * FROM TABLE(dbms_xplan.display);
There are various places where the optimizer uses an assumption, and lie unpeekable (and of Villa "unknowable value") introduced guess.
For unpeekable binds the conjecture for column<= {unknown}="" is="" 5%="" for="" table="" access="" (hence="" 50="" rows="" out="" of="" 1,000),="" but="" it's="" 0.009="" for="" index_column="">=><= {unknown},="" which="" means="" i="" was="" expecting="" to="" see="" 9="" as="" the="" row="" estimate="" on="" the="" index="" range="">=>
I just ran some quick tests, and EXPLAIN the PLAN seems to just use 0.011 selectivity in this case (in different versions of Oracle) although if we do the bind variable unpeekable at run time (and sample dynamic block etc.) optimization for execution is 0.009%.
Concerning
Jonathan Lewis
Update: and this is a very old reference to the 0.009 (and 0.0045 for ' between the ' when it is applied to a clue: cost based Oracle - access Chapter 4 single B-tree )
-
Bind Variables on the view objects child definition
JDeveloper 12 c
I have an interesting question. I have a view (AisWebModulePrivsVO) object that uses a bindvariable hardcoded in the view object.
SELECT * FROM SYS. DBA_ROLE_PRIVS where DEALER =: bvUserName
If I put this in the request module I can programmatically set the variable binding (view object contains the getter/setter for the binding variable).
AisWebModulePrivsVOImpl voTest = am.getAisWebModulePrivsVI ();
voTest.setbvUserName ("ARAWLS");
voTest.executeQuery ();
System.out.println ("test reports:" + voTest.getRowCount ());
and get the correct number of records based on return on the user and database roles. If it works.
What does NOT work, it is when this display object is a recording of 'the child' to another display object (as specified by a link between the two and by setting the object from a point of view as one child of the other in the module of the application).
AppModule looks like this:
CgRefCodesVO
AisWebModulePrivsVO
In this case, I have a view called cgRefCodeVO parent object. There is a link between this and the AisWebModulePrivsVO. The relationship works.
AISMenuAppModuleImpl m = ADFUtils.getApplicationModuleForDataControl (appMod) (AISMenuAppModuleImpl);
CgRefCodesVOImpl cgRefVO = am.getCgRefCodes1 ();
AisWebModulePrivsVOImpl modsVO = am.getAisWebModulePrivs1 ();
modsVO.setbvDBUserName ("ARAWLS"); This doesn't seem to work here...
cgRefVO.executeQuery ();
All lines rs = cgRefVO.getRowSet ();
RS. Reset();
While (rs.hasNext ()) {}
CgRefCodesVORowImpl CgRefRow = rs.next ((CgRefCodesVORowImpl));
System.out.println ("RvLowValue:" + CgRefRow.getAttribute ("RvLowValue"));
RowIterator aisModulesRowIter = CgRefRow.getAisWebModulePrivs ();
System.out.println ("number of children:" + aisModulesRowIter.getRowCount ());
}
The code compiles and runs. She translates: "County of the child: 0" for each row returned by the
I also tried:
VM VariableValueManager = modsVO.ensureVariableManager ();
vm.setVariableValue ("bvDBUserName", "ARAWLS");
And:
modsVO.setNamedWhereClauseParam ("bvDBUserName", "ARAWLS");
and (of ( )
@Override
protected void executeQueryForCollection (Object, object, Object [] object2, int i) {}
I coded everything hard to see if it would work.
setNamedWhereClauseParam ("bvDBUserName", "ARAWLS");
super.executeQueryForCollection (object, object2, i);
}
and from there, I changed around the order to execute the objects in view.
How can I set the variable binding in the object view child?
Thank you
Stuart
It is an interesting example how ADF works up to a certain point... then you need to start to make cuts to modify its behavior as you wish.
I decided that it was just easier to delete 'the child' parent (in the app module) and create a view of criteria on this subject for what would basically query the records to get the same results, like a child.
Perhaps not as elegant, but so much easier.
Thanks for your help.
Stuart
-
SQL * more substitution vs bind variable question
Hi all, I am trying to automate some SQL within SQL codes * more script that is triggered by a script .bat, the only parts that change are Dates...
example:
create table blah as
Select * from table
WHERE DATE between start_date and END_DAY;
the DATE is a numeric field, YYYYMMDD
The script runs always at the beginning of a new week, so a Monday, unless a public holiday, then a Tuesday.
The END_DAY is * always * last Friday and I realized that:
variable L_FRIDAY char (15);
Start
Select to_char (next_day(sysdate-7,'FRIDAY'), 'YYYYMMDD') as Last_Friday in: double L_FRIDAY;
end;
/
The thing is that I get an error when I try to use the binding variable?
create table blah as
Select * from table
WHERE DATE between start_date and: L_FRIDAY;
Then once I found the end date, I was going to use add_months(L_FRIDAY,-12) for previous 12 months for the start_date...
When I tried to use a variable Substitution I could just hard code the date, but I can not or do not know how to set the value of this exec to the variable?
Help!
:-)
Basically my research reveals that - Bind variables are not allowed for operations of data definition, use substutions instead of bind variables
I need an automated way to find the END_DAY which is last Friday and START_DATE that is 12 months before Friday and refer to those in the SQL without errors.
Hello
Kodiak_Seattle wrote:
Hi all, I am trying to automate some SQL within SQL codes * more script that is triggered by a script .bat, the only parts that change are Dates...
example:
create table blah as
Select * from table
WHERE DATE between start_date and END_DAY;
the DATE is a numeric field, YYYYMMDD
The script runs always at the beginning of a new week, so a Monday, unless a public holiday, then a Tuesday.
The END_DAY is * always * last Friday and I realized that:
variable L_FRIDAY char (15);
Start
Select to_char (next_day(sysdate-7,'FRIDAY'), 'YYYYMMDD') as Last_Friday in: double L_FRIDAY;
end;
/
The thing is that I get an error when I try to use the binding variable?
create table blah as
Select * from table
WHERE DATE between start_date and: L_FRIDAY;
Then once I found the end date, I was going to use add_months(L_FRIDAY,-12) for previous 12 months for the start_date...
When I tried to use a variable Substitution I could just hard code the date, but I can not or do not know how to set the value of this exec to the variable?
Help!
:-)
Basically my research reveals that - Bind variables are not allowed for operations of data definition, use substutions instead of bind variables
I need an automated way to find the END_DAY which is last Friday and START_DATE that is 12 months before Friday and refer to those in the SQL without errors.
Or SQL * more bind variable or variable substitution can be DATEs. The best you can do is set a different type, as a string, representing a date. A string as June 19, 2015"represents a date, but so strings like 'SYSDATE' and ' SYSDATE - 7', so you can do something like this:
SET l_friday = ' NEXT_DAY ((SYSDATE-7), 'FRIDAY').
DEFINE start_date = "ADD_MONTHS (& l_friday, - 12)"
SELECT & start_date AS t_n
, & l_friday AS l_f
OF the double
;
Output (when executed on 25 June 2015):
L_F T_N
----------- -----------
June 19, 2014 19 June 2015
-
R12 Extension with bind variables-how VO EO
Hello
I extended an APInvDistAllVO view object by adding two fields which are functions. Basically, in the invoice approval screen, I want to add two fields where the distribution of the invoice is shown.
the SQL contained in jdeveloper when you extend the VO object is different from the query, what I see in the invoice approval page by clicking on the APInvDistAllVO link. There are two bind variable: 1 = invoice_id and: 2 = line_number being added dynamically.
After the extension of the view object, the invoice distribution line is displayed as no record found. In my opinion, it is due to not having bind variables does not correct parameters being passed, and under this point of view object is an object depending on the invoice header record.
Will be very grateful if someone can provide the way forward in dealing with this situation.
Rgds
Fahad
User, please ask your question in the forum OA Framework .
Timo
-
EO base extension VO with bind variables and display - How To link
Hello
I extended an APInvDistAllVO view object by adding two fields which are functions. Basically, in the invoice approval screen, I want to add two fields where the distribution of the invoice is shown.
The SQL contained in jdeveloper when you extend the VO object is different from the query, what I see in the invoice approval page by clicking on the APInvDistAllVO link. There are two bind variable: 1 = invoice_id and: 2 = line_number being added dynamically. After the extension of the view object, the invoice distribution line is displayed as no record found.
In my opinion, it is due to not having bind variables does not correct parameters being passed, and under this point of view object is an object depending on the invoice header record. There is a link to the original View object as well. Will be very grateful if someone can provide the way forward in dealing with this situation.
Rgds Fahad
Hi AJ
He worked after changing the style of bind.
Thank you very much.
Rgds
Fahad
-
Passing literal as a bind variable in Jena
Hi all
We are able to use bind variable with the id RDFVID. However, if we want to check for a literal using the jena/joseki adapter we are not able to perform the same operation. In our case the literal is of type string.
We use:
* WLS 12.1.0.3.
* Adapter Jena 2.11.1.
* Joseki 3.4.4.
* ARQ 2.9.2.
We try to run the following query on the stop of joseki.
PREFIX foaf: http://xmlns.com/FOAF/0.1/ >
PREFIX vcard: http://www.w3.org/2001/vCard-RDF/3.0# >
PREFIX xsd: http://www.w3.org/2001/XMLSchema# >
PREFIX oext: < http://Oracle.com/Semtech/Jena-adaptor/ext/function# >
PREFIX ORACLE_SEM_FS_NS: http://Oracle.com/Semtech#no_fall_back, ALLOW_DUP = T, s2s >
PREFIX ORACLE_SEM_HT_NS: http://Oracle.com/Semtech#monitor >
PREFIX ORACLE_SEM_UEAP_NS: http://oracle.com/semtech#f$ RDFVID % 20 (ORACLE_ORARDF_RES2VID(?)) >
PREFIX ORACLE_SEM_UEPJ_NS: http://Oracle.com/Semtech#f $RDFVID >
PREFIX ORACLE_SEM_UEBV_NS: http://Oracle.com/Semtech# 'Lee' >
SELECT? f
WHERE
{graph? g {? vcard:N p? vn.}}
? VN vcard:Family? f.
? FOAF:title p 'Sen'.}
}
The result set is empty. Replace the line 'ORACLE_SEM_UEBV_NS PREFIX: <http://oracle.com/semtech# "Lee"> "by any Variant is to be given an error or the empty set. (Some variants (& quot;)) Lee & quot; Lee, "Lee" & #39; Lee & #39; )
When we use the generated SQL code of jena/joseki, we are able to get the right result if we execute the query even in SQLDeveloper. To use the variable binding is "Lee" (the binding variable is the price included). This will give you a correct result in withdrawal.
Kind regards
Max
Hi Max,.
In the area of the UEBV, you must put "Lee" encoded in URL string
Please, try the following and see if it helps.
% 22Lee % 22
Thank you
Zhe Wu
-
Bind variables in SPARQL WLS jena queries
Hi all
We read about the possibilities of support of jena to bind the variables in the documentation (http://docs.oracle.com/cd/E11882_01/appdev.112/e25609/sem_jena.htm#RDFRM248). The problem has been addressed in the next section on 14 June 2014 (Bind Variables in SPARQL queries). However, we are facing other problems.
We use:
* WLS 12.1.3.0.0
* adapter jena 2.11.1.
* Joseki 3.4.4.
* ARQ 2.9.2.
We try to run the following query on the stop of joseki.
PREFIX foaf: http://xmlns.com/FOAF/0.1/ >
PREFIX vcard: http://www.w3.org/2001/vCard-RDF/3.0# >
PREFIX ORACLE_SEM_FS_NS: http://Oracle.com/Semtech#no_fall_back, ODS = 6, ALLOW_DUP = T, s2s >
PREFIX ORACLE_SEM_HT_NS: http://Oracle.com/Semtech#monitor >
PREFIX ORACLE_SEM_UEAP_NS: http://Oracle.com/Semtech#f$ RDFVID % 20 to (?) >
PREFIX ORACLE_SEM_UEPJ_NS: http://Oracle.com/Semtech#f $RDFVID >
PREFIX ORACLE_SEM_UEBV_NS: http://Oracle.com/Semtech#1264839720472151591 >
SELECT? f? g
WHERE
{graph? g {? vcard:N p? vn.}}
? VN vcard:Family? f.
? FOAF:title p 'Sen'.}
}
However, the result that we get back does not use the variable binding. It returns the entire list without UEAP/UEPJ/UEBV.
Is there something that I missed in the documentation or should I define some variables for the use of bind variables?
Kind regards
Max
Hi Max,.
Can you please define the following JVM property to the WLS and restart the middle range?
-Doracle.spatial.rdf.client.jena.allowAP = true
This configuration is only necessary when running a variable binding based SPARQL query from a web service endpoint.
Let me know if this can help,
Zhe Wu
-
I am writing a process to delete records based on dates.
Here is the chart:
Column name Data type Nullable Default Primary key ID NUMBER NO. - 1 CT_NAME VARCHAR2 (100) Yes - - CT_CATEGORY VARCHAR2 (100) Yes - - BASE_PTS NUMBER Yes - - PROD_PTS NUMBER Yes - - REF_PTS NUMBER Yes - - START_DATE DATE Yes - - END_DATE DATE Yes - - CREATED_ON DATE Yes - - CREATED_BY VARCHAR2 (50) Yes - - UPDATED_ON DATE Yes - - UPDATED_BY VARCHAR2 (50) Yes - - start_date and end_date are the fields of date key.
The query will remove the dates with specific start and end dates. The question I have, is that I get a ORA-01858: a non-digit character was found here where was waiting for a digital error while the query is running.
remove from ct_point_values
where start_date =: P4_START_DATE_V
and end_date =: P4_END_DATE_V
If I run the query in the sql window, no problem:
remove from ct_point_values
where start_date =' 01 / 01/2014 '
and end_date = 31 December 2014"
Find the query with the works of values hard-coded. Links to fail. I tried casting and to_char to_date variations with no luck.
One thing that I notice, is that when I go to enter my bind variables in the sql workshop, the fields are pre-populated with this:
1 & amp; #x2F 1 & amp; #x2F; 2014
12 & amp; #x2F 31 & amp; #x2F; 2014
01/01/2014 and 31/12/2014. I found that the only element relates to this suggests that this is a possible bug:
SQL Bind Variables workshop - Date issues
Any thoughts on how to address this issue, or is it really a bug?
I run on Apex 4.2, 11g.
Thank you!
Hello
I guess that these dates come from elements on the page to which the user can select a range of dates.
These fields have a custom format mask?
What seems to be the case for me, is that these fields have an explicit format mask (for example: DD/MM/YYYY) but the default database/session format mask is something different (e.g. DD-MON-YYYY).
I suppose also that the issue in the SQL workshop isn't something related.
-
Convert SQL to take advantage of the Bind Variables
Hi all
Is it possible to convert the SQL below so I can enjoy variable Bind? It's just my personal way of followed by the name of the script that I use on a daily basis... the file is passed to a point that its about 2K lines long, and whenever I run this specific file to get a script name, it creates a new SQL in the database pool shared... I tried to change this option to use bind variables , but it doesn't seem to work properly and I wanted what suggestion of the community...
ACCEPT script_name_like prompt 'ENTER SCRIPT NAME OR HIT ENTER TO GET ALL SCRIPT NAME OR PUT PART OF THE SCRIPT NAME : ' WITH help_script AS ( SELECT 'top_seg_tab_obj_ash' AS Script_Name, 'top segment by tot wait time' AS Description, '# of mins to go back' AS INPUT FROM dual UNION ALL SELECT 'v$_tab' AS Script_Name, 'shows list v$ views' AS Description, 'view name like' AS INPUT FROM dual UNION ALL SELECT 'dba_tab' AS Script_Name, 'shows list dba views' AS Description, 'view name like' AS INPUT FROM dual UNION ALL SELECT 'nls_params' AS Script_Name, 'shows list of current NLS setting for DB/INST/SESS' AS Description, 'no Input Needed' AS INPUT ) SELECT upper(script_name) AS "MY SCRIPT NAME", upper(description) AS description, upper(INPUT) AS INPUT FROM help_script WHERE script_name LIKE nvl('%&script_name_like%', script_name) ;
Hello
user13454469 wrote:
Hi all
Is it possible to convert the SQL below so I can enjoy variable Bind? It's just my personal way of followed by the name of the script that I use on a daily basis... the file is passed to a point that its about 2K lines long, and whenever I run this specific file to get a script name, it creates a new SQL in the database pool shared... I tried to change this option to use bind variables , but it doesn't seem to work properly and I wanted what suggestion of the community...
- ACCEPT script_name_like invites ' ENTER NAME or HIT ENTER to GET ALL THE SCRIPT NAME or PART OF THE SCRIPT the SCRIPT NAME: '
- WITH help_script AS
- (SELECT "top_seg_tab_obj_ash" AS Script_Name,
- "upper segment by tot queue time" AS Description,.
- "# of minutes to go back" AS INPUT
- OF the double
- UNION ALL SELECT ' v$ _tab "AS Script_Name,.
- "Show list views$ v ' AS Description,.
- 'show the name as' AS ENTRY
- OF the double
- UNION ALL SELECT 'dba_tab' AS Script_Name,
- "Show list views dba" AS Description,.
- 'show the name as' AS ENTRY
- OF the double
- UNION ALL SELECT 'nls_params' AS Script_Name,
- 'displays the list of current NLS parameter for DB/INST/SESS' AS Description,.
- ("No input is necessary" IN ENTRY)
- SELECT upper (script_name) AS "MY SCRIPT NAME",
- Upper (Description) as a description,
- Upper (Input) AS INPUT
- OF help_script
- WHERE script_name AS nvl (script_name ' % & script_name_like %',);)
The WHERE clause (last line) of is the only place where you are using the proxy & script_name_like? If so:
-ACCEPT command is exactly the same as before
ACCEPT script_name_like invites ' ENTER NAME or HIT ENTER to GET ALL THE SCRIPT NAME or PART OF THE SCRIPT the SCRIPT NAME: '
VARIABLE script_name_like_b VARCHAR2 (30)
EXEC: script_name_like_b: = '% & script_name_like;
WITH the help _script AS
...
WHERE script_name AS NVL (: script_name_like_b, script_name);
-
When I go from ODP.NET to the ODP.NET managed some of my questions begins to throw errors missing bind variable.
I reproduced with a simple example that uses a variable called liaison: unitName
It's the example SQL:
SELECT
: unitName
Of
DOUBLE
Now, if I add a comment at the beginning of the SQL like this:
-Text with: unitName
SELECT
: unitName
Of
DOUBLE
It works, but if I have a variable binding in a comment that is located on a number of the 'same' line, I get ORA-01006:
This causes the error:
-First line comment
-Text with: unitName
SELECT
: unitName
Of
DOUBLE
Kind regards
-Tommy
I was able to reproduce this problem. I filed Bug 19433348 on your behalf.
The circumstances in which the bug occurs are fairly easy to get around.
(1) remove the colon in the second commented line.
(2) add a space between the '\n' and ' - '.
If you are one of those things, you won't encounter the bug behavior.
-
PLS-00049: bad bind variable 'NEW.col1' (col1 exists in the table)
I use Oracle 12 c. And a bad bind variable error in this statement.
create or replace
check_tax_number relaxation
INSERT BEFORE THE "C ##MYUSER". "customer" FOR EACH ROW
BEGIN
'0' IF new.taxpayer <>THEN
: new.taxnumber: = "123456789"; -error here...
END IF;
END;
I don't know which exists taxnumber customer in the table column.
Here's desc 'C ##MYUSER '. "" customer ".
Name of Type Null
--------------------------- -------- -------------
taxpayer NOT NULL NUMBER (1)
taxnumber NOT NULL NVARCHAR2 (10)
Other passes...
Thanks for help.
Based on the declaration of the customer table you posted columns are created in lowercase. Therefore, you must use the names of column between quotation marks:
create or replace
check_tax_number relaxation
INSERT BEFORE THE "C ##MYUSER". "customer" FOR EACH ROW
BEGIN
IF : new. " taxpayer""" <> '0' THEN
: new. " " "taxnumber""": = "123456789"; -error here...
END IF;
END;
SY.
-
Hello
I get this error during the execution of the following:
SQL > DECLARE
2
V_task VARIABLE 3: = "tache_338";
4
5 BEGIN
(6) DBMS_SQLPA.execute_analysis_task
TaskName 7 = >: v_task,.
8 execution_type = > "test run."
9 execution_name = > 'after_change');
10 END;
11.
SP2-0552: Bind "V_TASK" variable not declared.
How should I write this code?
Thank you.
Hello.
Note:
The use of Bind Variables
Bind variables are variables that you create in SQL * Plus and then the reference in PL/SQL or SQL. If you create a variable binding in SQL * Plus, you can use the variable as you would for a variable declared in your PL/SQL subprogram and access the variable from SQL * more. You can use bind variables for things such as the storage of return codes or debug your PL/SQL subprograms.
DECLARE
2
3 v_task vachar2 (32): = "tache_338";
4
5 BEGIN
(6) DBMS_SQLPA.execute_analysis_task
Task_Name 7-online v_task,
execution_type 8-online 'run test ',.
9 execution_name-online 'after_change');
10 END;
11.
See the link: DBMS_SQLPA
Maybe you are looking for
-
How to change the password to repair windows
I'm doing a repair with the xo windows recovery concloe, but can't remember the password to start the program from the instalation disc thre... How to work around the problem?
-
Ideas: Programs that you have problems with Intelli-studio supplied with the mini HD camcorder... get... MS Visual C++ Runtime Error abnormal program termination... I did all the MS suggested for this process eliminate without success... any ideas...
-
My sound is coming from my speakers integrated instead of through the headphone jack.
I'm 15 1270 ca and last night it froze while I was listening to music, forcing me to turn off manually by pressing the power button. When the computer is back, my sound out of my speakers instead of my external speakers through the headphone jack. I
-
None of the attachments on email will open. How can I solve this problem and I mirco soft office 7
-
Authentication is not invalid password
Hello I'm testing my application on the Simulator playbook by using the command line. I'm under the following line: BlackBerry-airpackager-package mybarfile.bar - installApp - launchApp myapp - app.xml myapp.swf - device deviceIP I then receive the f