Result of function returning XMLType truncated in query
Oracle 10.2.0.2.0
myFunc() is a function returning XMLType
The query:
select myFunc() from dual;
return XML about 2Kb
If I try to run the following query:
select XMLElement("Test",(myFunc())) from dual;
then I get a pice of XML with strange symbols at the end (like this L#sП)
in 9.2.8.0 all works properly. What I should do?
CREATE TABLE test_data
(loan_id VARCHAR2(12) NOT NULL,
workparty_id NUMBER,
property_id NUMBER,
contact_id NUMBER,
primary_flag NUMBER,
gen_comment VARCHAR2(4000),
last_updated DATE,
user_name VARCHAR2(50),
deleted_flag NUMBER,
cont_role_id NUMBER,
contact_person_id NUMBER);
CREATE TABLE test_data2
(contact_id NUMBER,
name VARCHAR2(44));
INSERT INTO test_data (LOAN_ID,WORKPARTY_ID,PROPERTY_ID,CONTACT_ID,PRIMARY_FLAG,GEN_COMMENT,LAST_UPDATED,USER_NAME,DELETED_FLAG,CONT_ROLE_ID,CONTACT_PERSON_ID)
VALUES('TEST_L1',10541,12439,11445,1,NULL,TO_DATE('2008-10-17 12:53:32', 'YYYY-MM-DD HH24:MI:SS'),'testuser',0,6,NULL);
INSERT INTO test_data (LOAN_ID,WORKPARTY_ID,PROPERTY_ID,CONTACT_ID,PRIMARY_FLAG,GEN_COMMENT,LAST_UPDATED,USER_NAME,DELETED_FLAG,CONT_ROLE_ID,CONTACT_PERSON_ID)
VALUES('TEST_L1',10542,12439,10697,1,NULL,TO_DATE('2008-10-17 12:53:32', 'YYYY-MM-DD HH24:MI:SS'),'testuser',0,2,NULL);
INSERT INTO test_data (LOAN_ID,WORKPARTY_ID,PROPERTY_ID,CONTACT_ID,PRIMARY_FLAG,GEN_COMMENT,LAST_UPDATED,USER_NAME,DELETED_FLAG,CONT_ROLE_ID,CONTACT_PERSON_ID)
VALUES('TEST_L1',10543,12439,2070,1,NULL,TO_DATE('2008-10-17 12:53:32', 'YYYY-MM-DD HH24:MI:SS'),'testuser',0,10,NULL);
INSERT INTO test_data (LOAN_ID,WORKPARTY_ID,PROPERTY_ID,CONTACT_ID,PRIMARY_FLAG,GEN_COMMENT,LAST_UPDATED,USER_NAME,DELETED_FLAG,CONT_ROLE_ID,CONTACT_PERSON_ID)
VALUES('TEST_L1',10544,12439,2070,1,NULL,TO_DATE('2008-10-17 12:53:32', 'YYYY-MM-DD HH24:MI:SS'),'testuser',0,11,NULL);
INSERT INTO test_data (LOAN_ID,WORKPARTY_ID,PROPERTY_ID,CONTACT_ID,PRIMARY_FLAG,GEN_COMMENT,LAST_UPDATED,USER_NAME,DELETED_FLAG,CONT_ROLE_ID,CONTACT_PERSON_ID)
VALUES('TEST_L1',10545,12439,10527,1,NULL,TO_DATE('2008-10-17 12:53:32', 'YYYY-MM-DD HH24:MI:SS'),'testuser',0,19,33512);
INSERT INTO test_data (LOAN_ID,WORKPARTY_ID,PROPERTY_ID,CONTACT_ID,PRIMARY_FLAG,GEN_COMMENT,LAST_UPDATED,USER_NAME,DELETED_FLAG,CONT_ROLE_ID,CONTACT_PERSON_ID)
VALUES('TEST_L1',12694,12439,11218,1,NULL,TO_DATE('2008-10-17 12:53:32', 'YYYY-MM-DD HH24:MI:SS'),'testuser',0,20,NULL);
INSERT INTO test_data (LOAN_ID,WORKPARTY_ID,PROPERTY_ID,CONTACT_ID,PRIMARY_FLAG,GEN_COMMENT,LAST_UPDATED,USER_NAME,DELETED_FLAG,CONT_ROLE_ID,CONTACT_PERSON_ID)
VALUES('TEST_L1',12695,12439,11219,0,NULL,TO_DATE('2008-10-17 12:53:32', 'YYYY-MM-DD HH24:MI:SS'),'testuser',0,20,NULL);
INSERT INTO test_data (LOAN_ID,WORKPARTY_ID,PROPERTY_ID,CONTACT_ID,PRIMARY_FLAG,GEN_COMMENT,LAST_UPDATED,USER_NAME,DELETED_FLAG,CONT_ROLE_ID,CONTACT_PERSON_ID)
VALUES('TEST_L1',12696,12439,11566,0,NULL,TO_DATE('2008-10-17 12:53:32', 'YYYY-MM-DD HH24:MI:SS'),'testuser',0,20,NULL);
INSERT INTO test_data (LOAN_ID,WORKPARTY_ID,PROPERTY_ID,CONTACT_ID,PRIMARY_FLAG,GEN_COMMENT,LAST_UPDATED,USER_NAME,DELETED_FLAG,CONT_ROLE_ID,CONTACT_PERSON_ID)
VALUES('TEST_L1',11141,12439,10066,0,NULL,TO_DATE('2008-10-17 12:53:32', 'YYYY-MM-DD HH24:MI:SS'),'testuser',0,7,NULL);
INSERT INTO test_data (LOAN_ID,WORKPARTY_ID,PROPERTY_ID,CONTACT_ID,PRIMARY_FLAG,GEN_COMMENT,LAST_UPDATED,USER_NAME,DELETED_FLAG,CONT_ROLE_ID,CONTACT_PERSON_ID)
VALUES('TEST_L1',11142,12439,11215,1,NULL,TO_DATE('2008-10-17 12:53:32', 'YYYY-MM-DD HH24:MI:SS'),'testuser',0,30,NULL);
INSERT INTO test_data (LOAN_ID,WORKPARTY_ID,PROPERTY_ID,CONTACT_ID,PRIMARY_FLAG,GEN_COMMENT,LAST_UPDATED,USER_NAME,DELETED_FLAG,CONT_ROLE_ID,CONTACT_PERSON_ID)
VALUES('TEST_L1',11143,12439,11216,1,NULL,TO_DATE('2008-10-17 12:53:32', 'YYYY-MM-DD HH24:MI:SS'),'testuser',0,5,NULL);
INSERT INTO test_data (LOAN_ID,WORKPARTY_ID,PROPERTY_ID,CONTACT_ID,PRIMARY_FLAG,GEN_COMMENT,LAST_UPDATED,USER_NAME,DELETED_FLAG,CONT_ROLE_ID,CONTACT_PERSON_ID)
VALUES('TEST_L1',11150,12439,10433,1,NULL,TO_DATE('2008-10-17 12:53:32', 'YYYY-MM-DD HH24:MI:SS'),'testuser',0,3,NULL);
INSERT INTO test_data (LOAN_ID,WORKPARTY_ID,PROPERTY_ID,CONTACT_ID,PRIMARY_FLAG,GEN_COMMENT,LAST_UPDATED,USER_NAME,DELETED_FLAG,CONT_ROLE_ID,CONTACT_PERSON_ID)
VALUES('TEST_L1',12307,12439,1984,1,NULL,TO_DATE('2008-10-17 12:53:32', 'YYYY-MM-DD HH24:MI:SS'),'testuser',0,25,NULL);
INSERT INTO test_data (LOAN_ID,WORKPARTY_ID,PROPERTY_ID,CONTACT_ID,PRIMARY_FLAG,GEN_COMMENT,LAST_UPDATED,USER_NAME,DELETED_FLAG,CONT_ROLE_ID,CONTACT_PERSON_ID)
VALUES('TEST_L1',23792,12439,11217,1,NULL,TO_DATE('2008-10-17 12:53:32', 'YYYY-MM-DD HH24:MI:SS'),'testuser',0,15,NULL);
INSERT INTO test_data (LOAN_ID,WORKPARTY_ID,PROPERTY_ID,CONTACT_ID,PRIMARY_FLAG,GEN_COMMENT,LAST_UPDATED,USER_NAME,DELETED_FLAG,CONT_ROLE_ID,CONTACT_PERSON_ID)
VALUES('TEST_L1',87283,12439,14014,0,NULL,TO_DATE('2008-10-17 12:53:32', 'YYYY-MM-DD HH24:MI:SS'),'testuser',0,32,NULL);
INSERT INTO test_data2 (CONTACT_ID,NAME)
VALUES(11218,'11218user');
INSERT INTO test_data2 (CONTACT_ID,NAME)
VALUES(10433,'10433user');
INSERT INTO test_data2 (CONTACT_ID,NAME)
VALUES(11217,'11217user');
INSERT INTO test_data2 (CONTACT_ID,NAME)
VALUES(10066,'10066user');
INSERT INTO test_data2 (CONTACT_ID,NAME)
VALUES(14014,'14014user');
INSERT INTO test_data2 (CONTACT_ID,NAME)
VALUES(11219,'11219user');
INSERT INTO test_data2 (CONTACT_ID,NAME)
VALUES(11566,'11566user');
INSERT INTO test_data2 (CONTACT_ID,NAME)
VALUES(11445,'11445user');
INSERT INTO test_data2 (CONTACT_ID,NAME)
VALUES(10527,'10527user');
INSERT INTO test_data2 (CONTACT_ID,NAME)
VALUES(11215,'11215user');
INSERT INTO test_data2 (CONTACT_ID,NAME)
VALUES(10697,'10697user');
INSERT INTO test_data2 (CONTACT_ID,NAME)
VALUES(2070,'2070user');
INSERT INTO test_data2 (CONTACT_ID,NAME)
VALUES(11216,'11216user');
INSERT INTO test_data2 (CONTACT_ID,NAME)
VALUES(1984,'1984user');
commit;
create or replace function myFuncXML return xmltype is
ret xmltype;
begin
select
XMLElement("WorkingParties",
XMLAgg(
XMLElement("Items",
XMLForest(
wp.workparty_id "ID",
wp.loan_id "LoanID",
wp.property_id "PropertyID",
wp.contact_id "ContactID",
wp.cont_role_id "ContRoleId",
null "ParentContactID",
wp.gen_comment "Description",
wp.primary_flag "PrimaryFlag"
) into ret
from test_data wp
where
nvl(wp.deleted_flag,0) <> 1 and
wp.property_id = 12439
and exists (select contact_id from test_data2 where contact_id = wp.contact_id)
return ret;
end;
This sql returns - ok
select myFuncXML from dual;
This sql - fail
select
XMLElement("Test_root",
myfuncxml
from dual;
if I comment line
and exists (select contact_id from test_data2 where contact_id = wp.contact_id)
in function - all works fine
Similar Messages
-
Function return boolean with combine query and validation
Wondering how would you combine a query and the condition together...
Right now i have a computation that would do a single sql query.
and in my validation i would use a function return boolean call the result from the computation to do some if statements
wondering how would you combine the two in the validation? ( tried pasting both in the validation but it doesn't seem to work.)
Select count(NAME_ID)
FROM table
WHERE to_char(NAME_ID) = :P1_NAME_ID;
IF :P1_results = 1 THEN
RETURN TRUE;
END IF;
RETURN FALSE;OK, then does this work for you as validation on your item; P1_NAME_ID ?
DECLARE
l_rowcount PLS_INTEGER;
BEGIN
SELECT COUNT (name_id)
INTO l_rowcount
FROM my_table
WHERE TO_CHAR (name_id) = :P1_NAME_ID;
IF l_rowcount = 1
THEN
RETURN TRUE;
ELSE
RETURN FALSE;
END IF;
END;Jeff -
PL/SQL function returning a SQL Query
Is this only availabe in HTML db or in 10g in general? Where do I find more about this feature?
Thanks in advance,
DenesNot sure what you mean. HTML DB allows to use a PL/SQL function returning a valid SQL query in report regions.
Its just a PL/SQL function returning a string, outside of HTML DB, I guess you can use it wherever it makes sense. -
Problem Description:
ODBC functions SQLExecDirectW and SQLExecute functions return error:”DIAG [22001] [Microsoft][SQL Server Native Client 10.0]String data, right
truncation (0) “. When we enable tracing in the ODBC administrator, in the SQL.log we see that values for the arguments: ColumnSize, BufferLength, and StrLen_or_IndPtr of ODBC function SQLBindParameter are not being displayed.
Environment Used:
OS: Microsoft Windows Server 2003 R2 Standard x64 Edition.
Complier: Microsoft Visual Studio 2008 SP1 for x64.
Database: Microsoft SQL Server 2008
MDAC: Microsoft Data Access Components SDK 2.8
Note: This problem is seen only in our 64bit application. However, in 32bit
SQLExecDirectW and SQLExecute functions return successfully.
As we could not find the values of 6<sup>th</sup>, 9<sup>th</sup> and 10<sup>th</sup> arguments(ColumnSize,
BufferLength, and StrLen_or_IndPtr) passed to
SQLBindParameter in the ODBC traces for 64bit, we are not sure whether the values for the above mentioned arguments are received correctly by SQLBindParameter or not. This information would help us to debug further. So, could you please let us know why
these values are not displayed.
1)Here is the extract of the SQL.log file for 32bit where the values for SQLULEN , SQLLEN and SQLLEN* are displayed properly:
PR0CNFG 1028-15f0 ENTER SQLBindParameter
HSTMT 0x006FBDD8
UWORD 1
SWORD 1 <SQL_PARAM_INPUT>
SWORD -8 <SQL_C_WCHAR>
SWORD -9 <SQL_WVARCHAR>
SQLULEN 23
SWORD 0
PTR 0x0595EBBA
SQLLEN 46
SQLLEN * 0x05A5FB00
2)Here is the extract of the SQL.log file for 64bit where the values for SQLULEN , SQLLEN are not displayed properly and
SQLExecDirectW function return error:”DIAG
[22001] [Microsoft][SQL Server Native Client 10.0]String data, right truncation (0) “. :
PR0CNFG a78-fe4 ENTER SQLBindParameter
HSTMT 000000000431D2F0
UWORD 1
SWORD 1 <SQL_PARAM_INPUT>
SWORD -8 <SQL_C_WCHAR>
SWORD -9 <SQL_WVARCHAR>
SQLULEN SQLULEN SWORD 0
PTR 0x0000000005364EFA
SQLLEN SQLLEN
SQLLEN * SQLLEN *
PR0CNFG a78-fe4 EXIT SQLBindParameter with return code 0 (SQL_SUCCESS)
HSTMT 000000000431D2F0
UWORD 1
SWORD 1 <SQL_PARAM_INPUT>
SWORD -8 <SQL_C_WCHAR>
SWORD -9 <SQL_WVARCHAR>
SQLULEN SQLULEN SWORD 0
PTR 0x0000000005364EFA
SQLLEN SQLLEN SQLLEN *Hi Nalsr,
From my research, I found:
"[Microsoft][ODBC SQL Server Driver]String
data right truncation" error may be returned from a call to
SQLBindParameter if the size of the string parameter being used is greater than the size of the column being compared to. In other words if the
string size of the <expression> to the left of the <comparison_operator> is less than the
string size of the <expression> to the
right, ODBC may return this error.
The resolution is to make the string size of the <expression> to the
right of the <comparison_operator> less than or equal to the
string size of the <expression> on the left.
It is difficult to track down this type of problem when third party development applications are being used. ODBC Trace can be used to help determine if this problem is occuring.
Here is an example where the customer has submitted a query "select count(*) from type1 where type1 = ?", type1 is varchar(5) and the
data type being passed by the application is char[9].
Here is the relevant portion of the trace. The following information from the "exit" of SQLDescribeParam
SWORD * 0x0095e898 (12)
UDWORD * 0x0095e880 (5)
Maps to the following with the actual value in parenthesis - SQL_VARCHAR Size 5:
SQLSMALLINT *DataTypePtr
SQLUINTEGER *ParameterSizePtr
The "exit" value from SQLBindParameter provides the following
information:
SWORD 1 <SQL_PARAM_INPUT>
SWORD 1 <SQL_C_CHAR>
SQL Data Type SWORD 12 <SQL_VARCHAR>
Parameter Size UDWORD 5
SWORD 0
Value PTR 0x0181c188
Value Buffer Size SDWORD 5
String Length SDWORD * 0x0181c103 (9)
The string length parameter is the length of the
string being bound to the parameter, in this instance there is a size mismatch which results in the SQLError and the SQLErrorW with the message "[Microsoft][ODBC SQL Server
Driver]String data
right truncation" .
Hope this could be helpful.
Best regards,
Halin Huang -
Issue with running PL/SQL function returning Sql query
hi, I am trying to create a report region by using the option of PL/SQL function returning sql query.
I notice that it's very slow for the report region page to show up. In my PL/SQL function body, there are only 3 steps, first update all the 10 rows of varchar2 fields to null,then insert values to those fields, then select all from the table to show report results. It takes more than 5 minitues for the page to load up, how ever, if i run those steps in SQL*Plus, it only takes a couple of seconds to finish. Any suggestions?
Thanks,
ginaSergio, the codes are as followed,
Declare
q varchar2(32767); -- query
Begin
q := 'select "ID",'||
'"ENTRY NAME","TOTAL","#CM","%CM","#CA",'||
'"%CA", from Info_table';
update info_table
set "TOTAL" = '',
"#CM" = '',
"%CM" = '',
"#CA" ='',
"%CA"=''
where "ID"<=10;
// set all data in column Total to null,there is only 10 rows in the table
update info_Table set Total = vTotal,
"#CM" = vCM
(those variables hold user key-in Text filed value)
where ID = 1;
return q;
End; -
Hi guys,
A query suddenly became very slow & has remained like it while connecting over a database. I assume the reason is because the data is being retrieved from 6 tables across a link (6 different connections to the same database) so I thought a view should be better as I had a similar issue and this seemed to resolve it. However I then thought that perhaps a function returning the results would be faster as it would mean I could include the where clauses & group by clause to be done remotely on the database rather than locally after much more rows were returned...is this assumption correct?
My query is as follows:
select rpad(username,18) user_name, rpad(terminal,18) terminal_id, rpad(userhost,30) host_name,
action_name, count(*) actions, sum(sessioncpu) session_cpu
from
select username,
terminal,
userhost,
action_name,
to_char(timestamp,'DD/MM/YYYY HH24:MI:SS') timestamp,
logoff_time,
returncode, session_cpu sessioncpu
from dba_audit_session@XXX
where (logoff_time >= sysdate - :P1_RAD
AND :P1_RAD IS NOT NULL AND :P1_RAD != -1
AND :REQUEST != 'But')
OR (logoff_time >= to_TIMESTAMP(TO_DATE(:P1_FROM, 'DD-MON-YY') || ' ' || :P1_FROM_HOUR, 'DD-MON-YY HH24:MI:SS')
AND logoff_time < to_TIMESTAMP(TO_DATE(:P1_TO, 'DD-MON-YY') || ' ' || :P1_TO_HOUR, 'DD-MON-YY HH24:MI:SS')
AND :REQUEST = 'But'
AND :P1_FROM IS NOT NULL AND :P1_TO IS NOT NULL)
union
select username,
terminal,
userhost,
action_name,
to_char(timestamp,'DD/MM/YYYY HH24:MI:SS') timestamp,
logoff_time,
returncode, sessioncpu
from
select
userid USERNAME ,
userhost USERHOST ,
terminal TERMINAL ,
cast (
(from_tz(ntimestamp#,'00:00') at local) as date) timestamp,
act.name ACTION_NAME ,
logoff$time logoff_time /* LOGOFF_TIME */,
sessionid /* SESSIONID */,
returncode /* RETURNCODE */,
sessioncpu /* SESSION_CPU */
from sys.aud_archive@XXX aud, system_privilege_map@XXX spm, system_privilege_map@XXX spx,
STMT_AUDIT_OPTION_MAP@XXX aom, audit_actions@XXX act
where aud.action# = act.action (+)
and - aud.logoff$dead = spm.privilege (+)
and aud.logoff$dead = aom.option# (+)
and - aud.priv$used = spx.privilege (+)
and act.action between 100 and 102
where (logoff_time >= sysdate - :P1_rad
AND :P1_RAD IS NOT NULL AND :P1_RAD != -1
AND :REQUEST != 'But')
OR (logoff_time >= to_TIMESTAMP(TO_DATE(:P1_FROM, 'DD-MON-YY') || ' ' || :P1_FROM_HOUR, 'DD-MON-YY HH24:MI:SS')
AND logoff_time < to_TIMESTAMP(TO_DATE(:P1_TO, 'DD-MON-YY') || ' ' || :P1_TO_HOUR, 'DD-MON-YY HH24:MI:SS')
AND :REQUEST = 'But'
AND :P1_FROM IS NOT NULL AND :P1_TO IS NOT NULL)
group by username, terminal, userhost, action_name
order by actions desc;So it would take 6 parameters (p1_rad, request, p1_from, p1_to, p1_from_hour, p1_to_hour) and return a table with 8 columns. Would the WHERE & GROUP BY clauses being done remotely rather than on APEX be much better?
MikeIn general functions don't help much to increase the performance.
However sometimes you can programatically choose different select statements depending whether a parameter is filled by the user or not. This allows you as a programmer to provide different and optimized statements depening on the input conditions.
simplified pseudocode example
"SELECT"
select *
from myTable
where (column1 = :param1 or :param1 is null); /* problematic to get an index scon on column1 for this OR expression */
"PL/SQL"
if :param1 is null then
select *
bulk collect into ...
from myTable; /* Full table scan will be used */
else
select *
bulk collect into ...
from myTable
where column1 = :param1; /* index scan on column1 can be used, column historgrams will be considered */
end if; -
Function returning query takes more time to run in Apex4.0
Hi All,
I created a report using function returning query. The function returns query based the parameters which returns dynamic columns. When I run the query in sql developer the query generates and returns the result in 3mins. But in apex it takes maximum of 35mins to return.
The query will return around 10000 rows.
Is it a performance issue in the query or in Apex?can anyone please help
Regards
RajRajEndiran wrote:
Hi Roel,
Thanks much for your suggestion. I run in TOAD and got the result as
Row 1 of 500 fetched so far in 3.31 minutes which means it queried for 500 records alone ? is that not the actual time taken to run the fulll query?That reflects the time to return the first 500 records...
Please suggest.With all the best will in the world, if I was your user and I had to wait 3 minutes for the page to refresh, I'd steadily lose the will to live!
As this is primarily an SQL tuning question, have a look at this message in the FAQ thread in the {forum:id=75} forum:
{message:id=9360003}
That should give you some pointers on the right approach. -
Report- Pl/sql function returning sql query parsing page items as text?
Hi Team,
I am facing a strange issue .
I have four page items namely
1)JOB_CODE
2)MIN_EXP
3) MAX_EXP
4) SOURCES1
I have a report of the type "Pl/sql function returning sql query"
declare
v_sql varchar2(4000);
begin
if (:JOB_CODE IS NOT NULL and :MIN_EXP IS NOT NULL and :MAX_EXP IS NOT NULL and :SOURCES1 IS NOT NULL) then
v_sql:= 'select v_candidate_id, v_fname,v_current_employer,v_Experience_years from candidature where V_REQUIREMENT = :JOB_CODE and v_experience_years >= :MIN_EXP and v_experience_years <= :MAX_EXP and source like ' || '''' || '%'|| ':SOURCES1' || '%' || '''';
elsif (:JOB_CODE IS NULL and :MIN_EXP IS NOT NULL and :MAX_EXP IS NOT NULL and :SOURCES1 IS NOT NULL) then
v_sql := 'select v_candidate_id, v_fname,v_current_employer,v_Experience_years from candidature where v_experience_years >= :MIN_EXP and v_experience_years <= :MAX_EXP and source like ' || '''' || '%'|| ':SOURCES1' || '%' || '''';
elsif (:MIN_EXP IS NULL and :JOB_CODE IS NOT NULL and :MAX_EXP IS NOT NULL and :SOURCES1 IS NOT NULL) then
v_sql := 'select v_candidate_id, v_fname,v_current_employer,v_Experience_years from candidature where v_experience_years <= :MAX_EXP and V_REQUIREMENT = :JOB_CODE and source like ' || '''' || '%'|| ':SOURCES1' || '%' || '''';
elsif (:MAX_EXP is null and :JOB_CODE IS NOT NULL and :MIN_EXP IS NOT NULL and :SOURCES1 IS NOT NULL) then
v_sql := 'select v_candidate_id, v_fname,v_current_employer,v_Experience_years from candidature where V_REQUIREMENT = :JOB_CODE and v_experience_years >= :MIN_EXP and source like ' || '''' || '%'|| ':SOURCES1' || '%' || '''';
end if;
insert into query_list values (v_sql);
insert into debug values (:JOB_CODE , :MIN_EXP , :MAX_EXP , :SOURCES1);
return v_sql;
end;
Please not that I am insertin the query into a table called Query_list and the page item values into the table called Debug thru the pl/sql function which returns teh query.
Now I select the data from the debug tables.
select unique(query) from query_list;
select v_candidate_id, v_fname,v_current_employer,v_Experience_years from candidature where V_REQUIREMENT = :JOB_CODE and v_experience_years >= :MIN_EXP and v_experience_years <= :MAX_EXP and source like '%:SOURCES1%'
select * from debug;
JOBCODE MINEX MAXEX SOURCE
21 1 10 donkeyHire
And if I run the query in sql I get some records returned
select v_candidate_id, v_fname,v_current_employer,v_Experience_years from candidature where V_REQUIREMENT = 21 and v_experience_years >= 1 and v_experience_years <= and source like 'donkeyHire'
V_CANDIDATE_ID V_FNAME V_CURRENT_EMPLOYER V_EXPERIENCE_YEARS
2 Vengu Andale Tech 4
But the record does not show up in the report!
does this type of report parse page items as text?
Why is it so?
Waiting for an early reply.
Thanks,
venkatVenkat - You don't want to put ':SOURCES1' in quotes like that.
Scott -
I don't know if I should be posting this in this Forum or the BI Publisher forum, so I am posting in BOTH forums..
I love APEX, let me say that first.. And appreciate the support offered here by the group, but am running int a confusing issue when BI Publisher tries to build a report from the above type APEX report..
Here is my dilemma:
I have a number of reports that are part of a Oracle package. They return an SQL Query back to a reports region on a page. I am having to deal with the column names returned are col01, col02..
The issue I have is, when building the Application Level query to download the XML sample from in building RTF layouts in Word, you can not use this code, you MUST use a standard SQL Select.
I have taken the sql from the function returning sql, and copied into the application query, supplying the required data values for bind variables being used in the query.
An XML file is produced, and I use this to build the RTF format file that I load back into APEX and try to use it for the PDF rendering of the report. I can view the output as a PDF in the Word add on, but when I try using it with the report, it is returning an empty PDF file.
Can anyone tell me what error log files on the bi publisher side I can look at to see what error is happening?
Thank you,
Tony Miller
UTMB/EHN
Title changed, maybe SOMEONE has an idea on this??
Message was edited by:
Tony MillerHi,
1/ first check you are passing the bind variables and
appropriate values in the call to your report - if
the query returns no data then you get an empty page
So if your query takes :P10_USERNAME variable then
pass it to the report in the URL
f?p=&APP_ID.:0:&SESSION.:PRINT_REPORT=YOUR_REP_QUERY_N
AME:::P10_USERNAME:MYUSER
2/ try to use the Default layout first to check your
report query really returns the data when called
3/ if you defined a header in your rtf template check
there is no & (ampersand) - if using & in the header
and preview the template from word it displays data
OK, but if you use this template in the report query
it fails to render the data (bug in Apex-> Bi
Publisher integration maybe?)
4/ If using the table in the rtf template check its
width does not overflow the page margins - there is a
problem with pdf export
5/ check
/oc4j/j2ee/home/application-deployments/xmlpserver/app
lication.log forthe information on BI Publisher runs
RadoIssue was in the APEX page having issues.. I recoded a new page and am able to generate BI Publisher based PDF files..
Thank you,
Tony Miller
UTMB/EHN -
On Submit process not firing -report (PL/SQL function returning SQL query)
Can anyone suggest possible causes / solutions for the following problem?
I have a report region that uses a PL/SQL function returning SQL query. The report allows the user to update multiple fields / rows and then click a button to submit the page which should run the On-Submit process to update the database. However the process does not run and I get a 'HTTP404 page cannot be found' error; and when I navigate back using the Back button I cannot then navigate to any other page in my application without getting the same error. The button was created by a wizard selecting the options to submit the page and redirect to a (same) page. The button does not actually have a redirect in its definition but the wizard created a branch to the same page which should work and the button has the text 'submit as SUBMIT' next to it so it appears to be set up correctly.
I have recreated this page several times in my application and I cannot get the On-Submit process to run. However I have created a cut down version of the same page in the sample application on apex.oracle.com at http://apex.oracle.com/pls/otn/f?p=4550:1:179951678764332 and this works perfectly so I am at a loss to understand why it does not work in my application. I cannot post any part of the application itself but if anybody would like to check out page 30 of the sample application (Customer Update Test tab) updating the surnames only, using credentials ja, demo, demo this is pretty much what I have got in my application.
Any ideas would be much appreciated?Thanks for the suggestions guys. I have now identified that the problem goes away when I remove the second table from my report query. The original report query retrieved data from two tables and the process was updating only one of the tables. I thought I had approached the task logically i.e. first get the report to display the records from the two tables, then get the process to update the first table and finally to modify the process further to update the second table.
Can anyone point me to an example of multiple row updates on multiple tables using a PL/SQL function returning an SQL query? -
SQL Query(PL/SQL Function Returning SQL Query)
I am trying to write a dynamic report using SQL Query(PL/SQL Function Returning SQL Query).
I can get the report to run but I need to concatinate some columns into one, seperated by a comma or a dash.
I have tried select *****||','||***** alias
also select *****||'-'||***** alias
but I always get an error.
Is there a way of doing this please
GusThis is my full query
declare
v_query varchar2(4000);
begin
if :P63_TRAN_INFO = 2 THEN
v_query := 'select
A.FILENR,
A.EXERCISENAME,
A.STARTDATE,
A.ENDDATE,
A.UNIT,
A.ACCADDRESSES, B.ADDRESS, B.ADDRESS_1, B.POST_CODE, B.TOWN,
A.EXERCISEAREAS,
A.TOTALVEHICLES,
A.TOTALTROOPS+A.RNTOTALTROOPS+A.RAFTOTALTROOPS TOTALTROOPS,
A.CAR, A.MINIBUS, A.HGV,
A.NAMERANK, A.ADDRESS, A.ADDRESSI, A.ADDRESSII, A.POSTCODE,
A.TRANSIT,
A.INFOONLY
from BFLOG_AT A, BFLOG_ACCADDRESS B
WHERE A.ACCADDRESSES = B.NAME
AND A.STARTDATE >= :P63_START_DATE
AND A.ENDDATE <= :P63_END_DATE
AND A.AUTHORISED = 1
AND A.INFOONLY = 1' ;
END IF;
RETURN v_query;
END;
This query runs ok, but if I try changing it to the code below with fields concatinated, then it fails
declare
v_query varchar2(4000);
begin
if :P63_TRAN_INFO = 2 THEN
v_query := 'select
A.FILENR,
A.EXERCISENAME,
A.STARTDATE,
A.ENDDATE,
A.UNIT,
A.ACCADDRESSES||','||B.ADDRESS||','||B.ADDRESS_1||','||B.POST_CODE||','||B.TOWN ADDRESS,
A.EXERCISEAREAS,
A.TOTALVEHICLES,
A.TOTALTROOPS+A.RNTOTALTROOPS+A.RAFTOTALTROOPS TOTALTROOPS,
A.CAR, A.MINIBUS, A.HGV,
A.NAMERANK, A.ADDRESS, A.ADDRESSI, A.ADDRESSII, A.POSTCODE,
A.TRANSIT,
A.INFOONLY
from BFLOG_AT A, BFLOG_ACCADDRESS B
WHERE A.ACCADDRESSES = B.NAME
AND A.STARTDATE >= :P63_START_DATE
AND A.ENDDATE <= :P63_END_DATE
--AND (A.EXERCISEAREAS LIKE "GAP, OA, OAL")
--OR (A.EXERCISEAREAS LIKE "Harz")
AND A.AUTHORISED = 1
AND A.INFOONLY = 1' ;
END IF;
RETURN v_query;
END;
Cheers
Gus -
Column order in SQL Query (PL/SQL function returning a query)
Hi,
when I define a PL/SQL function returning a query inside a region, I often find that the column order is arbitrarily changed.
How do I enforce the column order ?
Bye,
FlavioI removed the 11th column called service_name from this dynamic query: and now the report says: report error:
ORA-01403: no data found. I messed around with the Headiuns Type. It was set to Custom. I changed it to Column Names. There is no difference.
I am not sure how to fix?
declare topqry varchar2(32000);
whereqry varchar2(32000);
finalqry varchar2(32000);
var_status varchar2(100);
division_status varchar2(50);
office_status varchar2(1000);
user_status varchar2(1000);
overdue_status varchar2(1000);
begin
if :P10_FALLBACK = 'All' then
var_status:= ' and vp.status in (''FA'',''FBA'',''FBI'',''25%'',''50%'',''90%'',''Closed'') ';
elsif :P10_FALLBACK = 'Active' then
var_status:= ' and vp.status in (''FA'',''25%'',''50%'',''90%'',''FBA'') ';
elsif :P10_FALLBACK = 'FB' then
var_status:= ' and vp.status in (''FBA'',''FBI'') ';
elsif :P10_FALLBACK = 'Closed' then
var_status:= ' and vp.status in (''Closed'') ';
elsif :P10_FALLBACK = 'Inactive' then
var_status:= ' and vp.status in (''FBI'') ';
end if;
if :P10_DIVISION = 'All' then
division_status:= ' and vp.vms_division in (''News'',''Ad Services'') ';
elsif :P10_DIVISION = 'News' then
division_status:= ' and vp.vms_division in (''News'') ';
elsif :P10_DIVISION = 'Ad' then
division_status:= ' and vp.vms_division in (''Ad Services'') ';
end if;
if :P10_OFFICE = '%' then
office_status:= ' and OFFICE_ID in (select office
from VMS_OFFICE_ACCESS
where user_id = lower(:P0_user) ) ';
else
office_status:= ' and OFFICE_ID in :P10_OFFICE ';
end if;
if :P10_LIMIT_USER = '%' then
user_status := ' and SALESPERSON in (select first_name || '' '' || last_name
from VMS_PROSPECT_users u
join vms_office_access o
on u.office_id = OFFICE
where o.user_id = lower(:P0_USER) ) ';
else
user_status:= ' and SALESPERSON in (:P10_LIMIT_USER ) ';
end if;
if :P10_SHOW_OVERDUE = 'Show' then
overdue_status:= ' and target_close_date <= sysdate ';
var_status:= ' and vp.status in (''25%'',''50%'',''90%'',''FBA'') ';
else
overdue_status:= ' and FIRST_APPOINTMENT between
nvl(to_date(:P10_FIRST_APPT_START, ''mm/dd/yyyy''),FIRST_APPOINTMENT) and
nvl(to_date(:P10_FIRST_APPT_END,''mm/dd/yyyy''),FIRST_APPOINTMENT) ';
end if;
topqry := 'SELECT OFFICE_ID ,vp.PROSPECT_ID ,ENTRY_DATE ,ACCOUNT , NEXT_CONTACT_DATE ,ACTION_STEP ,
TARGET_CLOSE_DATE ,vp.STATUS ,SALESPERSON ,vp.SALES_TYPE ,service_name , FIRST_APPOINTMENT ,MODIFY_DATE ,EST_ANNUAL_REVENUE ,EST_INCREMENTAL_REVENUE ,
pi.NOTES , pi.SALES_TYPE ,pi.STATUS ,Contact ,Origin_Source FROM VMS_PROSPECTING_ITEMS pi right outer join VMS_PROSPECTS vp on vp.PROSPECT_ID = pi.PROSPECT_ID left outer join VMS_SERVICES vs on vs.service_ID = pi.service_ID where 1 = 1 ';
whereqry := ' and (not exists (select *
from VMS_PROSPECTING_ITEMS i3
where vp.prospect_id = i3.prospect_id)
or exists (select *
from VMS_PROSPECTING_ITEMS i2
where i2.order_id = pi.order_id
and active = ''Y'' )) and instr(upper(ACCOUNT),upper(nvl(:P10_ACCOUNT,ACCOUNT))) > 0 ';
whereqry := whereqry || var_status || division_status || office_status || user_status || overdue_status;
finalqry := topqry || whereqry;
return finalqry ;
end; -
EBS ISG using custom PL/SQL functions that return XMLType
Hi,
We have a custom PL/SQL package that we use for interfacing systems and some of the functions in this package ruturn an XMLType. We want to deploy the package functions as web services through the ISG, but it is not working as expected. When deployed through the ISG, the functions with XMLType return type produce a null response from the ISG (they work fine when called in SQL or PL/SQL; functions with non-XMLTypes work fine).
If we change the return type to CLOB (and use getClobVal() on the XMLType) then we get a response from the ISG, but it changes all the angle-brackets in the CLOB (which is still arbitrary XML text) to < > ...
What is the proper way to get the complex XMLType output through the ISG? Anyone have any more experience?
Thanks,
--WaltAlex,
For the predicate groups that are indexed/stored, the exact operator types (as in equality, inequality, like etc) that are indexed are specified while assigning the default index parameters. In the following example, exf$indexoper is used to specify the list of indexed operators.
BEGIN
DBMS_EXPFIL.DEFAULT_INDEX_PARAMETERS('Car4Sale',
exf$attribute_list (
exf$attribute (attr_name => 'HorsePower(Model, Year)',
attr_oper => exf$indexoper('=','<','>','>=','<='),
attr_indexed => 'FALSE') --- stored predicate group
END;
/You can find more information about exf$indexoper at
http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28419/t_expfilobj.htm#ARPLS153
Could you confirm that you chose to index 'is null' and 'is not null' while assigning the default index parameters ? This information is available in OPERATOR_LIST column of the USER_EXPFIL_DEF_INDEX_PARAMS view.
Hope this helps,
-Aravind. -
Function returning SQL query for mutiple series in a chart
Hi,
I would like to know if there is a way to specify a single PL/SQL function returning the queries for multiple series in a 2D Line Flash Chart. I have multiple series in my chart that has different values in the where clause. I can write a PL/SQL function that can return all these queries in one shot. Is there anyway that I can specify this function as returning the queries for all the series in the chart?
As an example, assume that I am using the following three queries for the series in my chart:
select deptno, count(*) from emp where deptno = 10 group by deptno
select deptno, count(*) from emp where deptno = 20 group by deptno
select deptno, count(*) from emp where deptno = 30 group by deptno
I can't write a PL/SQL function that returns a query in the multiple series syntax (SELECT link, label, series_1_value [, series_2_value [, ...]]FROM ...) as I am using an aggregate function and my where clause is different for each series.
Thanks,
RupeshHi Roel,
Thanks for your reply. I am already using an analytical function (RATIO_TO_REPORT(COUNT(*)) OVER () ) in my actual report. My problem is that the query for one series differs from the other only in one where clause. I will be able to dynamically able to generate all the queries for all the series in one pl/sql function. But the chart definition screen does not allow us to define a single function that returns queries for the all the series - possibly seperated by some seperator like S1: select.... S2:select and so on.
Regards,
Rupesh -
Using 'Function Returning SQL Query' with Flash charts
I have created a pl/sql function that returns a SQL query as a varchar2 of this form:
select null link
<x value> value
<Series1 y value> Series 1 Label
<Series2 y value> Series 2 Label
<Series3 y value> Series 3 Label
from tablea a
join tableb b
on a.col = b.col
order by <x value>
If I now call the function from a Flash Chart Series SQL box with the Query Source Type set to 'Function Returning SQL Query' like this:
return functionname(to_date('30-sep-2010', 'dd-mon-yyyy'))
it parses correctly and the page is saved; however, when I run the page I don't get any output - nor any error messages or other indication of a problem.
Now, if I call the function in a SQL client, capture the SQL query output using dbms_output and paste that into the Flash Chart Series SQL box - changing the Query Source Type to SQL Query - and save the page it works fine when I run it and returns a multi-series flash chart.
Can anyone suggest either;
1. What have I might have missed or done wrong?
2. Any way to usefully diagnose the problem...
I have tried using the Apex debugger - which is very nice, by the way - but it doesn't provide any info on what my problem might be. I even tried writing my own debug messages from my function using the apex_debug_message package - got nothing...
Thanks,
EricHi Eric,
Try expressing the source as this:
begin
return functionname(to_date('30-sep-2010', 'dd-mon-yyyy'));
end;That works fine for me, and if I take out the begin-end and the trailing semicolon from the return statement I get the same behavior as you.
It does mention in the help for the source (only during the wizard though) that this source type has to be expressed that way, but I agree it would be helpful if the tool would validate for this format when 'Function Returning SQL Query' is used or give some sort of indication of the trouble. Anyway, this should get you going again.
Hope this helps,
John
If you find this information useful, please remember to mark the post "helpful" or "correct" so that others may benefit as well.
Maybe you are looking for
-
The ejb I am developing is trying to delete the following file from a local filesystem (Linux SuSE 9.3 Pro) : /path/to/file/delete.me I get the following exception: java.security.AccessControlException: access denied (java.io.FilePermission /path/to/
-
I'm selling my MacBook Pro (2009) which has Lion installed. After I wipe the computer clean, I assume the system will go back to its factory settings that it came with. I'll need to reinstall Lion, but I don't have the original disk. How do I proceed
-
I JUST UPLOADED A FILE. HOW DO I SEND IT TO MY CLIENT?
HOW DO I SEND A CLIENT A FILE i JUST UPLOADED TO THIS SITE?
-
Question about DVDs very simple to an expert
um i have a black macbook its sixth months old and i coould never figure out is their anyway say i put a dvd in can i burn it to the comp so i can watch it on the computer without having the disc in is there anyway this can be accomplished
-
Popup for new features of an own developed ABAP
Hi, from time to time new features are integrated into existing ABAPs and I want to inform the users of these ABAPs about the new features. I would like to have a general mechanism where a screen with some documentation pops up when the user runs the