Function return size(Performance)
Hi All,
Can we specify function return size. Let's say
select table_name from user_tables;
TABLE_NAME
FUNCTION_LIST
INFORMATION_DETAIL
INFORMATION_MASTER
INFORMATION_TYPE
PLAN_TABLE
BIG_TABLE_OWNERS
BIG_TABLE
IDX_STATS
EMP
DEPT
PROJECT
T
RUN_STATS
select test_mem(table_name) from user_tables;
TEST_MEM(TABLE_NAME)
FUNCTION_LIST
INFORMATION_DETAIL
INFORMATION_MASTER
INFORMATION_TYPE
PLAN_TABLE
BIG_TABLE_OWNERS
BIG_TABLE
IDX_STATS
EMP
DEPT
PROJECT
T
RUN_STATS
create or replace function test_mem(var_1 in varchar2) return varchar2 as
begin
return var_1;
end;
/So, if you can see function return by default 4000 varchar2 and this might eat memory. Is there any way we can say or limit return bytes say like varchar2(40)
Even worse if they are doing Java to SQL or .NET to SQL!And even more worse if they do it without using bind variables!
And who gets the blame, always?
The database...
[dramatic mode]
stares sadly at horizon and wonders: "Poor, poor database, thou art so incredibly smart and powerful, and yet thou art so vulnerable at the same time and therefore usually hard-parsing all the time..."
[dramatic mode]
[philosophical mode]
Thus spake the proud developer: "Yay! Hooray! The database hard-parses and therefore the database is!"
[philosophical mode]
There should be a penalty for crippling database performance by doing such things.
I wonder: Can't it be built into the compiler? Imagine Oracle refusing to compile certain code, which may be syntactically correct but contains flawed logic, out of self-protection ;)
Similar Messages
-
Problem with Function returned without value -
all i am having a problem w/ jdev passing the values. when hardcoded it works. when i remove to pass the 2 vals for doc_type and doc_num the params are being passed to the impl but the String sql = " BEGIN :5 := scotts_test_proc.get_log(:1, :2, :3, :4 ); END; "; is not sending the values to the pkg. to verify i am getting data i created a table to store the data being passed/retrieved by function. i am getting the log_pieces posted when hard coded so i know that works. but when i try to pass the doc_type and doc_num it errors w/ function returend without value . am i passing the params correctly from co to impl to func to get the return l0g_piece. thats for the help
calling package
spec
function Get_Log( -- rmode IN NUMBER , rmode IN STRING, doc_type IN VARCHAR2 DEFAULT 'TEL',
doc_id IN VARCHAR2 DEFAULT NULL , doc_num IN VARCHAR2 DEFAULT NULL
-- , p_out out varchar2
) -- IS --proc
RETURN varchar2 IS --function
body
l_doc_type := 'TEL';- remove this hardcoded
l_doc_type := doc_type ; --to pass the param
IF l_doc_type = 'TEL' THEN
-- l_log_pieces := Get_TEL(TRIM(3524204)); --change 3524204 to doc_num hardcoded presently
l_log_pieces := Get_TEL(TRIM(doc_num)); --to pass the param
-- (doc_num);
l_log_piece := l_log_pieces(1);
-- p_out := l_log_piece ;
insert into isitthere (doc_type, doc_num, isitthere) VALUES (doc_type, doc_num, l_log_piece); commit;
return l_log_piece; -- function -- return p_out; -- function p_out := l_log_piece ; proc
END IF; --if doc type is TEL
FROM CO
System.out.println("CO Passing paramDOC_TYPE for -------> " +docAbbr.getValue(pageContext) ); -- passing TEL
System.out.println("CO Passing paramDOC_NUM for -------> " + paramDOC_NUM ); -- passing 88
String getDocAbbrForHTML = docAbbr.getText(pageContext);
System.out.println("Passing CO getDocAbbrForHTML for -------> " + getDocAbbrForHTML ); -- passing TEL
Serializable paramDocLocatorParamList [] = {paramRMODE, getDocAbbrForHTML , paramDOC_ID, paramDOC_NUM , p_out };
OAApplicationModule am = (OAApplicationModule)pageContext.getApplicationModule(webBean);
OADBTransaction dbtrans;
OAViewObject docLocator = (OAViewObject)am.findViewObject("DocLocatorVO1");
Serializable paramABC = "TELNET";
paramABC = am.invokeMethod("getHTMLString", paramDocLocatorParamList);
rtxt0.setValue(pageContext, "here it is 12354" + paramABC.toString() );
// docLocator.executeQuery();
// --------------- End getHTMLString ----------------- //
FROM AM IMPL
public String getHTMLString ( String paramRMODE, String getDocAbbrForHTML , String paramDOC_ID, String paramDOC_NUM, String p_out )
System.out.println("Entering The AM Impl");
System.out.println("Passing getDocAbbrForHTML in IMPL -------> " +getDocAbbrForHTML ); -- got TEL in param
System.out.println("Passing paramDOC_NUM in IMPL -------> " + paramDOC_NUM ); -- got 88 in param
CallableStatement st = null;
OADBTransaction txn = (OADBTransaction)getDBTransaction();
Connection conn = txn.getJdbcConnection();
String sql = " BEGIN :5 := scotts_test_proc.get_log(:1, :2, :3, :4 ); END; ";
CallableStatement cs = txn.createCallableStatement(sql,1);
String ErrorExist = "";
String getHTML = "";
try
cs.setString(1, paramRMODE); // cs.setInt(1, paramRMODE.intValue()); // cs.setInt(1,Integer.parseInt(paramRMODE));
cs.setString(2, getDocAbbrForHTML); //paramDOC_TYPE);
cs.setString(3, paramDOC_ID);
cs.setString(4, paramDOC_NUM);
// cs.setString(5,p_out); // --param
/* cs.registerOutParameter(1,Types.CHAR);
cs.registerOutParameter(2,Types.CHAR);
cs.registerOutParameter(3,Types.CHAR);
cs.registerOutParameter(4,Types.CHAR);*/
cs.registerOutParameter(5,Types.VARCHAR);
cs.execute();
getHTML = cs.getString(5 ) ;
p_out = getHTML;
//this string is to see my results. only......
String x ="abc 123";/*"<BR><font face=Verdana ><b>TEL Document Action History <BR><font color=#336699>(3524204 Nosulina, Yelena N COMPLETE)</b></font></font><br><br><table border=1 width=100% cellspacing=0 cellpadding=2 bordercolor=#EEEEDC> <tr bgcolor=#F7F7E7>"
+ " <td width=11% valign=top align=left><font face=Verdana size=2 color=#336699><b>Action</b></font></td> <td width=17% valign=top align=left ><font face=Verdana size=2 color=#336699><b>Approver UserName</b></font></td> <td width=14% valign=top align=left ><font face=Verdana size=2 color=#336699><b>Date/Time </b></font></td> <td width=56% valign=top align=left ><font face=Verdana size=2 color=#336699><b>Notes</b></font></td> "
+" </tr> <!-- loop thru this set of rows ---> <tr bgcolor=#FFFFFF> <td width=11% valign=top align=left ><font face=Verdana size=2 > </font></td> <td width=17% valign=top align=left ><font face=Verdana size=2> </font></td> <td width=14% valign=top align=left ><font face=Verdana size=2>Dec-20-2011 03:01:23 PM </font></td> <td width=56% valign=top align=left ><font face=Verdana size=2>DOCUMENT CREATED </font></td> </tr> <!-- end loop--> "
+ " <tr bgcolor=#FFFFFF> <td width=11% valign=top align=left ><font face=Verdana size=2 > </font></td> <td width=17% valign=top align=left ><font face=Verdana size=2>McCombs, Tracey L </font></td> <td width=14% valign=top align=left ><font face=Verdana size=2>Dec-30-2011 01:12:10 PM </font></td> <td width=56% valign=top align=left ><font face=Verdana size=2>Requestor </font></td> </tr> <!-- end loop--> <tr bgcolor=#FFFFFF> "
+" <td width=11% valign=top align=left ><font face=Verdana size=2 >WF STARTED </font></td> <td width=17% valign=top align=left ><font face=Verdana size=2>Workflow </font></td> <td width=14% valign=top align=left ><font face=Verdana size=2>Dec-30-2011 01:12:21 PM </font></td> <td width=56% valign=top align=left ><font face=Verdana size=2>Workflow Started </font></td> </tr> <!-- end loop--> <tr bgcolor=#FFFFFF> "
+"<td width=11% valign=top align=left ><font face=Verdana size=2 > </font></td> <td width=17% valign=top align=left ><font face=Verdana size=2>McCombs, Tracey L </font></td> <td width=14% valign=top align=left ><font face=Verdana size=2>Dec-30-2011 01:12:21 PM </font></td> <td width=56% valign=top align=left ><font face=Verdana size=2>SUBMIT </font></td> </tr> <!-- end loop--> <tr bgcolor=#FFFFFF> "
+"<td width=11% valign=top align=left ><font face=Verdana size=2 >NOTIFICATION SENT </font></td> <td width=17% valign=top align=left ><font face=Verdana size=2>Workflow </font></td> <td width=14% valign=top align=left ><font face=Verdana size=2>Dec-30-2011 01:12:21 PM </font></td> <td width=56% valign=top align=left ><font face=Verdana size=2>Notification sent to User Approvals Level 1, Org ID: 455 311402400 Med - Infectious Diseases </font></td> "
+" </tr> <!-- end loop--> <tr bgcolor=#FFFFFF> <td width=11% valign=top align=left ><font face=Verdana size=2 > </font></td> <td width=17% valign=top align=left ><font face=Verdana size=2>Brownlow, Lana Jill </font></td> <td width=14% valign=top align=left ><font face=Verdana size=2>Jan-03-2012 08:49:48 AM </font></td> <td width=56% valign=top align=left ><font face=Verdana size=2>Approved : </font></td> </tr> <!-- end loop--> <tr bgcolor=#FFFFFF> "
+" <td width=11% valign=top align=left ><font face=Verdana size=2 >USER APPROVED </font></td> <td width=17% valign=top align=left ><font face=Verdana size=2>Workflow </font></td> <td width=14% valign=top align=left ><font face=Verdana size=2>Jan-03-2012 08:49:48 AM </font></td> <td width=56% valign=top align=left ><font face=Verdana size=2>Completed all User Approvals </font></td> </tr> <!-- end loop--> <tr bgcolor=#FFFFFF> "
+ " <td width=11% valign=top align=left ><font face=Verdana size=2 >CENTRAL APPROVED </font></td> <td width=17% valign=top align=left ><font face=Verdana size=2> </font></td> <td width=14% valign=top align=left ><font face=Verdana size=2>Jan-03-2012 08:49:48 AM </font></td> <td width=56% valign=top align=left ><font face=Verdana size=2>Completed Central Approval Process </font></td> </tr> <!-- end loop--> <tr bgcolor=#FFFFFF> "
+" <td width=11% valign=top align=left ><font face=Verdana size=2 > </font></td> <td width=17% valign=top align=left ><font face=Verdana size=2> </font></td> <td width=14% valign=top align=left ><font face=Verdana size=2>Jan-03-2012 02:17:07 PM </font></td> <td width=56% valign=top align=left ><font face=Verdana size=2>DOCUMENT REASON CHANGED TO COMPLETE. DATA LOADED IN BASE TABLES. </font></td> </tr> <!-- end loop--></table>";
getHTML = x;
System.out.println("getHTML 1234 is " + getHTML ); -- testing output to get returned
cs.close();
catch (SQLException sqle)
try { cs.close(); }
catch (Exception e) {}
throw OAException.wrapperException(sqle);
return getHTML;when return is encountered your function terminates.
-
Using "boolean status" to prohibit a function from being performed!?
Hey guys,
Hope you can help me with this, shouldn't be so hard but I just can't find a way to do it. Obviously, I'm doing something wrong but what?
(Bear in mind that I pretty much just started JAVA)
What I'm trying to do is the following:
1.The end-user presses a button in a Window. (doesn't matter in which.)
2. When the button is pressed, the boolean variable "status" should become "false", preventing the function ACTION from being performed. (Disables the whole function so that it simply doesn't happening.)
This is how I have attempted to solve the problem. (This is a simplified example, of course)
boolean status = false; // globally defined variable that will disable a function to be performed
if(ABUTTON) // if this button is pressed
status = false; // if the button is pressed, the boolean status is supposed to become false, hindering an "ACTION" to perform (see below.)
return status; // return the new status (false) to the globally defined boolean. (im not sure if I can do this!?)
Function ACTION // this is the function that should be dependent of the boolean value of the status.
if (status == true) // perform the task ONLY if status is true, hence: if the end-user has NOT pressed the "BUTTON."
Do this... // if status = true, do this crap
else
do nothing. // else, don't do it.
The error i get when doing this is: "Cannot return a value from method whose result type is void"
Any idea how to solve this?
Thanks!mik3l wrote:
What I'm trying to do is the following:
1.The end-user presses a button in a Window. (doesn't matter in which.)
2. When the button is pressed, the boolean variable "status" should become "false", preventing the function ACTION from being performed. (Disables the whole function so that it simply doesn't happening.)
The error i get when doing this is: "Cannot return a value from method whose result type is void"It looks like you are focusing on the wrong problem. The error has little or nothing to do with the logic of your program.
Let's say I have a method declared like this
private void takeAction() When you declare a method using void it means that the method does not return any value. So if you have a statement inside the method that returns a value, the compiler says that's a no-no. So, you either need to change the method declaration to the type of return value, or you need to remove the line(s) that return a value. -
Pipeline Table Function returning a fraction of data
My current project involves migrating an Oracle database to a new structure based on the new client application requirements. I would like to use pipelined table functions as it seems as though that would provide the best performance.
The first table has about 65 fields, about 75% of which require some type of recoding for the new app. I have written a function for each transformation and have all of these functions stored in a package. If I do:
create new_table as select (
pkg_name.function1(old_field1),
pkg_name.function2(old_field2),
pkg_name.function3(old_field3),
it runs with out any errors but takes about 3 1/2 hours. There are a little more than 10 million rows in the table.
I wrote a function that is passed the old table as a cursor, runs all the functions for the transformations and then pipes the new row back to the insert statement that called the function. It is incredibly fast but only returns .025% of the data (about 50 rows out of my sample table of 200,000). It does not throw any errors.
So I am trying to determine what is going on. Perhaps one of my functions has a bug. If there was would cause the row to be kicked out? There are 40 or so functions so tracking this down has been a bit of a bear.
Any advice as to how I might resolve this would be much appreciated.
Thanks
Dan. I would like to use pipelined table functions as it seems as though that would provide the best performanceUh huh...
it runs with out any errors but takes about 3 1/2 hours. There are a little more than 10 million rows in the table.Not the first time a lovely theory has been killed by an ugly fact. Did you do any bench marks to see whether the pipelined functions did offer performance benefits over doing it some other way?
From the context of your comments I think you are trying to a populate a new table from a single old table. Is this the case? If so I would have thought a straightforward CTAS with normal functions would be more appropriate: pipelined functions are really meant for situations in which one input produced more than one output. Anyway, ifr we are to help you I think you need to give us more details about how this process works and post a sample transformation function.
There are 40 or so functions so tracking this down has been a bit of a bear.The teaching is: we should code one function and get that working before moving on to the next one. Which might not seem like a helpful thing to say, but the best lesson is often "I'll do it differently next time".
Cheers, APC -
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. -
Call stored function return array
Hi all,
I have a function as follow:
create or replace TYPE string_table IS TABLE OF VARCHAR2(2000);
create or replace TYPE ARRAYTYPE is VARRAY(20) OF VARCHAR2(30);
create or replace FUNCTION getEmpArray(s varchar2, t varchar2, st string_table) RETURN ARRAYTYPE AS
l_data ARRAYTYPE := ARRAYTYPE();
BEGIN
l_data.extend; l_data(l_data.count) := s; l_data.extend; l_data(l_data.count) := t; l_data.extend; l_data(l_data.count) := st(1); RETURN l_data;
END;
I want to call this function by StoredFunctionCall
code:
StoredFunctionCall fun = new StoredFunctionCall();
fun.setProcedureName("getEmpArray".toUpperCase());
Object[] arr = new Object[]{"aa", "fgfg", "bbb"};
ArrayDescriptor arrDescriptor =
ArrayDescriptor.createDescriptor("string_table".toUpperCase(),
connection);
ARRAY arrayToPass = new ARRAY(arrDescriptor, connection, arr);
fun.addUnamedArgumentValue("a");
fun.addUnamedArgumentValue("b");
fun.addUnamedArgumentValue(arrayToPass);
fun.setResult("FUNCTION_RESULT"); // for get result by this name
Vector<DatabaseRecord> list = session.executeSelectingCall(fun);
But Exception
PLS-00382: expression is of wrong type
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
Error Code: 6550
Call: BEGIN ? := GETEMPARRAY(?, ?, ?); END;
bind => [=> FUNCTION_RESULT, a, b, oracle.sql.ARRAY@21fbc01]
Please help me
Edited by: fbg on 21:52 26-04-2010A few issues,
1 - JDBC does not support the PLSQL TABLE type, you must use a VARRAY type, or wrap the TABLE function call in a function that takes a VARRAY.
TopLink also has support for PLSQL types in its PLSQLStoredProcedureCall class, but no support is currently offered for StoredFunctions.
You can't pass the VARRAY type for the TABLE argument.
2 - Your function returns a VARRAY, so you need to define this type in the StoredFunctionCall result.
We don't currently expose the API to set a Array type for the result, so you would need to access the call's first parameter directly, or use a StoredProcedureCall (and convert your function to a procedure).
You may also wish to investigate returning a cursor from a stored procedure instead of the varray.
You could also access the JDBC connection directly and perform the call using JDBC code.
Feel free to log these issues in EclipseLink.
James : www.eclipselink.org -
How do i skip a line if a function returns 0
Currently i am producing a report that was passed a starting point parameter. Meaning i want an hourly wage above this number. Now in the report i run the following function. Now if the number the function return is less than 5 then i do not what that line/record to display in the report. Can anyone tell me where to look to understand how to accomplish this.
howard
function WAGE_TYPEFormula return Number is
my_num number(10)
begin
IF :salary_type = 'BIWEEKLY' then
return :salary / 80;
end if;
IF :salary_type = 'MONTHLY' then
return :salary / 173.34;
end if;
IF :salary_type = 'ANNUAL' then
return :salary / 2080;
end if;
IF :salary_type = 'HOURLY' then
return :salary;
end if;
IF :salary_type IS NULL then
return 0;
end if;U need to use a lexical parameter
Go to data model and add a user paranmeter of name say
test_param . Make sure the characer size is adequate
and in your function have this parameter
:test_param := 'whateever u want or dont want to display'
and in the design model include a field with source "test_param"
during runtime the report will display whtever is in test_param -
FRM-41003: This function cannot be performed here.
FRM-41003: This function cannot be performed here.
Cause: You tried to perform a function that references a table, but current block does not correspond to any table.
Action: No action is necessary. You cannot perform the requested function on this block.
Can some one tell me in which scenarios this error will come?
Cheers
Ram KanalaCheck if the block where you are performing execute/enter query are linked to any table/view of the database.
check the data source property of the block. If it is blank, i.e., if your block is a non-database block, the calls to enter/execute query will return the above said error.
-Hemangi -
Error: Windows SDK function returned an error. (Error code -12)
I receive this error when attempting to build an installer for my Labview application.
CDK_Item_OnDoProperties.vi.ProxyCaller >> CDK_Item_OnDoProperties.vi >> CDK_InstallerConfiguration_Editor.vi >> CDK_Build_Invoke.vi >> CDK_Engine_Main.vi >> CDK_Engine_Build.vi >> NI_MDF.lvlib:MDFDistCopyList_CopyItem.vi
Loading product deployment information
Loading product deployment information
Adding files to installer
Done adding files
Preparing to build deployment
Copying products from distributions
Copying distribution 'NI-DAQ 8.0.1' from: D:\ to: C:\DARTS\ATS_TE_Project\DARTS_NI-DAQ_HP3561A_Dynamic_Signal_Analyzer\Installer\
*** Error: Windows SDK function returned an error. (Error code -12)
The system cannot find the file specified.
*** End Error Report
Done building deploymentI was able to get the install builder to build an installer for my
Application today 6/6/07. These are the steps I performed along with good amounts of trail and error.
1) I attempted to re-install the NI-DAQ 8.0.1 drivers however I didn't
perform this because it said it remove NI products which I didn't want
removed. But it didn't tell me what it would remove.
2) Instead, I copied the entire NI-DAQ 8.0.1 distribution to a directory on my hard drive.
3) I set the NI-DAQ 8.3 install build type to FULL in install builder.
4) In install builder when prompted for the components from the NI-DAQ
8.0.1 I browsed to the NI-DAQ 8.0.1 directory on the hard drive and
also un-checked the cache box.
5) It through another error this time saying it couldn't find
C:\NI-DAQ8_0_1\8.0.1\Products\LabVIEW_Broker71\LVBroker71Deu.mst (and,
LVBroker71Fra.mst, LVBroker71jpn.mst, LVBroker1071Deu,
LVBroker1071Fra.mst, LVBroker1071jpn.mst). It also could not find the
LVBroker1071 files in the
C:\NI-DAQ8_0_1\8.0.1\Products\LabVIEW_Broker1071 directory either.
6) I performed a search for these files and they did not exist in the
NI-DAQ 8.0.1 directory on my hard drive or the 8.0.1 CD I have.
7) These files DID exist in my NI-DAQ 8.3 directory located on my hard drive.
8) I copied the LVBrokerxxxx.mst (listed in 5 above) files from the
NI-DAQ 8.3 directory on my hard drive to the corresponding location in
the NI-8.0.1 directory on my hard drive.
9) This time when I rebuilt the installer for my application the build was successful.
Additional information:
When I built my application I only selected English for language
support. In Install builder in "Dialog Information I also selected
English.
I haven't attempted to try the installer on my target yet so I'm not
quite sure how successful I really was but at least I have a installer.
Let me know if this also works for you.
Rich... -
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 -
Unable to see function return values in Visual Studio 2013 debugger
Hi!
I can't see function return values in
Microsoft Visual Studio Ultimate 2013
Version 12.0.31101.00 Update 4
Microsoft .NET Framework
Version 4.5.51650
Installed Version: Ultimate<o:p></o:p>
as described in http://blogs.msdn.com/b/visualstudioalm/archive/2013/06/27/seeing-function-return-values-in-the-debugger-in-visual-studio-2013.aspx
So what can I do to get this functionality back?
MsdnMezzoHi MsdnMezzo,
Reference:
http://blogs.msdn.com/b/visualstudioalm/archive/2013/06/27/seeing-function-return-values-in-the-debugger-in-visual-studio-2013.aspx
If use the same sample in the above blog provided by you, how about the result? Could you debug it with the same steps? I could debug it in my side using the VS2013.
So to make sure that whether it is your VS IDE issue, please debug it with this sample, if it works well, I doubt that we would think about your specific project and the debugging steps.
If so, to really repro this issue, could you share us a sample with one drive? You could upload your project to one drive and share us the downloaded link in your new reply, I will download and repro this issue in my side.
Best Regards,
Jack
We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
Click
HERE to participate the survey. -
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 -
Page Validation - Function Returning Boolean - Check for NULL
I have 3 Page Validations which all fire on "When Button Pressed" = "Submit".
<br><br>
Number 1 is of type "Item specified is NOT NULL" for "P199_BUSINESS_UNIT1".
<br>
Number 2 is of type "Item specified is NOT NULL" for "P199_BUSINESS_UNIT2".
<br>
Number 3 is of type "Function Returning Boolean" and has the following code:
<br><br>
IF :P199_BUSINESS_UNIT1 IS NULL AND
:P199_BUSINESS_UNIT2 IS NULL THEN
RETURN FALSE ;
ELSE
RETURN TRUE ;
END IF ;<br>
When P199_BUSINESS_UNIT1 is NULL and P199_BUSINESS_UNIT2 is NOT NULL, I get the Error from Validation 1. Perfect.
<br>
When P199_BUSINESS_UNIT1 is NOT NULL and P199_BUSINESS_UNIT2 is NULL, I get the Error from Validation 2. Perfect.
<br>
When P199_BUSINESS_UNIT1 is NOT NULL and P199_BUSINESS_UNIT2 is NOT NULL, I don't get an Error Message. Perfect.
<br><br>
When P199_BUSINESS_UNIT1 is NULL and P199_BUSINESS_UNIT2 is NULL, I get Error Message 1 & 2, <strong>but nothing from 3.</strong>
<br><br>
If I change the code to:
<br><br>
IF :P199_BUSINESS_UNIT1 = '01' AND
:P199_BUSINESS_UNIT2 = '01' THEN
RETURN FALSE ;
ELSE
RETURN TRUE ;
END IF ;<br>
and change both values to '01', I get the appropriate Error Message.
<br><br>
What is going on? Is there some reason I can't check for NULL in a Function Returning Boolean?Scott,
<br><br>
Instead of adding the Validations, I changed my code from:
<br><br>
IF :P199_BUSINESS_UNIT1 IS NULL AND
:P199_BUSINESS_UNIT2 IS NULL THEN
RETURN FALSE ;
ELSE
RETURN TRUE ;
END IF ;
<br>to the following and got the desired results:
<br><br>
IF REPLACE(:P199_BUSINESS_UNIT1,<strong>'%null'</strong> || '%',NULL) IS NULL AND
REPLACE(:P199_BUSINESS_UNIT2,<strong>'%null'</strong> || '%',NULL) IS NULL THEN
RETURN FALSE ;
ELSE
RETURN TRUE ;
END IF ;<br>
Note that I changed the word REPLACE to upper case and the second occurrence of the word NULL to upper case to accentuate the fact that the '%null' is case sensitive, using "%NULL' does not work, it has to be "%null' in lower case.
<br><br>
<strong>Thanks for your help.</strong> -
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;
Maybe you are looking for
-
Using B2B as file / ftp gateway
We have a need to reach out various ftp servers and retrieve files. We can do it in BPEL directly, but i was wondering if it is possible for b2b server to go out to these ftp servers and retrieve the files on a scheduled basis ?
-
Problem inserting xml doc into tables
I'm trying to load and xml doc into a table/columns using putXML. I clearly have elements in my xml doc that I do not want to load into the table. I am receiving the following error: The XML element tag 'VERB' does not match the name of any of the co
-
What happens if you perform certain component update for iphoto '11 on mac twice?
Hi i know it sounds ridiculous and silly question to begin with, maybe i'm just being a little paranoid the thing is that i have update a certain component update for iphoto '11 twice which is "digital raw compatibility update 4.0.3" via automatic ap
-
Execution of UPC_BUNDLE_EXECUTE_STEP with 0FISCPER
Dear collegues, I´ve a problem to execute the UPC_BUNDLE_EXECUTE_STEP program to schedule a BPS global sequence several step using 0FISCPER. I created an exit variable with 0FISCPER and 0FISCVARNT but this way, the flag "restriction of values require
-
Two signals at two waveform graphs
Hello Everyone! I got some problems with my software for data acquisition. I got two signals and I have to show two signals at two different Waveform Graph. How to seperate signals? Solved! Go to Solution. Attachments: separate.png 37 KB spearate