Pipelined function which creates xml nodes,items and elements
Hi Everyone,
I am Vikas Kumar and i have written a pipelined function
which is returning a UDT which i have created in my database.
but when i am piping a row then there is error :
"Error: PLS-00306: wrong number or types of arguments in call to 'CLASEC_MENU_TYPE' "
i have created UDT as :
create type clasec_menu_type as object (menu_data xmltype);
create type clasec_menu_list_type as table of clasec_menu_type;
and function is as below
create or replace function clasec_fns_menu
return clasec_menu_list_type pipelined as
doc xmldom.DOMDocument;
main_node xmldom.DOMNode;
root_node xmldom.DOMNode;
user_node xmldom.DOMNode;
item_node xmldom.DOMNode;
root_elmt xmldom.DOMElement;
item_elmt xmldom.DOMElement;
item_text xmldom.DOMText;
CURSOR get_menu IS
SELECT menu_level,
is_menu_a_leaf,
menu_id,
menu_name,
menu_screen_uri,
screen_target_frame,
rownum
FROM clasec_menu_view1;
BEGIN
doc := xmldom.newDOMDocument;
main_node := xmldom.makeNode(doc);
root_elmt := xmldom.createElement(
doc,
'Menubar'
root_node := xmldom.appendChild(
main_node,
xmldom.makeNode(root_elmt)
pipe row (clasec_menu_type(root_node));
FOR get_menu_rec IN get_menu LOOP
if get_menu_rec.menu_level = 1 then
item_elmt := xmldom.createElement(
doc,
'menu'
xmldom.setAttribute(
item_elmt,
'text',
get_menu_rec.menu_name
user_node := xmldom.appendChild(
root_node,
xmldom.makeNode(item_elmt)
pipe row(user_node);
end loop;
end;
compilation error is at the statement
pipe row (clasec_menu_type(root_node));
i think its conversion error but don,t know how can i convert root_node which has been defined with :
root_node xmldom.DOMNode;
Regards,
Vikas Kumar
Hi,
Your type, clasec_menu_type, needs an argument of type XMLType. If you want to create instance of XMLType, you have to pass it varchar2, clob or XMLType.
So, think how will you convert xmldom.DOMNode to XMLtype or Varchar2 or clob.
Best of luck
Similar Messages
-
How to create xml nodes based on a value
Dear friends,
I've a question about graphical mapping in SAP PI...
How can I create XML nodes on the target side based on a value in a XML field on the source side.
For example:
This XML field on the source:
<NO_OF_LINES>4</NO_OF_LINES>
Must result on 4 Lines on the Target:
<LINE></LINES>
<LINE></LINES>
<LINE></LINES>
<LINE></LINES>
So it's actually the opposite of the Count function...
I appreciate your help,
Thank you in Advance,
Kind regards,
JohnHi ,
Try this
NO_OF_LINES---> count---> UDF---> LINE
example :
UDF Code :
for (int i=0;i<var1[0];i++)
result.addValue(""); -
How to get UTF-8 encoding when create XML using DBMS_XMLGEN and UTL_FILE ?
How to get UTF-8 encoding when create XML using DBMS_XMLGEN and UTL_FILE ?
Hi,
I do generate XML-Files by using DBMS_XMLGEN with output by UTL_FILE
but it seems, the xml-Datafile I get on end is not really UTF-8 encoding
( f.ex. cannot verifying it correct in xmlspy )
my dbms is
NLS_CHARACTERSET = WE8MSWIN1252
NLS_NCHAR_CHARACTERSET = AL16UTF16
NLS_RDBMS_VERSION = 10.2.0.1.0
I do generate it in this matter :
declare
xmldoc CLOB;
ctx number ;
utl_file.file_type;
begin
-- generate fom xml-view :
ctx := DBMS_XMLGEN.newContext('select xml from xml_View');
DBMS_XMLGEN.setRowSetTag(ctx, null);
DBMS_XMLGEN.setRowTag(ctx, null );
DBMS_XMLGEN.SETCONVERTSPECIALCHARS(ctx,TRUE);
-- create xml-file:
xmldoc := DBMS_XMLGEN.getXML(ctx);
-- put data to host-file:
vblob_len := DBMS_LOB.getlength(xmldoc);
DBMS_LOB.READ (xmldoc, vblob_len, 1, vBuffer);
bHandle := utl_file.fopen(vPATH,vFileName,'W',32767);
UTL_FILE.put_line(bHandle, vbuffer, FALSE);
UTL_FILE.fclose(bHandle);
end ;
maybe while work UTL_FILE there is a change the encoding ?
How can this solved ?
Thank you
Norbert
Edited by: astramare on Feb 11, 2009 12:39 PM with database charsetsMarco,
I tryed to work with dbms_xslprocessor.clob2file,
that works good,
but what is in this matter with encoding UTF-8 ?
in my understandig, the xmltyp created should be UTF8 (16),
but when open the xml-file in xmlSpy as UTF-8,
it is not well ( german caracter like Ä, Ö .. ):
my dbms is
NLS_CHARACTERSET = WE8MSWIN1252
NLS_NCHAR_CHARACTERSET = AL16UTF16
NLS_RDBMS_VERSION = 10.2.0.1.0
-- test:
create table nh_test ( s0 number, s1 varchar2(20) ) ;
insert into nh_test (select 1,'hallo' from dual );
insert into nh_test (select 2,'straße' from dual );
insert into nh_test (select 3,'mäckie' from dual );
insert into nh_test (select 4,'euro_€' from dual );
commit;
select * from nh_test ;
S0 S1
1 hallo
1 hallo
2 straße
3 mäckie
4 euro_€
declare
rc sys_refcursor;
begin
open rc FOR SELECT * FROM ( SELECT s0,s1 from nh_test );
dbms_xslprocessor.clob2file( xmltype( rc ).getclobval( ) , 'XML_EXPORT_DIR','my_xml_file.xml');
end;
( its the same when using output with DBMS_XMLDOM.WRITETOFILE )
open in xmlSpy is:
<?xml version="1.0"?>
<ROWSET>
<ROW>
<S0>1</S0>
<S1>hallo</S1>
</ROW>
<ROW>
<S0>2</S0>
<S1>straޥ</S1>
</ROW>
<ROW>
<S0>3</S0>
<S1>m㢫ie</S1>
</ROW>
<ROW>
<S0>4</S0>
<S1>euro_</S1>
</ROW>
</ROWSET>
regards
Norbert -
Using a newly created Library document to create a list item and attach itself
I have a workflow that moves a document from one library to another.
When a document is moved to a certain library I want to create a list item with a link to the document in the list item. Keep in mind there could be 10 files submitted to the library, so then in my list I would want 10 new list items created for
each file, with a link to the individual file. or is there a way to attach the document to a newly created list item programmatically?
is this possible?Hi,
According to your post, my understanding is that you wanted to use a newly created Library document to create a list item and attach itself.
I recommend to create a workflow assocaited to the second library, and start the workflow automatically when an item is created.
Then add action as below:
Best Regards,
Linda Li
Linda Li
TechNet Community Support -
Can someone shed some light on the difference, intended functionality between the /Shared Items and the /Users/Shared folders?
do any/all network services use the Shared Items folder?
Not all services use it. Time Machine Server does, and I'm not sure which others. FTP is not controlled by Server.app. -
Is it possible to dynamically create xml nodes?
Hi,
Is it possible to dynamically create child nodes of an xml
file with flash??
Im what i want to do is save a users name etc in an xml file
without having to manually add nodes in.
So when a user clicks a button to save their details a new
node is created.
ThnxYes.
Look
at XML.appendChild as a starting point. -
Programatically create new mail item and open - body text lost on subsequent saves
Hi,
I have a problem with trying to create new GroupWise mail item from a
button in a C3PO. I require programmatic access to this via the Object
API, so it must be a saved draft. This is relativley straight forward to
do - just create a mail item using the object API, and then use the Token
API to open this item.
This worked fine in 6.5.0, however in 6.5.1 and 6.5.2 I have noticed that
when the user does a subsequent save, the body text of the message
dissappears in the GUI (it is updated correctly in the draft however) -
and all subsequent saves cause the body text to dissappear. If you close
the mail item and open the draft manually you can continue as normal.
As a test, I also tried to use the Token API to create a new mail item,
and then again to save the item in the work in progress folder. This
seems to work fine the very first time you do this, but each subsequent
time the same behaviour is seen - i.e. the body text of the email is
deleted from the GUI. Also, another observation here, event though the
mail item was saved in the WIP folder via the token API command
ItemSaveMessageDraft, it moves into the users MailBox when the user saves
it manually.
I have posted the two snippets of code from my test C3PO project at then
end.
This is a major problem, as we need to be able to reliably create new mail
items from a toolbar button, so any help very much appreciated.
Regards
Greg
Test case 1: Create a new message object in the WIP folder, and then open
it using Token API...
Dim sRetString As String
Dim DraftMail As Object
Set DraftMail =
g_C3POManager.ClientState.CurrentAccount.WorkFolde r.Messages.Add
("GW.MESSAGE.MAIL", egwDraft)
g_Commander.Execute "ItemOpen(""" & DraftMail.MessageId & """)", sRetString
Test case 2: Create a new mail via token API, then use token API to save
the item in the WIP folder...
Dim sRetString As String
' create the new mail item...
g_Commander.Execute "NewMail()", sRetString
' Get the folder path as a string..
Dim GWFolder As Object
Dim sAccount As String
Dim sFolderPath As String
sAccount = g_C3POManager.ClientState.CurrentAccount.RootFolde r.Name
Set GWFolder = g_C3POManager.ClientState.CurrentAccount.WorkFolde r
sFolderPath = sAccount & "\" & GWFolder.Name
' dirty the message so save works...
g_Commander.Execute "ItemSetText(""X00"";Subject!;"" "")", sRetString
g_Commander.Execute "ItemSetText(""X00"";Subject!;"""")", sRetString
' do the save...
g_Commander.Execute "ItemSaveMessageDraft(""" & sFolderPath & """)",
sRetStringHi,
I have a problem with trying to create new GroupWise mail item from a
button in a C3PO. I require programmatic access to this via the Object
API, so it must be a saved draft. This is relativley straight forward to
do - just create a mail item using the object API, and then use the Token
API to open this item.
This worked fine in 6.5.0, however in 6.5.1 and 6.5.2 I have noticed that
when the user does a subsequent save, the body text of the message
dissappears in the GUI (it is updated correctly in the draft however) -
and all subsequent saves cause the body text to dissappear. If you close
the mail item and open the draft manually you can continue as normal.
As a test, I also tried to use the Token API to create a new mail item,
and then again to save the item in the work in progress folder. This
seems to work fine the very first time you do this, but each subsequent
time the same behaviour is seen - i.e. the body text of the email is
deleted from the GUI. Also, another observation here, event though the
mail item was saved in the WIP folder via the token API command
ItemSaveMessageDraft, it moves into the users MailBox when the user saves
it manually.
I have posted the two snippets of code from my test C3PO project at then
end.
This is a major problem, as we need to be able to reliably create new mail
items from a toolbar button, so any help very much appreciated.
Regards
Greg
Test case 1: Create a new message object in the WIP folder, and then open
it using Token API...
Dim sRetString As String
Dim DraftMail As Object
Set DraftMail =
g_C3POManager.ClientState.CurrentAccount.WorkFolde r.Messages.Add
("GW.MESSAGE.MAIL", egwDraft)
g_Commander.Execute "ItemOpen(""" & DraftMail.MessageId & """)", sRetString
Test case 2: Create a new mail via token API, then use token API to save
the item in the WIP folder...
Dim sRetString As String
' create the new mail item...
g_Commander.Execute "NewMail()", sRetString
' Get the folder path as a string..
Dim GWFolder As Object
Dim sAccount As String
Dim sFolderPath As String
sAccount = g_C3POManager.ClientState.CurrentAccount.RootFolde r.Name
Set GWFolder = g_C3POManager.ClientState.CurrentAccount.WorkFolde r
sFolderPath = sAccount & "\" & GWFolder.Name
' dirty the message so save works...
g_Commander.Execute "ItemSetText(""X00"";Subject!;"" "")", sRetString
g_Commander.Execute "ItemSetText(""X00"";Subject!;"""")", sRetString
' do the save...
g_Commander.Execute "ItemSaveMessageDraft(""" & sFolderPath & """)",
sRetString -
Create a Maintenance Item and Plan
Hi guys,
Does anybody know if there is some BAPI or FM's do create Maintenance Plans and Items?
I found MAINTENANCE_PLAN_POST and MAINTENANCE_ITEM_POST, but i think these FM's just a insert records in database...
Does anybody knows how to fill the input tables or other way to do this?
Thanks in advance.
LMSBDC?
Rob -
How to create XML data source/ and load data from a web service to BI
All,
I m trying to find a 'how to' document (or any document) that shows how to create an XML data source to load data directly from a web service or from an XML file.
I appreciate any help.Hi Mike,
Two more for you:----
/thread/111488 [original link is broken]
http://help.sap.com/saphelp_nw70/helpdata/en/e6/1dd53bb90cbb1ae10000000a11402f/content.htm
Regards,
Suman -
Using pipelined functions with bind variables in Apex...
Hy all:
I have a table which has about 10 million records and it is hanging up the system when it is trying to retrieve the data from that table... so what I have done is I created a pripelined
function and then trying to retrieve data using an SQL statement ... when I try to use a bind variable to filter by the date and location it is binding according to the location
but not by date ... can anyone help me in this please!!
Help greatly appreciated !
Thanks in advance !Hi Denes:
Create or replace type ohe1 as object (
IMLITM NCHAR(50), IMAITM NCHAR(50), IMDSC1 NCHAR(60), COUNCS NUMBER(22), LIPQOH NUMBER(22),
LIMCU NCHAR(24), LILOCN NCHAR(40), LILOTN NCHAR(60), LILOTS NCHAR(2), IOMMEJ NUMBER(22))
CREATE OR REPLACE TYPE OHE AS TABLE OF Ohe1
CREATE OR REPLACE FUNCTION GET_ohe
return OHE PIPELINED
IS
m_rec ohe1:= ohe1 (NULL,NULL,NULL,0,0,NULL,NULL,NULL,NULL,0);
begin
for c in (select f1.LITM LITM, F1.AITM AITM, F1.DSC1 DSC1, F5.UNCS UNCS,
F21.QOH QOH, F21.MCU MCU, F21.LOCN LOCN, F21.LOTN LOTN, F21.LOTS LOTS,
F8.MEJ MEJ FROM F1 F1, F2 F2, F21 F21, F5 F5, F8 F8
WHERE (F5.EDG='07') AND (F21.QOH != 0) AND F2.IBITM = F1.IMITM
AND F21.ITM = F2.ITM AND F21.ITM = F5.ITM AND F21.MCU = F5.MCU
AND F21.MCU = F2.MCU AND F21.LOTN = F8.LOTN AND F21.MCU = F8.MCU)
loop
m_rec.LITM:=c.LITM;
m_rec.AITM:=c.AITM;
m_rec.DSC1:=c.DSC1;
m_rec.UNCS:=c.UNCS;
my_record.QOH:=c.QOH;
my_record.MCU:=c.MCU;
my_record.LOCN:=c.LOCN;
my_record.LOTN:=c.LOTN;
my_record.LOTS:=c.LOTS;
my_record.MEJ:=c.MEJ;
PIPE ROW (my_record);
end loop;
return;
end;
select LITM , AITM , DSC1 , UNCS*.0001 UNCS, QOH*.0001 QOH, (UNCS*.0001)*(QOH*.0001) AMOUNT,
MCU MCU, LOCN LOCN, LOTN LOTN, LOTS LOTS, jdate(DECODE(MEJ,0,100001,MEJ)) MEJ FROM
TABLE (GET_ohe)
WHERE trim(LIMCU)= TRIM(:OHE_BRANCHID)
AND (jdate(DECODE(MEJ,0,10001,MEJ)) >=:FROMEXPDT
AND jdate(DECODE(MEJ,0,10001,MEJ)) <=:TOEXPDATE)
The MEJ is a julian date and I am trying to convert it into a date ..... using the function jdate! and the pipelined function is created without any errors
and I am able to get the data with correct branch location bind variable but only problem is it is not binding the date filters in the sql.....
Thanks
Edited by: user10183758 on Oct 16, 2008 8:17 AM -
Hi!
I have a problem with List View Report in mobile application (theme 50 in apex) after updating to apex 4.2.2. I created Report -> List View. I used select from pipelined function in Region Source. Then when page is running and submited three times (or refreshed three times) I get an error:
Error during rendering of region "LIST VIEW".
ORA-01007: variable not in select list
Technical Info (only visible for developers)
is_internal_error: true
apex_error_code: APEX.REGION.UNHANDLED_ERROR
ora_sqlcode: -1007
ora_sqlerrm: ORA-01007: variable not in select list
component.type: APEX_APPLICATION_PAGE_REGIONS
component.id: 21230833903737364557
component.name: LIST VIEW
error_backtrace:
ORA-06512: at "APEX_040200.WWV_FLOW_DISP_PAGE_PLUGS", line 4613
ORA-06512: at "APEX_040200.WWV_FLOW_DISP_PAGE_PLUGS", line 3220
I get this error only when I use select from pipelined function in Region Source (for example: "select value1, value2 from table(some_pipelined_function(param1, param2)) ").
You can check it on http://apex.oracle.com/pls/apex/f?p=50591 (login - demo, password - demo).
In this application:
- I created package TAB_TYPES_PKG:
create or replace PACKAGE TAB_TYPES_PKG IS
TYPE cur_rest_r IS RECORD (
STR_NAME VARCHAR2(128),
INFO VARCHAR2(128)
TYPE cur_rest_t IS TABLE OF cur_rest_r;
END TAB_TYPES_PKG;
- I created pipelined function TEST_FUNC:
create or replace
FUNCTION TEST_FUNC
RETURN TAB_TYPES_PKG.cur_rest_t PIPELINED IS
r_cur_rest TAB_TYPES_PKG.cur_rest_r;
BEGIN
r_cur_rest.STR_NAME := 'ROW 1';
r_cur_rest.INFO := '10';
PIPE ROW (r_cur_rest);
r_cur_rest.STR_NAME := 'ROW 2';
r_cur_rest.INFO := '20';
PIPE ROW (r_cur_rest);
r_cur_rest.STR_NAME := 'ROW 3';
r_cur_rest.INFO := '30';
PIPE ROW (r_cur_rest);
r_cur_rest.STR_NAME := 'ROW 4';
r_cur_rest.INFO := '40';
PIPE ROW (r_cur_rest);
r_cur_rest.STR_NAME := 'ROW 5';
r_cur_rest.INFO := '50';
PIPE ROW (r_cur_rest);
RETURN;
END TEST_FUNC;
- I created List View Report on Page 1:
Region Source:
SELECT str_name,
info
FROM TABLE (TEST_FUNC)
We can see error ORA-01007 after refresing (or submiting) Page 1 three times or more.
How to fix it?Hi all
I'm experiencing the same issue. Predictably on every third refresh I receive:
Error
Error during rendering of region "Results".
ORA-01007: variable not in select list
Technical Info (only visible for developers)
is_internal_error: true
apex_error_code: APEX.REGION.UNHANDLED_ERROR
ora_sqlcode: -1007
ora_sqlerrm: ORA-01007: variable not in select list
component.type: APEX_APPLICATION_PAGE_REGIONS
component.id: 6910805644140264
component.name: Results
error_backtrace: ORA-06512: at "APEX_040200.WWV_FLOW_DISP_PAGE_PLUGS", line 4613 ORA-06512: at "APEX_040200.WWV_FLOW_DISP_PAGE_PLUGS", line 3220
OK
I am running Application Express 4.2.2.00.11 on GlassFish 4 using Apex Listener 2.0.3.221.10.13.
Please note: this works perfectly using a classic report in my desktop application; however, no joy on the mobile side with a list view. I will use a classic report in the interim.
My region source is as follows:
SELECT description AS "DESCRIPTION", reference AS "REFERENCE" FROM TABLE(AUTOCOMPLETE_LIST_VIEW_FNC('RESULTS'))
The procedure:
FUNCTION AUTOCOMPLETE_LIST_VIEW_FNC(
p_collection_name IN VARCHAR2)
RETURN list_row_table_type
AS
v_tab list_row_table_type := list_row_table_type();
BEGIN
DECLARE
jsonarray json_list;
jsonobj json;
json_clob CLOB;
BEGIN
SELECT clob001
INTO json_clob
FROM apex_collections
WHERE collection_name = p_collection_name;
jsonobj := json(json_clob);
jsonarray := json_ext.get_json_list(jsonobj, 'predictions');
FOR i IN 1..jsonArray.count
LOOP
jsonobj := json(jsonArray.get(i));
v_tab.extend;
v_tab(v_tab.LAST) := list_row_type(json_ext.get_string(jsonobj, 'description'), json_ext.get_string(jsonobj, 'reference'));
END LOOP;
RETURN(v_tab);
END;
END AUTOCOMPLETE_LIST_VIEW_FNC;
Thanks!
Tim -
Create xml file with nested internla table or with header & item tables
Hi I have a requirement like, I need to create an xml file for header and item details. For 1 header there may be multiple line items.
I did search in forums some where I came to know that we can use XSL:IF to achieve this. but I could not able to do this.
I tried with using nested internal tables also but now luck.
can anybody please suggest how can we create xml for header and item detials.
<xsl:transform version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:sap="http://www.sap.com/sapxsl"
xmlns:asx="http://www.sap.com/abapxml"
exclude-result-prefixes="asx"
>
<xsl:template match="/">
<OrbisomRequest>
<xsl:attribute name="Version">
<xsl:value-of select="11.1"/>
</xsl:attribute>
<xsl:attribute name="IssuerID">
<xsl:value-of select="1"/>
</xsl:attribute>
<xsl:for-each select="asx:abap[1]/asx:values[1]/T_FINAL[1]/*">
<CreateApprovedPurchaseRequest
RerquestID="{VBLNR}"
CommonName="User1"
Amount="{WRBTR}"
Comment="TestComment"
CurrencyCode="978"
PurchaseType="All"
SupplierName="All"
VCardAlias="PurchaseCard"
ValidFrom="1M"
CurrencyType="B">
<CDFs>
<Invoice> <xsl:value-of select="BELNR"/> </Invoice>
<Amount> <xsl:value-of select="WRBTR"/> </Amount>
</CDFs>
</CreateApprovedPurchaseRequest>
</xsl:for-each>
</OrbisomRequest>
</xsl:template>
</xsl:transform>
here belnr and wrbtr will be my item details. for each payment document I can have multiple invoices. in CDF I need to display the invoices for that particular payment document.
what conditions can I put there before CDFs to make the item internal table to loop based on header internal table.
Regards,
Ranganadh.Looks like you have already created the transformation "Z_ID"
Take a look at the following thread, it answers many of the questions you have asked:
[ABAP data to XML conv with UTF-8 encoding and custom namespace|Re: ABAP data to XML conv with UTF-8 encoding and custom namespace;
Che -
BAPI to add item and its net price while creating opportunity
is there any BAPI/FM through which i can add item and its net value to opportunity in CRM.
Kindly help.
Regards
Sachin YadavYou can give a try with Customer Function like EXIT_SAPLMCB1_001
-
Hi Everyone,
I am Vikas Kumar and i have written a pipelined function
which is returning a UDT which i have created in my database.
but when i am piping a row then there is error :
"Error: PLS-00306: wrong number or types of arguments in call to 'CLASEC_MENU_TYPE' "
i have created UDT as :
create type clasec_menu_type as object (menu_data xmltype);
create type clasec_menu_list_type as table of clasec_menu_type;
and function is as below
create or replace function clasec_fns_menu
return clasec_menu_list_type pipelined as
doc xmldom.DOMDocument;
main_node xmldom.DOMNode;
root_node xmldom.DOMNode;
user_node xmldom.DOMNode;
item_node xmldom.DOMNode;
root_elmt xmldom.DOMElement;
item_elmt xmldom.DOMElement;
item_text xmldom.DOMText;
CURSOR get_menu IS
SELECT menu_level,
is_menu_a_leaf,
menu_id,
menu_name,
menu_screen_uri,
screen_target_frame,
rownum
FROM clasec_menu_view1;
BEGIN
doc := xmldom.newDOMDocument;
main_node := xmldom.makeNode(doc);
root_elmt := xmldom.createElement(
doc,
'Menubar'
root_node := xmldom.appendChild(
main_node,
xmldom.makeNode(root_elmt)
pipe row (clasec_menu_type(root_node));
FOR get_menu_rec IN get_menu LOOP
if get_menu_rec.menu_level = 1 then
item_elmt := xmldom.createElement(
doc,
'menu'
xmldom.setAttribute(
item_elmt,
'text',
get_menu_rec.menu_name
user_node := xmldom.appendChild(
root_node,
xmldom.makeNode(item_elmt)
pipe row(user_node);
end loop;
end;
compilation error is at the statement
pipe row (clasec_menu_type(root_node));
i think its conversion error but don,t know how can i convert root_node which has been defined with :
root_node xmldom.DOMNode;
Regards,
Vikas KumarUse a package to declare a type with xmldom.domnode.
create package xml
as
type xml_node_tab is table of xmldom.domnode;
end;
create or replace function clasec_fns_menu
return xml.xml_node_tab pipelined as
doc xmldom.DOMDocument;
main_node xmldom.DOMNode;
root_node xmldom.DOMNode;
user_node xmldom.DOMNode;
item_node xmldom.DOMNode;
root_elmt xmldom.DOMElement;
item_elmt xmldom.DOMElement;
item_text xmldom.DOMText;
CURSOR get_menu IS
SELECT menu_level,
is_menu_a_leaf,
menu_id,
menu_name,
menu_screen_uri,
screen_target_frame,
rownum
FROM clasec_menu_view1;
BEGIN
doc := xmldom.newDOMDocument;
main_node := xmldom.makeNode(doc);
root_elmt := xmldom.createElement(
doc,
'Menubar'
root_node := xmldom.appendChild(
main_node,
xmldom.makeNode(root_elmt)
pipe row (root_node);
FOR get_menu_rec IN get_menu LOOP
if get_menu_rec.menu_level = 1 then
item_elmt := xmldom.createElement(
doc,
'menu'
xmldom.setAttribute(
item_elmt,
'text',
get_menu_rec.menu_name
user_node := xmldom.appendChild(
root_node,
xmldom.makeNode(item_elmt)
pipe row(user_node);
end if;
end loop;
end;
setting "end if" to the right place -
I have a function which populates a collection, pipe the elements in the collection and throws the piped table object. Its working fine.
But when I pass the collection to this function instead of populating them in the function. Its throwing a error message stating that unable to access rows from nested table.
How to overcome this.
Thanks in advanceThat's strange. When I tried your code on my system I didn't get the error. Here's what I did. Note that some object definitions were not provided so I had to replace some of your code with my own. Also, there was a typo in the definition of tabFun you provided, two "END;" lines were listed where only one was needed.
SQL> CREATE OR REPLACE TYPE myObj AS OBJECT
2 ( F1 INT,
3 F2 DATE,
4 F3 VARCHAR2(25)
5 );
6 /
Type created.
SQL> show errors
No errors.
SQL>
SQL>
SQL> CREATE OR REPLACE TYPE myTab AS TABLE OF myObj;
2 /
Type created.
SQL> show errors
No errors.
SQL>
SQL>
SQL> CREATE OR REPLACE FUNCTION tabFun(tab1 IN myTab)
2 RETURN myTab PIPELINED
3 IS
4 BEGIN
5 FOR i in 1 .. tab1.count
6 LOOP
7 PIPE ROW (myObj(tab1(i).F1,tab1(i).F2,tab1(i).F3));
8 END LOOP;
9 RETURN;
10 END;
11 /
Function created.
SQL> show errors
No errors.
SQL>
SQL>
SQL>
SQL> CREATE OR REPLACE PROCEDURE myProc
2 --(ref_cur out weakcur.cur_defn)
3 ( ref_cur out sys_refcursor )
4 AS
5 tab myTab;
6 BEGIN
7
8 select myobj( 1, sysdate, 'test' )
9 bulk collect into tab
10 from dual
11 ;
12
13 /*
14 SELECT myObj(case_id, creation_date, bo_id_cust)
15 bulk collect into tab
16 from ps_rc_case
17 where rownum < 10;
18 */
19
20 dbms_output.put_line(tab.count); --- While debugging its shows the value as 10
21
22 open ref_cur for select * from table(tabFun(tab));
23 --- Here I am getting the error "Unable to read rows from non nested table"
24
25 END;
26 /
Procedure created.
SQL> show errors
No errors.
SQL>
SQL> set serveroutput on
SQL>
SQL> variable v_ref_cursor refcursor
SQL>
SQL> execute myproc( :v_ref_cursor );
1
PL/SQL procedure successfully completed.
SQL>
SQL> print v_ref_cursor
F1 F2 F3
1 29-APR-06 testTry running the test case from a clean user. Perhaps some objects aren't really defined the way you expect them to be in the user you're currently testing under.
Maybe you are looking for
-
How to add a drill down feature in the Adobe form output
Hi, I am new to adobe forms.I have a requirement where in i need to develop a form which will have diffeerent rows in the output. if the user is accessing the form using SAP GUI i need to provide a hyperlink on the row which will have a drill down fe
-
Please help me: what is the wrong in my code?
Hi all , I wrote a script in unix to send a mail, i am executing the script using java code, when i test the script separately in unix it is working properly , when i am executing it in java it is not working properly it is not showing any errors. UN
-
Just comparing one string how to get the node?
hi group, I get the string value like this: String listselvalue = getJList1().getSelectedValue().toString(); Just i am comparing this with particular node.(which is in tree) like this: TreePath path = getmy_tree().getPathForRow(1); DefaultMutableTree
-
Does anyone have a problem with dialing a number from you contact list. I have a number saved in my contact list and when i go in there to select dial it does not ring but automatically disconnects me. Everyone other number works but just the particu
-
Firefox 4.0 won't start. Says it is not supported on this architecture. I have Mac os X