Xquery to return distinct values in xml
Hi,
I have a requirement, where in i have to get distinct values from an xml file.
EX: Input
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Main xmlns="http://www.abc.org.com/FormDetails">
<abcd first="1" second="2"/>
<Fruits>
<fruit name="banana" color="green">
<fruit name="apple" color="red">
<fruit name="grape" color="green">
<fruit name="apple" color="red">
<fruit name="banana" color="green">
<fruit name="apple" color="red">
<fruit name="grape" color="green">
<fruit name="orange" color="orange">
<fruit name ="lemon" color="yellow">
</Fruits>
<Fruits>
<fruit name="banana" color="green">
<fruit name="apple" color="red">
<fruit name="grape" color="green">
<fruit name="apple" color="red">
<fruit name="banana" color="green">
<fruit name="apple" color="red">
<fruit name="grape" color="green">
<fruit name="orange" color="orange">
<fruit name ="lemon" color="yellow">
</Fruits>
<Fruits>
<fruit name="banana" color="green">
<fruit name="apple" color="red">
<fruit name="grape" color="green">
<fruit name="apple" color="red">
<fruit name="banana" color="green">
<fruit name="apple" color="red">
<fruit name="grape" color="green">
<fruit name="orange" color="orange">
<fruit name ="lemon" color="yellow">
</Fruits>
</Main>
Required output: String
banana = green|apple = red| grape=green|orange=orange|lemon=yellow
I have used this xquery:
declare namespace xf = "http://tempuri.org/abcorg/Transformations/Distinct_Fruits/";
declare namespace ns = "http://www.abc.org.com/FormDetails";
declare function xf:Distinct_Fruits($fruits as element(ns:Main))
as xs:string{
for $d in distinct-values($fruits//ns:fruit/@name)
return "{$d} ="
for $e in distinct-values($fruits//ns:fruit/@color)
return "{$e}|"
declare variable $fruitsas element(ns:Main) external;
xf:Distinct_Member($fruits)
I am getting error like:
Error executing the XQuery transformation: line 11, column 1: {err}FORG0005: expected exactly one item, got 2+ items
Please let me know where It went wrong.
Thanks..
Edited by: user12679330 on Jul 12, 2011 4:47 AM
Hi,
Please let me know where It went wrong.The function's return value is declared as a string but you're actually returning sequences of string literals.
One way to achieve that is using string-join function :
(here for testing purpose, I used an external $doc variable)
declare namespace xf = "http://tempuri.org/abcorg/Transformations/Distinct_Fruits/";
declare default element namespace "http://www.abc.org.com/FormDetails";
declare function xf:Distinct_Fruits( $fruits as element(Fruits)* )
as xs:string
string-join(
for $d in distinct-values($fruits/fruit/@name)
return concat($d, " = ", $fruits/fruit[@name=$d][1]/@color)
, "|"
xf:Distinct_Fruits($doc/Main/Fruits)Note that I assumed that a fruit with a given name will always have the same color.
If that's not the case and you might have something like :
<Main>
<abcd first="1" second="2"/>
<Fruits>
<fruit name="banana" color="green"/>
<fruit name="apple" color="red"/>
<fruit name="grape" color="green"/>
<fruit name="apple" color="red"/>
<!-- here is a red banana! -->
<fruit name="banana" color="red"/>
<fruit name="apple" color="red"/>
<fruit name="grape" color="green"/>
<fruit name="orange" color="orange"/>
<fruit name ="lemon" color="yellow"/>
</Fruits>
</Main>then the solution is to use deep-equal function to test if two nodes are identical (as per their values, attributes and children) :
declare function xf:Distinct_Fruits( $fruits as element(Fruits) )
as xs:string
string-join(
for $i in $fruits/fruit
let $f := $i[not(some $x in $i/preceding-sibling::fruit satisfies fn:deep-equal($x,.))]
where ($f)
return concat($f/@name, " = ", $f/@color)
, "|"
};which gives :
banana = green|apple = red|grape = green|banana = red|orange = orange|lemon = yellowEdited by: odie_63 on 12 juil. 2011 14:43 - changed first example to reflect sample modification
Similar Messages
-
XMLTABLE function not returning any values if xml has attribute "xmlns"
Hi,
XMLTABLE function not returning any values if xml has attribute "xmlns". Is there way to get the values if xml has attribute as "xmlns".
create table xmltest (id number(2), xml xmltype);
insert into xmltest values(1,
'<?xml version="1.0"?>
<emps>
<emp empno="1" deptno="10" ename="John" salary="21000"/>
<emp empno="2" deptno="10" ename="Jack" salary="310000"/>
<emp empno="3" deptno="20" ename="Jill" salary="100001"/>
</emps>');
insert into xmltest values(2,
'<?xml version="1.0"?>
<emps xmlns="http://emp.com">
<emp empno="1" deptno="10" ename="John" salary="21000"/>
<emp empno="2" deptno="10" ename="Jack" salary="310000"/>
<emp empno="3" deptno="20" ename="Jill" salary="100001"/>
</emps>');
commit;
SELECT a.*
FROM xmltest,
XMLTABLE (
'for $i in /emps/emp
return $i'
PASSING xml
COLUMNS empno NUMBER (2) PATH '@empno',
deptno NUMBER (3) PATH '@deptno',
ename VARCHAR2 (10) PATH '@ename',
salary NUMBER (10) PATH '@salary') a
WHERE id = 1;
The above query returning results but below query is not returning any results because of xmlns attribute.
SELECT a.*
FROM xmltest,
XMLTABLE (
'for $i in /emps/emp
return $i'
PASSING xml
COLUMNS empno NUMBER (2) PATH '@empno',
deptno NUMBER (3) PATH '@deptno',
ename VARCHAR2 (10) PATH '@ename',
salary NUMBER (10) PATH '@salary') a
WHERE id = 1;
how to get rid out of this problem.
Thanks,
-ManiAdded below one in xmltable, its working now.
XmlNamespaces(DEFAULT 'http://emp.com') -
Query or function that returns distinct values and counts
For the following table:
ID number
address varchar(100)
Where the ID is the primary key and addresses might be repeated in other rows, I'd like to write a query that returns distinct addresses and the count for the number of times the address exists in the table. What's the best way to do this? Thank you in advance.Jlokitz,
select address, count(*)
from table
group by address;
HTH
Ghulam -
I have SSRS parametarized report in that one data set have repeated values with query parameter . but while am mapping that query
parameter to report parameter i need to pass distinct values. How can i resolve thisHi nancharaiah,
If I understand correctly, you want to pass distinct values to report parameter. In Reporting Service, there are only three methods for parameter's Available Values:
None
Specify values
Get values from a query
If we utilize the third option that get values from a dataset query, then the all available values are from the returns of the dataset. So if we want to pass distinct values from a dataset, we need to make the dataset returns distinct values. The following
sample is for your reference:
Select distinct field_name from table_name
If you have any other questions, please feel free to ask.
Thanks,
Katherine Xiong
Katherine Xiong
TechNet Community Support -
Distinct-values() in XQuery
According Q4, 1.1.9.4 in XML Query User Case and Oracle magazine (May2003), the function should be all right. Why the following XQuery can not be excuted in command line?
Error message:
XQE: unknown function 'distinct-values'
Thanks a lot!
<dataroot>
let $a := document("Orders.xml")/dataroot/Orders
for $o in distinct-values($a/CusomerID),
$c in document("Customers.xml")/dataroot/Customers
where $c/CustomerID = $o/CustomerID
return
<Customer>
{ $c/CustomerID }
{ $c/CustomerName }
</Customer>
</dataroot>Hi,
Please let me know where It went wrong.The function's return value is declared as a string but you're actually returning sequences of string literals.
One way to achieve that is using string-join function :
(here for testing purpose, I used an external $doc variable)
declare namespace xf = "http://tempuri.org/abcorg/Transformations/Distinct_Fruits/";
declare default element namespace "http://www.abc.org.com/FormDetails";
declare function xf:Distinct_Fruits( $fruits as element(Fruits)* )
as xs:string
string-join(
for $d in distinct-values($fruits/fruit/@name)
return concat($d, " = ", $fruits/fruit[@name=$d][1]/@color)
, "|"
xf:Distinct_Fruits($doc/Main/Fruits)Note that I assumed that a fruit with a given name will always have the same color.
If that's not the case and you might have something like :
<Main>
<abcd first="1" second="2"/>
<Fruits>
<fruit name="banana" color="green"/>
<fruit name="apple" color="red"/>
<fruit name="grape" color="green"/>
<fruit name="apple" color="red"/>
<!-- here is a red banana! -->
<fruit name="banana" color="red"/>
<fruit name="apple" color="red"/>
<fruit name="grape" color="green"/>
<fruit name="orange" color="orange"/>
<fruit name ="lemon" color="yellow"/>
</Fruits>
</Main>then the solution is to use deep-equal function to test if two nodes are identical (as per their values, attributes and children) :
declare function xf:Distinct_Fruits( $fruits as element(Fruits) )
as xs:string
string-join(
for $i in $fruits/fruit
let $f := $i[not(some $x in $i/preceding-sibling::fruit satisfies fn:deep-equal($x,.))]
where ($f)
return concat($f/@name, " = ", $f/@color)
, "|"
};which gives :
banana = green|apple = red|grape = green|banana = red|orange = orange|lemon = yellowEdited by: odie_63 on 12 juil. 2011 14:43 - changed first example to reflect sample modification -
Retrieve Distinct Values using XQuery
The following query is returning me duplicate rows. How can we retrieve the distinct values? Can we use Distinct somewhere in this query? Please help me.
SELECT XMLQuery('<Update>
{ for $demo in (ora:view("TableA")),
$demo_audit in ora:view("TableA_AUDIT")
let $demo_id := $demo/ROW/ID/text(),
$demo_audit_trans_date := $demo_audit/ROW/DATE/text(),
$demo_audit_id := $demo_audit/ROW/ID/text(),
$demo_audit_type := $demo_audit/ROW/TYPE/text()
where $demo_id = $demo_audit_id and
$demo_audit_type = "U"
return
<result>
<type>U</type>
<id>{$demo_id}</id>
</result>}</Data>' RETURNING CONTENT)
FROM dual;Geoff,
I tried distinct-values in both let and return; however the result isn't distinct. Is the usage correct?
SELECT XMLQuery('<Update>
{for $a in ora:view("EMP")
let $a_empno := distinct-values($a/ROW/EMPNO/text()),
$a_ename := $a/ROW/ENAME/text(),
$a_job := $a/ROW/JOB/text(),
$a_mgr := $a/ROW/MGR/text(),
$a_deptno := distinct-values($a/ROW/DEPTNO/text())
return
<op>
<empno>{distinct-values($a_empno)}</empno>
<name>{$a_ename}</name>
<deptno>{distinct-values($a_deptno)}</deptno>
</op>}
</Update>'
RETURNING CONTENT)
FROM dual;
The output generated is given below:
<Update>
<op>
<empno>1</empno>
<name>Henry</name>
<deptno>10</deptno>
</op>
<op>
<empno>1</empno>
<name>Henry1</name>
<deptno>10</deptno>
</op>
</Update> -
XQuery: Retrieve Distinct Values
The following query is returning me duplicate rows. How can we retrieve the distinct values? Can we use Distinct somewhere in this query? Please help me.
SELECT XMLQuery('<Update>
{ for $demo in (ora:view("TableA")),
$demo_audit in ora:view("TableA_AUDIT")
let $demo_id := $demo/ROW/ID/text(),
$demo_audit_trans_date := $demo_audit/ROW/DATE/text(),
$demo_audit_id := $demo_audit/ROW/ID/text(),
$demo_audit_type := $demo_audit/ROW/TYPE/text()
where $demo_id = $demo_audit_id and
$demo_audit_type = "U"
return
<result>
<type>U</type>
<id>{$demo_id}</id>
</result>}</Data>' RETURNING CONTENT)
FROM dual;Playing the devil here...
SELECT distinct XMLQuery... -
How to get distinct values from a list and display in a ListView webpart.
Hi,
I have a requirement in which I need to pull unique/distinct values from a custom list and then display it via a listview webpart. Can any one suggest how this can be done.
If possible please share the CAMEL query to fetch distinct values from a custom list.
Thanks,
AnkitHi Ankit,
Is there any particular reason that the values need to be shown in a list view web part? Are you going to use that web part for filtering via web part connections?
I ask because the enterprise site collection features include the SharePoint List Filter web part, which may accomplish what you're looking for.
If you just need to display the values in a grid view, you might have more luck with the JavaScript Client Object Model. Try putting the following in a text file:
<style>
.CustomTableClass{display:table;table-layout:fixed}
.CustomRowClass{display:table-row;}
</style>
<div id="distinct_values_div" class="CustomTableClass">
<img src="/_layouts/loading.gif" />
</div>
<script language="JavaScript" type="text/JavaScript">
var siteUrl = '/sitecollection/web'; //use the actual subsite URL here
var listName = 'mylist'; // use the actual list name here
var field = "Title" // use the actual field you want to display here
var divToUpdate = document.getElementById("distinct_values_div");
var rowClass = "CustomRowClass";
ExecuteOrDelayUntilScriptLoaded(function(){
var clientContext = new SP.ClientContext(siteUrl);
var web = clientContext.get_web();
var lists = web.get_lists();
var list = lists.getByTitle(listName);
var camlQuery = new SP.CamlQuery();
camlQuery.set_viewXml('<View><Query></Query><RowLimit>500</RowLimit></View>');
this.collListItem = list.getItems(camlQuery);
clientContext.load(collListItem,"Include ("+field+")");
clientContext.executeQueryAsync(
Function.createDelegate(this, this.onQuerySucceeded),
Function.createDelegate(this, this.onQueryFailed));
},"sp.js");
function onQueryFailed(sender, args){
divToUpdate.innerHTML = 'Unable to retrieve values: '+args.get_message());
function onQuerySucceeded(sender, args){
var allValues = [];
var listItemEnumerator = collListItem.getEnumerator();
divToUpdate.innerHTML = "";
while(listItemEnumerator.moveNext()){
var listItem = listItemEnumerator.get_current();
if(!containsString(allValues,listItem.get_item(field)){
var value = listItem.get_item(field);
allValues.push(value);
var newDiv = document.createElement("div");
newDiv.className = rowClass;
newDiv.innerHTML = value;
divToUpdate.appendChild(newDiv);
function containsString(strArray, text){
var contains = false;
for (var i=0; i<strArray.length; i++){
if(strArray[i]==text){contains = true; break;}
return contains;
</script>
Upload the text file to a library on the site, then add a content editor web part to a page where you want the distinct values to appear. In the content editor web part's properties, edit the Content Link so that it links directly to the text file. This
will cause the JavaScript to run on the page. -
Get distinct values from a coma seperated string variable
Hi ,
I am getting an comma seperated string as in parameter, now i want to get the distinct values from that string and will use those values to pass it to a query.
any helptry this:
sorry about the messiness - it's just quickly copied from some badly formatted code....
TYPE T_FieldArray IS TABLE OF varchar2(255) INDEX BY BINARY_INTEGER;
function SPLIT_CSV_FIELDS (
p_Input_Str in varchar2,
p_Delimiter in varchar2,
p_Quote_Char in varchar2)
return t_fieldarray is
v_FieldArray T_FieldArray;
v_input_str varchar2(4000);
v_field_str varchar2(255);
v_pos number;
e number := 0;
v_delim_str varchar2(3);
cur_pos number;
begin
loop
-- find each delimiter char in string
v_pos := INSTR(v_input_str, p_Delimiter);
-- each time delimiter char is found
if v_pos > 0 then
-- current field value is current string to position prior to delimiter char
v_field_str := UPPER(SUBSTR(v_input_str, 1, v_pos - 1));
-- remove quote char from end of field (if any)
v_field_str := TRIM(TRANSLATE(v_field_str, NVL(p_Quote_Char, p_Delimiter), ' '));
-- increment element number
e := e + 1;
-- get remainder of input string to check
v_input_str := SUBSTR(v_input_str, v_pos + 1, LENGTH(v_input_str) - v_pos);
v_FieldArray(e) := v_field_str;
else
-- increment element number
e := e + 1;
-- last field value is what's left of input string less quote char (if any)
v_field_str := TRIM(TRANSLATE(UPPER(v_input_str), NVL(p_Quote_Char, p_Delimiter), ' '));
v_FieldArray(e) := v_field_str;
exit;
end if;
end loop;
return v_FieldArray;
end; -
"How to get distinct values of sharepoint column using SSRS"
Hi,
I have integrated sharepoint list data to SQL Server reporting services. I am using the below to query sharepoint list data using sql reporting services.
<Query>
<SoapAction>http://schemas.microsoft.com/sharepoint/soap/GetListItems</SoapAction>
<Method Namespace="http://schemas.microsoft.com/sharepoint/soap/" Name="GetListItems">
<Parameters>
<Parameter Name="listName">
<DefaultValue>{GUID of list}</DefaultValue>
</Parameter>
<Parameter Name="viewName">
<DefaultValue>{GUID of listview}</DefaultValue>
</Parameter>
<Parameter Name="rowLimit">
<DefaultValue>9999</DefaultValue>
</Parameter>
</Parameters>
</Method>
<ElementPath IgnoreNamespaces="True">*</ElementPath>
</Query>
By using this query, I am getting a dataset which includes all the columns of sharepoint list. Among these columns, I wanted to display only 2 columns (i.e Region and Sales type) using chart. I have created a Region parameter but when I click preview, the drop down box is giving me all the repeatative values of region like RG1,RG1,RG1,RG2,RG2,RG2,RG2,RG3.......... I wanted to display only distinct values of Region parameter so that whenever end user select region from the parameter drop down, it will display the respective value of Sales type column.
Also when I select only RG1 parameter, it is giving me a chart including the sales type of all the Regions. (it should display me only the sales type of RG1) How can I link these 2 columns so that they will display the values respectively.
I would really appreciate if anyone can help me out with this.
Thanks,
Sam.Hi Sam,
By code, the CAML language doesn’t have any reserved word (or tag) to set this particular filter to remove duplicate results.
In this case, we could use the custom code to get distinct records.
Here are the detailed steps:
1. Create a hidden parameter that gets all the records in one field.
Note: Please create another dataset that is same of the main dataset. This dataset is used for the parameter.
2. Create a function that used to remove the duplicate records.
Here is the code:
Public Shared Function RemoveDups(ByVal items As String) As String
Dim noDups As New System.Collections.ArrayList()
Dim SpStr
SpStr = Split(items ,",")
For i As Integer=0 To Ubound(Spstr)
If Not noDups.Contains(SpStr(i).Trim()) Then
noDups.Add(SpStr(i).Trim())
End If
Next
Dim uniqueItems As String() = New String(noDups.Count-1){}
noDups.CopyTo(uniqueItems)
Return String.Join(",", uniqueItems)
End Function
3. Create another parameter that will be used for filtering the maindata.
Please set the available value to be =Split(Code.RemoveDups(JOIN(Parameters!ISSUE_STATUS_TEMP.Value, ",")), ",")
And the default value to be the value you what such as the first value:
=Split(Code.RemoveDups(JOIN(Parameters!ISSUE_STATUS_TEMP.Value, ",")), ",").(0)
4. Go to the main dataset. Open the property window of this dataset.
5. In the “Filters” tab, set the filter to be:
Expression: <The field to be filter>
Operator: =
Value: =Parameters!Region.Value
The parameter “Region” should be the parameter we created in the step3.
Now, we should get distinct values of SharePoint columns.
If there is anything unclear, please feel free to ask.
Thanks,
Jin
Jin Chen - MSFT -
Return multiple values from a web method??
Hi,
I am wondering if it's possible for a web method to return multiple values to a client. I know each web method can return only one value of a given data type. I am looking for something like ref or out keyword in C#. If it's not available, is there any workaround? Thanks.
RegardsJava web service endpoints can return multiple values by using the javax.xml.rpc.holders classes. The following post might help:
http://forum.java.sun.com/thread.jspa?threadID=684916
If you'll be returning lots of values, it might be worth considering a document-style implementation rather than RPC-style. -
CE function to get distinct values from Column table
Hi All,
Could you please let me know the appropriate CE function to get the distinct values from column table.
IT_WORK = SELECT DISTINCT AUFNR FROM :IT_WO_DETAILS;
Thank you.Hi,
If you have 10g, you can use Model( with model performance is better than connect by )
Solution
========================================================================
WITH t AS
(SELECT '0989.726332, 1234.567432, 3453.736379, 3453.736379, 0989.726332, 3453.736379, 1234.567432, 1234.567432, 0989.726332'
txt
FROM DUAL)
SELECT DISTINCT TRIM(CHAINE)
FROM T
MODEL
RETURN UPDATED ROWS
DIMENSION BY (0 POSITION)
MEASURES (CAST( ' ' AS VARCHAR2(50)) AS CHAINE ,txt ,LENGTH(REGEXP_REPLACE(txt,'[^,]+',''))+1 NB_MOT)
RULES
(CHAINE[FOR POSITION FROM 1 TO NVL(NB_MOT[0],1) INCREMENT 1] =
CASE WHEN NB_MOT[0] IS NULL THEN TXT[0] ELSE REGEXP_SUBSTR(txt[0],'[^,]+',1,CV(POSITION)) END );
=========================================================================
Demo
=======================================================================
SQL> WITH t AS
2 (SELECT '0989.726332, 1234.567432, 3453.736379, 3453.736379, 0989.726332, 3453.736379, 123
4.567432, 1234.567432, 0989.726332'
3 txt
4 FROM DUAL)
5 SELECT DISTINCT TRIM(CHAINE)
6 FROM T
7 MODEL
8 RETURN UPDATED ROWS
9 DIMENSION BY (0 POSITION)
10 MEASURES (CAST( ' ' AS VARCHAR2(50)) AS CHAINE ,txt ,LENGTH(REGEXP_REPLACE(txt,'[^,]+',''))+1 NB_MOT)
11 RULES
12 (CHAINE[FOR POSITION FROM 1 TO NVL(NB_MOT[0],1) INCREMENT 1] =
13 CASE WHEN NB_MOT[0] IS NULL THEN TXT[0] ELSE REGEXP_SUBSTR(txt[0],'[^,]+',1,CV(POSITION)) END );
TRIM(CHAINE)
3453.736379
1234.567432
0989.726332
SQL>
======================================================================== -
How to retrieve value from xml file
hi all,
can somebody pls tell me how to retrieve value from xml file using SAXParser.
I want to retrieve value of only one tag and have to perform some validation with that value.
it's urgent .
pls help me out
thnx in adv.
rituhi shanu,
the pbm is solved, now i m able to access XXX no. in action class & i m able to validate it. The only thing which i want to know is it ok to declare static ArrayList as i have done in this code. i mean will it affect the performance or functionality of the system.
pls have a look at the following code snippet.
public class XMLValidator {
static ArrayList strXXX = new ArrayList();
public void validate(){
factory.setValidating(true);
parser = factory.newSAXParser();
//all factory code is here only
parser.parse(xmlURI, new XMLErrorHandler());
public void setXXX(String pstrXXX){
strUpn.add(pstrXXX);
public ArrayList getXXX(){
return strXXX;
class XMLErrorHandler extends DefaultHandler {
String tagName = "";
String tagValue = "";
String applicationRefNo = "";
String XXXValue ="";
String XXXNo = "";
XMLValidator objXmlValidator = new XMLValidator();
public void startElement(String uri, String name, String qName, Attributes atts) {
tagName = qName;
public void characters(char ch[], int start, int length) {
if ("Reference".equals(tagName)) {
tagValue = new String(ch, start, length).trim();
if (tagValue.length() > 0) {
RefNo = new String(ch, start, length);
if ("XXX".equals(tagName)) {
XXXValue = new String(ch, start, length).trim();
if (XXXValue.length() > 0) {
XXXNo = new String(ch, start, length);
public void endElement(String uri, String localName, String qName) throws SAXException {
if(qName.equalsIgnoreCase("XXX")) {
objXmlValidator.setXXX(XXXNo);
thnx & Regards,
ritu -
How can I return multiple values with PL/SQL Web Services
Hi,
I'm new to developping Web Services. I'm doing some tests with JDeveloper and OC4J on my local machine with a Web Services based on a PL/SQL function within a package. Right now that function only returns one value. So the xml response only has one output.
I'd like to know how can I return multiple values with my PL/SQL Web Service. For example, if I want to return an employee's name and id? And that the xml contains two output : <employee>, <empid>?
Reginald
ps : I have searched the forum and I couldn't find an answer to this question, if that has been discussed AND answered before, can you please post the link? ThanksAlright, I actually found my answer. Since this was asked I think as a followup somewhere else I'll give my answer.
It is very simple, all you have to do is create an Object Type and then Return that object type. After that, JDeveloper will take care of everything and you will have an xml response with multiple values. Here
{color:#ff0000}
create or replace TYPE person AS OBJECT
( id_interv number,
first_name VARCHAR2(50),
last_name VARCHAR2(50),
date_birth date
);{color}
Then your function used in your Web Service should look something like this :
{color:#ff0000}
function info_emp (p_empno IN VARCHAR2) RETURN person AS
l_emp person := person(-1,'','','');
BEGIN
SELECT first_name
,last_name
,emp_no
INTO l_emp.first_name
,l_emp.last_name
,l_emp.emp_no
FROM emp
WHERE upper(emp_no) = upper (emp_no);
{color}
{color:#ff0000}
RETURN l_emp;
EXCEPTION WHEN NO_DATA_FOUND THEN
l_emp := person (-1,'n/a','n/a','n/a');
RETURN l_emp ;
END info_emp;{color}
{color:#ff0000}{color:#000000}After that, this is what the xml response looks like :{color}{color}
<first_name xsi:type="xsd:string">John</first_name>
<last_name xsi:type="xsd:string">Doe</last_name>
<emp_no xsi:type="xsd:string">0250193</emp_no> -
Hello.
I seem to be having a problem using the RegRead function within vbscript to return a simple value from the registry. When I run it on my workstation (windows 7 x64 sp1), it seems to miss certain registry values that are indeed there (specifically, I am looking
for instances of "Adobe" in the displayName value of HKLM\Software\wow6432node\microsoft\windows\uninstall). However, when I run on a test VM, it returns the values fine. I am hoping someone might be able to explain this inconsistency and why it
is happening.
The code is very simple:
On Error Resume Next
if wscript.arguments.count < 1 then
wscript.echo "usage: regread.vbs <hostname> <appname>"
wscript.quit
end if
AppName = wscript.arguments(1)
strComputer = wscript.arguments(0)
const HKEY_LOCAL_MACHINE = &H80000002
Set WshShell = WScript.CreateObject("WScript.Shell")
Set objReg=GetObject("winmgmts:{impersonationLevel=impersonate}!//"& strComputer & "/root/default:StdRegProv")
strKeyPath = "SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall"
objReg.EnumKey HKEY_LOCAL_MACHINE, strKeyPath, arrSubKeys
For Each subkey In arrSubKeys
'wscript.echo subkey
InstalledAppName = ""
InstalledAppName = WshShell.RegRead("HKLM\" & strKeyPath & "\" & subkey & "\DisplayName")
wscript.echo vbtab&"DisplayName: "&InstalledAppName
if instr(InstalledAppName,AppName) > 0 then
wscript.echo vbcrlf&"found"&vbcrlf
end if
Next
When I run "cscript regread.vbs remoteHost Adobe" on my local machine, it does not "find" any instance of Adobe within the registry of machine "remoteHost". However, when I run it from a test VM, it does find the existing instances
of Adobe within the DisplayName value of the uninstall key of the registry, here is the output from both, first the non-working one, then the working test VM.
Non-working:
Microsoft (R) Windows Script Host Version 5.8
Copyright (C) Microsoft Corporation. All rights reserved.
DisplayName:
DisplayName:
DisplayName:
DisplayName:
DisplayName:
DisplayName: GPL Ghostscript 8.60
DisplayName: GPL Ghostscript Fonts
DisplayName:
DisplayName:
DisplayName:
DisplayName:
DisplayName:
DisplayName: Microsoft Office Professional Plus 2010
DisplayName:
DisplayName:
DisplayName:
DisplayName: Microsoft ASP.NET 2.0 AJAX Extensions 1.0
DisplayName:
DisplayName: Sybase PowerBuilder 12.0 Standard Runtime
DisplayName: MSXML 4.0 SP3 Parser
DisplayName:
DisplayName:
DisplayName:
DisplayName:
DisplayName:
DisplayName:
DisplayName:
DisplayName: MSXML 4.0 SP3 Parser (KB2758694)
DisplayName: Microsoft Visual C++ 2008 Redistributable - x86 9.0.30729.4148
DisplayName:
DisplayName:
DisplayName:
DisplayName:
DisplayName:
DisplayName: Microsoft Windows Journal Viewer
DisplayName: Java Auto Updater
DisplayName: VBA (2627.01)
DisplayName: Microsoft Visual C++ 2005 Redistributable
DisplayName:
DisplayName: Apple Software Update
DisplayName: SQL Anywhere 9 for Windows x64
DisplayName: Microsoft Office Professional Plus 2010
DisplayName:
DisplayName:
DisplayName:
DisplayName: Update for Microsoft Office 2010 (KB2553267) 32-Bit Edition
DisplayName:
DisplayName:
DisplayName:
DisplayName: Update for Microsoft Office 2010 (KB2760631) 32-Bit Edition
DisplayName:
DisplayName:
DisplayName: Update for Microsoft Office 2010 (KB2494150)
DisplayName:
DisplayName:
DisplayName:
DisplayName:
DisplayName:
DisplayName:
DisplayName:
DisplayName:
DisplayName:
DisplayName: HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{90140000-0011-0000-0000-0000000FF1CE}_Office14.PROPLUS_{9569DE03-1425-4D12-96EB-44D852AF759A}\DisplayName
DisplayName:
DisplayName:
DisplayName:
DisplayName: Update for Microsoft Office 2010 (KB2553065)
DisplayName:
DisplayName: Security Update for Microsoft Office 2010 (KB2598243) 32-Bit Edition
DisplayName: Update for Microsoft Office 2010 (KB2825640) 32-Bit Edition
DisplayName:
DisplayName: Update for Microsoft Outlook Social Connector 2010 (KB2553406) 32-Bit Edition
DisplayName: Security Update for Microsoft Office 2010 (KB2553371) 32-Bit Edition
DisplayName:
DisplayName:
DisplayName:
DisplayName: Security Update for Microsoft Office 2010 (KB2589320) 32-Bit Edition
DisplayName:
DisplayName:
DisplayName:
DisplayName: Update for Microsoft Office 2010 (KB2596964) 32-Bit Edition
DisplayName: Update for Microsoft Office 2010 (KB2566458)
DisplayName:
DisplayName:
DisplayName: Microsoft Office Access MUI (English) 2010
DisplayName:
DisplayName: Microsoft Office Excel MUI (English) 2010
DisplayName:
DisplayName: Microsoft Office PowerPoint MUI (English) 2010
DisplayName:
DisplayName:
DisplayName: Microsoft Office Publisher MUI (English) 2010
DisplayName:
DisplayName: Microsoft Office Outlook MUI (English) 2010
DisplayName: Update for Microsoft Outlook Social Connector 2010 (KB2553406) 32-Bit Edition
DisplayName:
DisplayName:
DisplayName: Microsoft Office Word MUI (English) 2010
DisplayName:
DisplayName: Microsoft Office Proof (English) 2010
DisplayName:
DisplayName:
DisplayName: Microsoft Office Proof (French) 2010
DisplayName:
DisplayName:
DisplayName: Microsoft Office Proof (Spanish) 2010
DisplayName:
DisplayName:
DisplayName:
DisplayName:
DisplayName:
DisplayName:
DisplayName:
DisplayName:
DisplayName:
DisplayName: Microsoft Office Proofing (English) 2010
DisplayName:
DisplayName: Microsoft Office InfoPath MUI (English) 2010
DisplayName:
DisplayName: Microsoft Office Shared MUI (English) 2010
DisplayName:
DisplayName:
DisplayName: Update for Microsoft Office 2010 (KB2553310) 32-Bit Edition
DisplayName: Microsoft Office OneNote MUI (English) 2010
DisplayName:
DisplayName: Update for Microsoft OneNote 2010 (KB2553290) 32-Bit Edition
DisplayName: Microsoft Office Groove MUI (English) 2010
DisplayName:
DisplayName: Microsoft Office Shared Setup Metadata MUI (English) 2010
DisplayName:
DisplayName:
DisplayName: Microsoft Office Access Setup Metadata MUI (English) 2010
DisplayName:
DisplayName: Microsoft Office Visio Viewer 2003 (English)
DisplayName: Cardiff TeleForm
DisplayName:
DisplayName:
DisplayName: CodeMax Runtime Installer
DisplayName: Microsoft .NET Framework 1.1
DisplayName:
DisplayName:
DisplayName: Microsoft XML Parser
DisplayName:
DisplayName: Microsoft Visual C++ 2010 x86 Redistributable - 10.0.40219
DisplayName:
DisplayName:
DisplayName:
DisplayName:
DisplayName:
DisplayName:
DisplayName:
DisplayName:
Working:
Microsoft (R) Windows Script Host Version 5.8
Copyright (C) Microsoft Corporation. All rights reserved.
DisplayName:
DisplayName:
DisplayName:
DisplayName: DYMO Label v.8
DisplayName:
DisplayName: GPL Ghostscript 8.60
DisplayName: GPL Ghostscript Fonts
DisplayName:
DisplayName:
DisplayName:
DisplayName:
DisplayName:
DisplayName: Microsoft Office Professional Plus 2010
DisplayName:
DisplayName:
DisplayName:
DisplayName: Microsoft ASP.NET 2.0 AJAX Extensions 1.0
DisplayName: Adobe Flash Player 11 Plugin
found
DisplayName: Sybase PowerBuilder 12.0 Standard Runtime
DisplayName: MSXML 4.0 SP3 Parser
DisplayName:
DisplayName:
DisplayName:
DisplayName:
DisplayName:
DisplayName:
DisplayName:
DisplayName: MSXML 4.0 SP3 Parser (KB2758694)
DisplayName: Microsoft Visual C++ 2008 Redistributable - x86 9.0.30729.4148
DisplayName: Cisco WebEx Meeting Center for Internet Explorer
DisplayName: Configuration Manager Client
DisplayName: Java 7 Update 51
DisplayName: Citrix Online Launcher
DisplayName: MSXML 4.0 SP3 Parser (KB2721691)
DisplayName: Microsoft Windows Journal Viewer
DisplayName: Java Auto Updater
DisplayName: VBA (2627.01)
DisplayName: Microsoft Visual C++ 2005 Redistributable
DisplayName: Microsoft Visual C++ 2005 Redistributable
DisplayName: Apple Software Update
DisplayName: SQL Anywhere 9 for Windows x64
DisplayName: Microsoft Office Professional Plus 2010
DisplayName: Update for Microsoft Filter Pack 2.0 (KB2810071) 32-Bit Edition
DisplayName: Security Update for Microsoft Office 2010 (KB2826035) 32-Bit Edition
DisplayName: Microsoft Office 2010 Service Pack 1 (SP1)
DisplayName: Update for Microsoft Office 2010 (KB2553267) 32-Bit Edition
DisplayName: Update for Microsoft PowerPoint 2010 (KB2553145) 32-Bit Edition
DisplayName: Update for Microsoft Office 2010 (KB2589375) 32-Bit Edition
DisplayName: Security Update for Microsoft Office 2010 (KB2687276) 32-Bit Edition
DisplayName: Update for Microsoft Office 2010 (KB2760631) 32-Bit Edition
DisplayName: Update for Microsoft OneNote 2010 (KB2810072) 32-Bit Edition
DisplayName: Security Update for Microsoft InfoPath 2010 (KB2687422) 32-Bit Edition
DisplayName: Update for Microsoft Office 2010 (KB2494150)
DisplayName: Security Update for Microsoft Office 2010 (KB2687423) 32-Bit Edition
DisplayName: Security Update for Microsoft Office 2010 (KB2597986) 32-Bit Edition
DisplayName: Update for Microsoft Office 2010 (KB2794737) 32-Bit Edition
DisplayName: Update for Microsoft SharePoint Workspace 2010 (KB2589371) 32-Bit Edition
DisplayName: Security Update for Microsoft Publisher 2010 (KB2553147) 32-Bit Edition
DisplayName: Security Update for Microsoft Office 2010 (KB2850016) 32-Bit Edition
DisplayName: Definition Update for Microsoft Office 2010 (KB982726) 32-Bit Edition
DisplayName: Security Update for Microsoft InfoPath 2010 (KB2760406) 32-Bit Edition
DisplayName: Update for Microsoft Visio Viewer 2010 (KB2810066) 32-Bit Edition
DisplayName: HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{90140000-0011-0000-0000-0000000FF1CE}_Office14.PROPLUS_{9569DE03-1425-4D12-96EB-44D852AF759A}\DisplayName
DisplayName: Update for Microsoft Office 2010 (KB2767886) 32-Bit Edition
DisplayName: Update for Microsoft Office 2010 (KB2597087) 32-Bit Edition
DisplayName: Security Update for Microsoft Office 2010 (KB2687510) 32-Bit Edition
DisplayName: Update for Microsoft Office 2010 (KB2553065)
DisplayName: Update for Microsoft Access 2010 (KB2553446) 32-Bit Edition
DisplayName: Security Update for Microsoft Office 2010 (KB2598243) 32-Bit Edition
DisplayName: Update for Microsoft Office 2010 (KB2825640) 32-Bit Edition
DisplayName: Security Update for Microsoft Visio 2010 (KB2810068) 32-Bit Edition
DisplayName: Update for Microsoft Outlook Social Connector 2010 (KB2553406) 32-Bit Edition
DisplayName: Security Update for Microsoft Office 2010 (KB2553371) 32-Bit Edition
DisplayName: Update for Microsoft Office 2010 (KB2826026) 32-Bit Edition
DisplayName: Update for Microsoft Office 2010 (KB2589298) 32-Bit Edition
DisplayName: Security Update for Microsoft Excel 2010 (KB2826033) 32-Bit Edition
DisplayName: Security Update for Microsoft Office 2010 (KB2589320) 32-Bit Edition
DisplayName: Security Update for Microsoft Word 2010 (KB2863902) 32-Bit Edition
DisplayName: Security Update for Microsoft Office 2010 (KB2826023) 32-Bit Edition
DisplayName: Update for Microsoft Office 2010 (KB2760598) 32-Bit Edition
DisplayName: Update for Microsoft Office 2010 (KB2596964) 32-Bit Edition
DisplayName: Update for Microsoft Office 2010 (KB2566458)
DisplayName: Update for Microsoft Office 2010 (KB2589352) 32-Bit Edition
DisplayName: Security Update for Microsoft Outlook 2010 (KB2837597) 32-Bit Edition
DisplayName: Microsoft Office Access MUI (English) 2010
DisplayName: Microsoft Office 2010 Service Pack 1 (SP1)
DisplayName: Microsoft Office Excel MUI (English) 2010
DisplayName: Microsoft Office 2010 Service Pack 1 (SP1)
DisplayName: Microsoft Office PowerPoint MUI (English) 2010
DisplayName: Microsoft Office 2010 Service Pack 1 (SP1)
DisplayName: Update for Microsoft PowerPoint 2010 (KB2553145) 32-Bit Edition
DisplayName: Microsoft Office Publisher MUI (English) 2010
DisplayName: Microsoft Office 2010 Service Pack 1 (SP1)
DisplayName: Microsoft Office Outlook MUI (English) 2010
DisplayName: Update for Microsoft Outlook Social Connector 2010 (KB2553406) 32-Bit Edition
DisplayName: Update for Microsoft Outlook 2010 (KB2687623) 32-Bit Edition
DisplayName: Microsoft Office 2010 Service Pack 1 (SP1)
DisplayName: Microsoft Office Word MUI (English) 2010
DisplayName: Microsoft Office 2010 Service Pack 1 (SP1)
DisplayName: Microsoft Office Proof (English) 2010
DisplayName: Microsoft Office 2010 Service Pack 1 (SP1)
DisplayName: Update for Microsoft Office 2010 (KB2850079) 32-Bit Edition
DisplayName: Microsoft Office Proof (French) 2010
DisplayName: Microsoft Office 2010 Service Pack 1 (SP1)
DisplayName: Update for Microsoft Office 2010 (KB2850079) 32-Bit Edition
DisplayName: Microsoft Office Proof (Spanish) 2010
DisplayName: Update for Microsoft Office 2010 (KB2850079) 32-Bit Edition
DisplayName: Microsoft Office 2010 Service Pack 1 (SP1)
DisplayName: Update for Microsoft Filter Pack 2.0 (KB2810071) 32-Bit Edition
DisplayName: Update for Microsoft OneNote 2010 (KB2810072) 32-Bit Edition
DisplayName: Update for Microsoft SharePoint Workspace 2010 (KB2589371) 32-Bit Edition
DisplayName: Microsoft Office 2010 Service Pack 1 (SP1)
DisplayName: Update for Microsoft Office 2010 (KB2760598) 32-Bit Edition
DisplayName: Update for Microsoft Office 2010 (KB2589352) 32-Bit Edition
DisplayName: Microsoft Office 2010 Service Pack 1 (SP1)
DisplayName: Microsoft Office Proofing (English) 2010
DisplayName: Microsoft Office 2010 Service Pack 1 (SP1)
DisplayName: Microsoft Office InfoPath MUI (English) 2010
DisplayName: Microsoft Office 2010 Service Pack 1 (SP1)
DisplayName: Microsoft Office Shared MUI (English) 2010
DisplayName: Microsoft Office 2010 Service Pack 1 (SP1)
DisplayName: Security Update for Microsoft Office 2010 (KB2553284) 32-Bit Edition
DisplayName: Update for Microsoft Office 2010 (KB2553310) 32-Bit Edition
DisplayName: Microsoft Office OneNote MUI (English) 2010
DisplayName: Microsoft Office 2010 Service Pack 1 (SP1)
DisplayName: Update for Microsoft OneNote 2010 (KB2553290) 32-Bit Edition
DisplayName: Microsoft Office Groove MUI (English) 2010
DisplayName: Microsoft Office 2010 Service Pack 1 (SP1)
DisplayName: Microsoft Office Shared Setup Metadata MUI (English) 2010
DisplayName: Microsoft Office 2010 Service Pack 1 (SP1)
DisplayName: Microsoft Office 2010 Service Pack 1 (SP1)
DisplayName: Microsoft Office Access Setup Metadata MUI (English) 2010
DisplayName: Microsoft Office 2010 Service Pack 1 (SP1)
DisplayName: Microsoft Office Visio Viewer 2003 (English)
DisplayName: Cardiff TeleForm
DisplayName: Adobe Acrobat XI Pro
found
DisplayName: QuickTime
DisplayName: CodeMax Runtime Installer
DisplayName: Microsoft .NET Framework 1.1
DisplayName: WinZip 15.0
DisplayName: McAfee VirusScan Enterprise
DisplayName: Microsoft XML Parser
DisplayName: McAfee Agent
DisplayName: Microsoft Visual C++ 2010 x86 Redistributable - 10.0.40219
DisplayName:
DisplayName:
DisplayName:
DisplayName:
DisplayName:
DisplayName:
DisplayName:
DisplayName: Apple Application Support
Does anyone know why this might be happening? The only main difference is that the machine that the script does not work on, has visual studio 2013 installed.
Please helpWell I think we can agree that it is not supported remotely. Because while it did initially work remotely, it didnt behave consistently; that is, it worked on the VM, but not my desktop. That's the whole reason I created this thread. Sorry if you are confused,
but I most certainly was not lying and not trying to troll the forum or whatever it is you are insuinuating. Chill out a little bit and maybe you might get that Microsoft MVP.
I am trying to get you t understand why what you are saying is wrong. You may have thought it worked but there were a number of things that make it impossible to actually work.
You were enumerating a remote key. You were using that key name with RegRead and it was looking up the local value. That is why it could not find remote keys and values. The local and remote machines will not match on all keys.
The correct call is the "GetStringValue" of the registry provider because it is the only call that can read remote values. My point is that you were fooling yourself by thinking that it ever actually worked. If anything it was just dumb luck
that the keys would match.
So maybe you weren't actually lying but you were surely foolingyourself and confusing us.
Anyway - glad you fixed it and just remember to not mix calls like you did. Also don't use On Error Resume Next unless you plan on test every call for an error.
¯\_(ツ)_/¯
Maybe you are looking for
-
How can i call a method from the a subdirectory using packages
This is my directory structure: java --p1 --One.java --p2 --Two.java package java.p1; import p2.Two; public class One public static void main(String args[]) Two obj = new Two(); obj.p(); package java.p2; public class Two
-
Share news----Oracle JHeadstart 10g release 9.0.4 is now production.
Share the news and product information to all Jdeveloper member if you expect to achieve good coding productivity in J2ee environment, Oracle announces that Oracle JHeadstart 10g release 9.0.4 is now production. Main new features are: - generation su
-
Oracle-10g RAC on VMware installed on Windows-7(Host)
Hi, My host OS is Windows-7. Docs. posted on this forum for RAC on VMware says: your Host OS should be Centos OS and in which you will install VMware and Client tools also. In this way u can clone another RAC2 machine. But I have Oracle VM Virtual Bo
-
my macbook air is freezing with Mac OS X Yosemite installed please help!!
-
JavaFX SDK - no tab widget?
The previous JavaFX releases had somehow the possibility to use a tabbedPane and the tab widget. I don't see them back in the list of javafx.ext.swing widgets of the newly released javaFX SDK. Will they be added in a future SDK release or if not, doe