How to use an array in a SQL Query
Hi
I need to use an array of numbers such as a VARRAY or Associated Index Array so that I can do the following SQL:
select *
from *
where array is null or id is in array
So that if the array is empty it will return all the records, and if the array is not empty then it will return only the rows associated with the ids in the array.
Is this possible?
Regards,
Néstor Boscán
Actually, solution I posted returns all rows when VARRAY is empty, not when it is null. To return all rows when VARRAY is null, use:
SQL> select ename
2 from emp
3 where deptno in (select * from table(cast(sys.OdciNumberList(10,30) as sys.OdciNumberList)))
4 or sys.OdciNumberList(10,30) is null
5 /
ENAME
ALLEN
WARD
MARTIN
BLAKE
CLARK
KING
TURNER
JAMES
MILLER
9 rows selected.
SQL> select ename
2 from emp
3 where deptno in (select * from table(cast(null as sys.OdciNumberList)))
4 or null is null
5 /
ENAME
SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER
ADAMS
ENAME
JAMES
FORD
MILLER
14 rows selected.
SQL> SY.
Similar Messages
-
How to Use the Procedures in a Sql Query
Hi Friends,
Can anyone help me out whether can we use the procedure in the sql query..
if yes help me out with an example
my requirement is
i have one sql query .. in which i need to use the procedure which returns multiple values... how can i overcome it,can anyone help me out for this..
for your reference i am pasting the sql query
SELECT paf.person_id
FROM per_all_assignments_f paf START WITH paf.person_id = p_person_id
AND paf.primary_flag = 'Y'
AND paf.assignment_type IN('E', 'C')
AND l_effective_date BETWEEN paf.effective_start_date
AND paf.effective_end_date
CONNECT BY PRIOR paf.supervisor_id = paf.person_id
AND paf.primary_flag = 'Y'
AND paf.assignment_type IN('E', 'C')
AND l_effective_date BETWEEN paf.effective_start_date
AND paf.effective_end_date
and paf.person_id not in (>>>I HAVE TO USE THE PROCEDURE HERE<<<<);
Thanks in advanceWe never saw your procedure, but maybe you could wrap it in a function
SQL> create or replace procedure get_members(in_something IN number, out_members OUT sys_refcursor)
is
begin
open out_members for
'select level member_id from dual connect by level <= :num' using in_something;
end get_members;
Procedure created.
SQL> create or replace type numbers as table of number;
Type created.
SQL> create or replace function members(in_something IN number)
return numbers
as
member_cur sys_refcursor;
members numbers;
begin
get_members(in_something, member_cur);
fetch member_cur bulk collect into members;
close member_cur;
return members;
end;
Function created.
SQL> select * from table(members(4));
COLUMN_VALUE
1
2
3
4
4 rows selected.Variant on same using piplined function
SQL> create or replace function members_piped(in_something IN number)
return numbers pipelined
as
member_cur sys_refcursor;
rec number;
begin
get_members(in_something, member_cur);
loop
fetch member_cur into rec;
exit when member_cur%notfound;
pipe row(rec);
end loop;
close member_cur;
return;
end;
Function created.
SQL> select * from table(members_piped(4));
COLUMN_VALUE
1
2
3
4
4 rows selected.
SQL> drop function members_piped;
Function dropped.
SQL> drop function members;
Function dropped.
SQL> drop type numbers;
Type dropped.
SQL> drop procedure get_members;
Procedure droppedEdit:
Sorry Blu, had not seen you already posted similar thing
Edited by: Peter on Jan 27, 2011 5:38 AM -
How to use the result of a sql query for a max () function
Hi
I wrote a query on which i wrote
"select max(id) from users "
how can i use the returned value.
if i made the var name ="userid"
can it be userid.rows[0] or what.
thnx for any helpHi!
The result of this query will be the max ID of users' IDs.
Let say we have:
String sql="select max(users.id) from users";
Statement st = ctx.conn.createStatement();
ResultSet rs = st.executeQuery(sql);
rs.next();
So you can get the max Id in the following way:
int maxId=rs.getInt("id");
Regards,
Rossi -
Use realational operators in an SQL query??????
does any one knows how to use realational operators in an SQL query??????
i wud like to do something like
select decode(2<3,sysdate,sydate +1) from dual
but i know decode does not supports relational operators......
thanx and Regards
amytYou can use a CASE statement which does support relational operators, or if you must use DECODE, then you can use something like:
SELECT DECODE(SIGN(2 - 3),-1,sysdate,sysdate - 1)
FROM dual;The SIGN function returns -1 if the expression is < 0, 1 if the expression is > 0 and 0 if the expression is 0. This works for numeric comparisions. You can use the GREATEST or LEAST functions in a similar fashion for character comparisions.
TTFN
John -
How to use Temporary Table in PL-SQL
In MySQL there is no Temporary table concept.
So for intermediate calculation I have created a table as below
create table SequenceTempTable
SessionId VARCHAR(50),
Sequence VARCHAR(500),
CreatedDate DATE
) ENGINE=MEMORY;
Whenever I invoke a SP, I load the data into SequenceTempTable using Session Id as below
CREATE PROCEDURE `GetSequence`(
IN Start_Date VARCHAR(25),
IN End_Date VARCHAR(25)
BEGIN
SELECT UUID() INTO v_SessionId;
INSERT INTO SequenceTempTable values (v_SessionId,'1,2,5,3',now());
required code
DELETE FROM SequenceTempTable WHERE SessionId = v_SessionId;
COMMIT;
END;
i.e. I have created a table as temporary table (created once),
and load the data using Session Id and once session specific intermediate computation done,
I deleted the session specific data.
Could you give me examples of How to use Temporary table in PL-SQL code with respect to my above example.
Because I have gone through creating Temporary table but I stuck with use in PL-SQL. I mean to say Is there any need of creating table in advance before invoking SP.
And one more thing as in MySQL temp table I created which is using MEMORY engine i.e. this table will always be in MEMORY so there is no need of writing data on disk.
Regards
SanjeevHi Sanjeev
Read about GTT here
http://www.oracle-base.com/articles/8i/TemporaryTables.php
GTT always contains just session specific data. \
In case you want to use the GTT in the same session again you can use option
ON COMMIT PRESERVE ROWS;
Or if it is used just once in the session use can use
ON COMMIT DELETE ROWS;
Do remember that for GTT the data of one session can not be accessed in other session.
Also you can go away with Delete from GTT if not used again in same session.
Regards
Arun -
How to use OracleDbType.Array provided by ODP with User defined type ?
Can anyone help me how to use OracleDbType.Array provided by ODP.NET ?
I need to pass string array to a oracle stored procedure .
User defined array type defined in oracle is :
CREATE TYPE TYPE_NAME IS TABLE OF varchar2(20) ;
This type is defined outside of any package , and i have tested that if definition of type is modified to
CREATE TYPE TYPE_NAME IS TABLE OF varchar2(20) index by binary_integer , i am able to pass array as AssociativeArray to my Stored Procedure.
But how to pass array object if the Type's definition does not contain index by clause ?
Please help how to pass Array object to Oracle Stored Procedure ?The solution described in Passing Array of UDT or Collection as IN OUT using OracleDbType.InputOutput
is working for me.
Edited by: stzueger on Jan 2, 2012 10:32 AM -
How to use Associative Array in sql query?
Hello,
I have a problem on using Associative Array variable on query; and my query is similar to the one below;
TYPE OTHERGENERICS IS TABLE OF NUMBER(10) INDEX BY BINARY_INTEGER;
othersGenerics OTHERGENERICS;
CURSOR cursor_othersGenerics IS
select master.GENERICCODEID
from ASMTRG_ARTICLEMASTER master
join ASMTRG_ARTICLEMAP map on MAP.ARTICLECODEID = MASTER.ID
group by MASTER.GENERICCODEID
minus
select FGG.GENERICCODEID
from asmtrg_icfocusgroup fg
join asmtrg_icfocusgrpchannel fgc on FGC.GROUPID = FG.ID and fgc.isactive=1
join asmtrg_icfocusgengroup fgg on FGG.GROUPID = FG.ID and FGg.ISACTIVE=1
where fgc.channelid=1 and fg.isactive = 1
group by FGG.GENERICCODEID;
BEGIN
OPEN cursor_othersGenerics;
FETCH cursor_othersGenerics BULK COLLECT INTO othersGenerics;
CLOSE cursor_othersGenerics;
SELECT icfrd.*,
CASE
WHEN EXISTS(select ta.genericcodeid from <???XXX???> ta where ta.genericcodeid = icfgrp.genericcodeid) THEN -1
ELSE icfrd.icfgroupid
END CLASSIFICATION
FROM ASMTRGVIW_ICFOCUSREPORTDATA icfrd
LEFT JOIN ASMTRG_ICFOCUSGROUP icfgrp on icfrd.ICFGROUPID = icfgrp.ID
WHERE (channelId IS NULL OR icfrd.CHANNELID = channelId)
AND (asmCodeId IS NULL OR icfrd.ASMCODEID = asmCodeId)
AND (yearId IS NULL OR icfrd.YEARID = yearId)
AND (monthId IS NULL OR icfrd.MONTHID = monthId)
END;
By the way this is a part of my function.
The "othersGenerics" is my associative array variable and <???XXX???> is the place where I need to use my "othersGenerics" array to check. So far I've tried
"select ta.genericcodeid from table(cast(otherGenerics as OTHERGENERICS)) ta where ta.genericcodeid = icfgrp.genericcodeid",
"select ta.genericcodeid from table(otherGenerics) ta where ta.genericcodeid = icfgrp.genericcodeid",
"select ta.genericcodeid from otherGenerics ta where ta.genericcodeid = icfgrp.genericcodeid"
and these are not working.
What is your suggestions?Your type will have to be created as an independent object in your schema. So CREATE TYPE cannot be in your function declaration, it has to be outside it. (And then the line inside your declaration that defines the type will have to be removed.)
But now I can see that you use this array as a kind of "temporary lookup table" - you populate the array and then use it for lookup in your select statement. An alternative way of doing this could be like this completely without arrays:
with othergenerics as (
select master.GENERICCODEID
from ASMTRG_ARTICLEMASTER master
join ASMTRG_ARTICLEMAP map on MAP.ARTICLECODEID = MASTER.ID
group by MASTER.GENERICCODEID
minus
select FGG.GENERICCODEID
from asmtrg_icfocusgroup fg
join asmtrg_icfocusgrpchannel fgc on FGC.GROUPID = FG.ID and fgc.isactive=1
join asmtrg_icfocusgengroup fgg on FGG.GROUPID = FG.ID and FGg.ISACTIVE=1
where fgc.channelid=1 and fg.isactive = 1
group by FGG.GENERICCODEID
SELECT icfrd.*,
CASE
WHEN EXISTS(select ta.genericcodeid from othergenerics ta where ta.genericcodeid = icfgrp.genericcodeid) THEN -1
ELSE icfrd.icfgroupid
END CLASSIFICATION
FROM ASMTRGVIW_ICFOCUSREPORTDATA icfrd
LEFT JOIN ASMTRG_ICFOCUSGROUP icfgrp on icfrd.ICFGROUPID = icfgrp.ID
WHERE (channelId IS NULL OR icfrd.CHANNELID = channelId)
AND (asmCodeId IS NULL OR icfrd.ASMCODEID = asmCodeId)
AND (yearId IS NULL OR icfrd.YEARID = yearId)
AND (monthId IS NULL OR icfrd.MONTHID = monthId)
...The with clause (subquery factoring) you can think of as a kind of temp table called othergenerics created "on-the-fly".
The optimizer may decide to actually create a temp table for you and use in the lookup, or it may decide to rewrite the query into suitable joins or nested loops or hashing - whatever the optimizer decides will be the optimal way of doing things :-)
So unless you use your array other places in your function, I would recommend dropping the array completely, skip populating an array, and instead use a with clause for your temporary lookup. -
How to use 'REQUEST' value on PL/SQL
Hi All,
I have assigned 'SEARCH' as button request to search button. I want to use this value in PL/SQL some thing like
IF REQUEST='SEARCH' THEN
--do something
ELSE
--do something else
END IF;
Can any one suggest how to access the 'REQUEST' value?
Thanks in advance.
Regards,
HariHi rchalton!
Sorry for that. Here is an english document which also shows an example of how to use v('REQUEST') or :REQUEST.
[http://download.oracle.com/docs/cd/E14373_01/appdev.32/e11838/concept.htm]
regards
Edited by: Florian W. on 06.04.2009 15:35
I've also tried to translate this link from german into english with google and it worked very good. -
How to use java class in pl/sql
Hai Guys,
here is my java class:
import java.io.*;
public class ListFiles
public static void main (String[] args)
File file=new File("C:\\");
File[] files=file.listFiles();
for(int fileInList=0; fileInList<files.length; fileInList++ )
System.out.println(files[fileInList].toString() );
i want to use this class in pl/sql, i am new about this topic my concern are following
how to load java class
how to use in pl/sql
Guys i'll be great-full to you if you could help me out or share link or document .First Read https://forums.oracle.com/forums/ann.jspa?annID=432
Check this link...
1. http://www.devshed.com/c/a/Oracle/Extending-PLSQL-with-Java-Libraries-concluded/
2. calling java from pl/sql in oracle 10g?its very urgent.
3. http://qamarsyed.blogspot.com/2010/07/calling-java-from-plsql-inside-oracle.html
4. http://home.c2i.net/toreingolf/oracle/java_and_plsql.htm
Hope this helps...
If someone response is helpful or correct, please mark it accordingly. -
How to use Javascript array in the JSP
hELLO Friends,
I am creating an String array using the values
in the list of a jsp page using Java script..
How can I use this array in the same jsp
file for processing...
any help in this regard would be highly appreciated.
thanks in Advance...
ashishyou cannot pass values from javascript to JSP without having to form-post to another JSP page.
-
Hi, i'm trying to automate a questionary using array.
// In the compositionReady for the stage
sym.actual = 0;
sym.arr = [ "Hi","Love","You" ] // This is my question array.
sym.checkArr = function(){ // this the function that i use to check whis question of the array i'm going to use.
sym.Question = arr[actual]; // i want to use the value "Hi", and then increase my "actual" var and then use the value "Love"
// In my symbol timeline i use a trigger, in that trigger i use
sym.stop();
sym.quest = sym.getComposition().getStage().Question; // I'm getting the Question value;
sym.$("Ask").html(quest ); //"Ask" is an empty textfield;
sym.getComposition().getStage().actual ++; // Increase "actual" for the nex time.
But the code doesn't work, i think the problem is the way i use the array index.
Please help!
Thanks =)Hi there,
chino_10 wrote:
in te timeline trigger why did you use a local variable?
It's good practice to use local variables whenever possible. The quest variable will only apply to that trigger, and it won't carry over to another trigger in the same timeline. So when using a trigger to set the HTML of a text element in the same timeline, I find it cleaner to assign a new HTML value from a local variable.
chino_10 wrote:
and if you are calling the global variable "actual" from de compositionReady handler why didn'y you call it with all the path like "sym.getComposition().getStage().actual ++;"?
I think maybe I didn't express it as clearly as I could have. When you declare sym.actual in compositionReady, you actually have declared a variable scoped to the main stage symbol - it's not a global variable. To declare a global variable (which is not always best practice), your code in compositionReady would be:
actual = 0;
This actual variable would now be accessible from any element/symbol in the composition simply by assigning a value to actual. You may see how this could quickly get messy.
So getting back to variable scope: if you declare a symbol variable using sym.varName, then any element in the same scope can call it using sym.varName. So your main timeline triggers can call it without using the full addressing of sym.getComposition().getStage().actual++. Instead, you could just use sym.actual++. Less code, and easier to read. But if you wanted to call it from another symbol (outside of the scope of the main stage), then you'd have to use the full addressing to actually address the variable, i.e., sym.getComposition().getStage().actual ++.
hth,
Joe -
Morning all,
I am trying to setup an array of numbers however, by looking at the crystal reports help file, I cannot find out how to set one up.
I have created a new formula and inserted
Local NumberVar Array x := MakeArray (1, 2, 3, 4, 5);
however, it says you cannot set a result to an array.
I have also looked at the Array help, but Crystal shows a VB syntax instead of Crystal. (How helpful to show VB syntax in CR!)
My question is how can you use an array in your report that it shows numbers 1-5?
many thanks
Kind Regards
JehanzebThe question is - what you want to do with this array. Your code is correct , beside that you need to return something from formula and that needs to be discrete value.
Local NumberVar Array x := MakeArray (1, 2, 3, 4, 5);
"test" -
How to use open Row set in sql server 2014
Hello All,
How to open the row set using sql server 2014 using link server connection.Hi denyy,
Are you referring to the OPENROWSET function in SQL Server 2014?
The OPENROWSET method is an alternative to accessing tables in a linked server and is a one-time, ad hoc method of connecting and accessing remote data by using OLE DB. The examples below demonstrate how to use the OPENROWSET function:
A. Using OPENROWSET with SELECT and the SQL Server Native Client OLE DB Provider
SELECT a.*
FROM OPENROWSET('SQLNCLI', 'Server=Seattle1;Trusted_Connection=yes;',
'SELECT GroupName, Name, DepartmentID
FROM AdventureWorks2012.HumanResources.Department
ORDER BY GroupName, Name') AS a;
B. Using the Microsoft OLE DB Provider for Jet
SELECT CustomerID, CompanyName
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'C:\Program Files\Microsoft Office\OFFICE11\SAMPLES\Northwind.mdb';
'admin';'',Customers);
GO
C. Using OPENROWSET to bulk insert file data into a varbinary(max) column
USE AdventureWorks2012;
GO
CREATE TABLE myTable(FileName nvarchar(60),
FileType nvarchar(60), Document varbinary(max));
GO
INSERT INTO myTable(FileName, FileType, Document)
SELECT 'Text1.txt' AS FileName,
'.txt' AS FileType,
* FROM OPENROWSET(BULK N'C:\Text1.txt', SINGLE_BLOB) AS Document;
GO
D. Using the OPENROWSET BULK provider with a format file to retrieve rows from a text file
SELECT a.* FROM OPENROWSET( BULK 'c:\test\values.txt',
FORMATFILE = 'c:\test\values.fmt') AS a;
Reference:
OPENROWSET (Transact-SQL)
Using the OPENROWSET function in SQL Server
Thanks,
Lydia Zhang
If you have any feedback on our support, please click
here. -
How to Use name_in in the Pl/sql library
Dear all,
I have made a Pl/sql library to disable and enable items on the form
and when i use set_item_property on some items it gives me an error " no such property for set_item_property", but i think its cause i am trying to set property for an item which is a current item
how i can avoid this error?
and do i have to user :system.current_item
and how i can use it in the Pl/sql library is it like this? name_in('system.current_item');
best regards,
ShoooshHi
Here is a sample code check it out
procedure rp_set_attr (p_field_name in varchar2, p_flag in varchar2) is
-- p_flag : H - Hidden,
-- V - Visible,
-- D - Disabled,
-- EM - Enabled Mandatory,
-- EN - Enabled Non-Mandatory
v_blk_id block := find_block(p_field_name);
v_it_id item := find_item(p_field_name);
begin
if not id_null(v_blk_id) then
if nvl(p_flag,'N') = 'D' then
set_block_property (p_field_name, insert_allowed, property_false);
set_block_property (p_field_name, update_allowed, property_false);
set_block_property (p_field_name, delete_allowed, property_false);
else
set_block_property (p_field_name, insert_allowed, property_true);
set_block_property (p_field_name, update_allowed, property_true);
set_block_property (p_field_name, delete_allowed, property_true);
end if;
else
if not id_null(v_it_id) then
if p_flag = 'H' then
set_item_property (p_field_name, visible, property_false);
else
if get_item_property (p_field_name, visible) = 'FALSE' then
set_item_property (p_field_name, visible, property_true);
end if;
if get_item_property (p_field_name, item_type) = 'BUTTON' then
if p_flag = 'D' then
set_item_property (p_field_name, enabled, property_false);
else
set_item_property (p_field_name, enabled, property_true);
end if;
elsif get_item_property (p_field_name, item_type) <> 'DISPLAY ITEM' then
if p_flag = 'D' then
set_item_property (v_it_id, enabled, property_false);
set_item_property (v_it_id, visual_attribute, 'DISPLAY_ITEM');
else
set_item_property (v_it_id, enabled, property_true);
set_item_property (v_it_id, navigable, property_true);
set_item_property (v_it_id, updateable, property_true);
if get_item_property (p_field_name, item_type) <> 'RADIO GROUP' then
set_item_property (v_it_id, queryable, property_true);
end if;
if p_flag = 'EM' then
set_item_property (v_it_id, visual_attribute, 'MANDATORY_ATTR');
if get_item_property (p_field_name, item_type) = 'LIST' then
set_item_property (v_it_id, required, property_true);
end if;
elsif p_flag = 'EN' then
set_item_property (v_it_id, visual_attribute, 'NON_MANDATORY_ATTR');
if get_item_property (p_field_name, item_type) = 'LIST' then
set_item_property (v_it_id, required, property_false);
end if;
end if;
end if;
end if;
end if;
else
rp_err ('3','19', p_field_name || ' Field Name ');
end if;
end if;
end;
Regards
Nagaraj -
How to capture a parameter value in SQL QUERY of scale marker using GO URL
Hi,
Can any one please tell me how to capture the parameter value from go url inside Where clause of Scale Marker.
I am trying to sift the position of scale marker based on SQL Query.
Thanks-Bhaskar Gouda.
Edited by: 961171 on Sep 25, 2012 12:33 AMSince this is a synchronous interface, where source is a soap(proxy) call and target is JDBC in the first mapping both of them are request scenarios.
Source Structure:
RootNode
Request 1...unbounded
No_of_Days 1.1 String
Target Structure:
RootNode
Statement
TableName
Action mapped to SQL_QUERY
Access - SELECT DISTINCT AL.EC_NO,DP.DATE_TO_FORMAL FROM T_APPLICATION_LIST AL,(SELECT DE.EC_NO AS "EC_NO", DE.PACKAGE_NO AS "PACKAGE_NO",PC.DATE_TO_FORMAL AS "DATE_TO_FORMAL" FROM DAICYO_ECNO DE,PACKAGECTL PC WHERE DE.PACKAGE_NO = PC.PACKAGE_NO AND PC.DATE_TO_FORMAL > (TRUNC(SYSDATE) - to_number('$No_Of_DAYS$'))) DP WHERE AL.EC_NO IN (SELECT EC_NO FROM DAICYO_ECNO WHERE PACKAGE_NO IN (SELECT PACKAGE_NO FROM PACKAGECTL WHERE DATE_TO_FORMAL > (TRUNC(SYSDATE) - to_number('$No_Of_DAYS$')))) AND (AL.FAMILY = '' or '' is null and AL.FAMILY is not null ) and DP.EC_NO = AL.EC_NO ORDER BY DATE_TO_FORMAL
Key
No_Of_Days 1..1 String
In Return I am expecting a JDBC response from the Oracle Database as:
Source Structure:
RootNode
STATEMENT_response 1...unbounded
row 0...undbounded
EC_NO 1..1 String
Target Structure:
RootNode
RESPONSE
row
EC_NO 1..1 String
Maybe you are looking for
-
How do I authorize my new mac book so i can download previously purchased music to this device
How do you "authorize" a new computer on Itunes so that you can download previously purchased music to a new computer? Thanks
-
Updating of QM info structures on the basis of inspection lot creation date
Dear Gurus, Our business requirement is as follow: Suppose MM has received 10 consignment of a material (Goods receipt) against a material in month of Feb-2008 from a particular vendor. Inspection lot statistics in MCXA is updated on the basis of ins
-
How do you make a ringtone in iTunes for your phone on a mac computer
How can I make ringtones on my phone with my mac computer
-
Database mirroring with witness server and availability set
Hi, I got two VMs Sql1 and Sql2 with mirroring between them, they are in the same availability to achieve 99.95% SLA. My mirroring config requires a witness server, while configuring a witness server you can specify only one server. From what I read
-
Hi! Can any one tell me why there is a need to go for BDC in Inbound IDOC Processing. We can directly take the data from Fun Module & update the database why there is need for BDC. Thanks Rahul