Using a array in SQL in
Hello experts,
I got a procedure that accepts a list of clients. From that list I need to build a query that looks like this
select *
from customers
where customer_id in (i_customer_list);Where i_customer_list is the input parameter of a procedure that is a nested table type. What would be the best approach on handling this type of situation?
Best regards,
Igor
Igor S. wrote:
What would be the best approach on handling this type of situation?Depends on the nature of the situation.
If, for example, the same sets of lists are commonly submitted by clients, then that should be addressed via normalisation. A relation looking something as follows:
+GROUPS = ( group_id, group_name, ... )+
+CUSTOMER_GROUPS = ( group_ip, customer_id )+
The client then submits a group identifier instead of a list of customer identifiers - and the SQL does a join or exists in the customer group relation in order to identify the relevant customers.
If, for example, the lists are fairly random and large per client session, but re-used by the client session, then a GTT (global temp table) can be considered. This allows the client session to submit its large list of customer identifiers once, and storing that in a GTT. Where SQLs can then use, and re-use, this table via a join or exists.
What does NOT make sense is the client session submitting a string, containing a comma delimited list of customer identifiers. Software engineering principles say that this approach is wrong.
Structured data and structured programming are sides of the same coin, that says well designed, consistent, and robust software. Sending structured data (such as a customer id array) as a string is, plain and simple, wrong.
Similar Messages
-
How to use Associative Array in sql query?
Hello,
I have a problem on using Associative Array variable on query; and my query is similar to the one below;
TYPE OTHERGENERICS IS TABLE OF NUMBER(10) INDEX BY BINARY_INTEGER;
othersGenerics OTHERGENERICS;
CURSOR cursor_othersGenerics IS
select master.GENERICCODEID
from ASMTRG_ARTICLEMASTER master
join ASMTRG_ARTICLEMAP map on MAP.ARTICLECODEID = MASTER.ID
group by MASTER.GENERICCODEID
minus
select FGG.GENERICCODEID
from asmtrg_icfocusgroup fg
join asmtrg_icfocusgrpchannel fgc on FGC.GROUPID = FG.ID and fgc.isactive=1
join asmtrg_icfocusgengroup fgg on FGG.GROUPID = FG.ID and FGg.ISACTIVE=1
where fgc.channelid=1 and fg.isactive = 1
group by FGG.GENERICCODEID;
BEGIN
OPEN cursor_othersGenerics;
FETCH cursor_othersGenerics BULK COLLECT INTO othersGenerics;
CLOSE cursor_othersGenerics;
SELECT icfrd.*,
CASE
WHEN EXISTS(select ta.genericcodeid from <???XXX???> ta where ta.genericcodeid = icfgrp.genericcodeid) THEN -1
ELSE icfrd.icfgroupid
END CLASSIFICATION
FROM ASMTRGVIW_ICFOCUSREPORTDATA icfrd
LEFT JOIN ASMTRG_ICFOCUSGROUP icfgrp on icfrd.ICFGROUPID = icfgrp.ID
WHERE (channelId IS NULL OR icfrd.CHANNELID = channelId)
AND (asmCodeId IS NULL OR icfrd.ASMCODEID = asmCodeId)
AND (yearId IS NULL OR icfrd.YEARID = yearId)
AND (monthId IS NULL OR icfrd.MONTHID = monthId)
END;
By the way this is a part of my function.
The "othersGenerics" is my associative array variable and <???XXX???> is the place where I need to use my "othersGenerics" array to check. So far I've tried
"select ta.genericcodeid from table(cast(otherGenerics as OTHERGENERICS)) ta where ta.genericcodeid = icfgrp.genericcodeid",
"select ta.genericcodeid from table(otherGenerics) ta where ta.genericcodeid = icfgrp.genericcodeid",
"select ta.genericcodeid from otherGenerics ta where ta.genericcodeid = icfgrp.genericcodeid"
and these are not working.
What is your suggestions?Your type will have to be created as an independent object in your schema. So CREATE TYPE cannot be in your function declaration, it has to be outside it. (And then the line inside your declaration that defines the type will have to be removed.)
But now I can see that you use this array as a kind of "temporary lookup table" - you populate the array and then use it for lookup in your select statement. An alternative way of doing this could be like this completely without arrays:
with othergenerics as (
select master.GENERICCODEID
from ASMTRG_ARTICLEMASTER master
join ASMTRG_ARTICLEMAP map on MAP.ARTICLECODEID = MASTER.ID
group by MASTER.GENERICCODEID
minus
select FGG.GENERICCODEID
from asmtrg_icfocusgroup fg
join asmtrg_icfocusgrpchannel fgc on FGC.GROUPID = FG.ID and fgc.isactive=1
join asmtrg_icfocusgengroup fgg on FGG.GROUPID = FG.ID and FGg.ISACTIVE=1
where fgc.channelid=1 and fg.isactive = 1
group by FGG.GENERICCODEID
SELECT icfrd.*,
CASE
WHEN EXISTS(select ta.genericcodeid from othergenerics ta where ta.genericcodeid = icfgrp.genericcodeid) THEN -1
ELSE icfrd.icfgroupid
END CLASSIFICATION
FROM ASMTRGVIW_ICFOCUSREPORTDATA icfrd
LEFT JOIN ASMTRG_ICFOCUSGROUP icfgrp on icfrd.ICFGROUPID = icfgrp.ID
WHERE (channelId IS NULL OR icfrd.CHANNELID = channelId)
AND (asmCodeId IS NULL OR icfrd.ASMCODEID = asmCodeId)
AND (yearId IS NULL OR icfrd.YEARID = yearId)
AND (monthId IS NULL OR icfrd.MONTHID = monthId)
...The with clause (subquery factoring) you can think of as a kind of temp table called othergenerics created "on-the-fly".
The optimizer may decide to actually create a temp table for you and use in the lookup, or it may decide to rewrite the query into suitable joins or nested loops or hashing - whatever the optimizer decides will be the optimal way of doing things :-)
So unless you use your array other places in your function, I would recommend dropping the array completely, skip populating an array, and instead use a with clause for your temporary lookup. -
Hello,
I would like to use integer array( say..int count[] = new int[3];) on my sql statement to retrieve some values. Is there a way to use int array variable in sql statement?. If yes, how should I approach doing that?.
Thank You in Advance.
Regards,
Pinal.I'm going to be honest, I'm not so sure there is such a thing in standard SQL syntax so it would depend upon the database you were using as to whether this option was available as part of the SQL language.
My suggestion would be to cheat, naughty I know:String arrayString = "";
for (int i = 0; i < arrayInt.size(); i++) {
arrayString += "**" + arrayInt;
arrayString = arrayString.substring(2, arrayString.length());Then just parse arrayString in to an SQL VARCHAR or TEXT field.
Obviously when you return it just use StringTokenizer to split the string up using your deliminator (in this case **) and then convert the values back into an int array.
I'm not sure how efficient that code would be but it should do the job. -
How to use an array in a SQL Query
Hi
I need to use an array of numbers such as a VARRAY or Associated Index Array so that I can do the following SQL:
select *
from *
where array is null or id is in array
So that if the array is empty it will return all the records, and if the array is not empty then it will return only the rows associated with the ids in the array.
Is this possible?
Regards,
Néstor BoscánActually, solution I posted returns all rows when VARRAY is empty, not when it is null. To return all rows when VARRAY is null, use:
SQL> select ename
2 from emp
3 where deptno in (select * from table(cast(sys.OdciNumberList(10,30) as sys.OdciNumberList)))
4 or sys.OdciNumberList(10,30) is null
5 /
ENAME
ALLEN
WARD
MARTIN
BLAKE
CLARK
KING
TURNER
JAMES
MILLER
9 rows selected.
SQL> select ename
2 from emp
3 where deptno in (select * from table(cast(null as sys.OdciNumberList)))
4 or null is null
5 /
ENAME
SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER
ADAMS
ENAME
JAMES
FORD
MILLER
14 rows selected.
SQL> SY. -
Error in the pl/sql block using associative arrays
Hi
I tried the following block of code using associative arrays.
DECLARE
TYPE NumTab IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
CURSOR c1 IS SELECT empno FROM emp;
empnos NumTab;
rows NATURAL := 10;
BEGIN
OPEN c1;
FOR i in empnos.first..empnos.last LOOP
/* The following statement fetches 10 rows (or less). */
FETCH c1 BULK COLLECT INTO empnos LIMIT rows;
EXIT WHEN c1%NOTFOUND;
DBMS_OUTPUT.PUT_LINE ( empnos.next(i));
END LOOP;
CLOSE c1;
END;and the error is
DECLARE
ERROR at line 1:
ORA-06502: PL/SQL: numeric or value error
ORA-06512: at line 8could you please let me know where i'm wrong
and please guide me where we use these associative arrays.
ThanksSomething like this. Do minor modification in your code.
DECLARE
TYPE NumTab IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
CURSOR c1 IS SELECT empno FROM emp;
empnos NumTab;
rows NATURAL := 5;
BEGIN
OPEN c1;
LOOP
/* The following statement fetches 5 rows (or less). */
FETCH c1 BULK COLLECT INTO empnos LIMIT rows;
EXIT WHEN c1%NOTFOUND;
DBMS_OUTPUT.PUT_LINE ( empnos.count);
END LOOP;
CLOSE c1;
END;
/ -
. NET to call Oracle stored procedure, use an array of types of parameters
. NET to call Oracle stored procedure, use an array of types of parameters
Step1:(In the Oracle database define an array of types)
CREATE OR REPLACE TYPE STRING_VARRAY AS VARRAY (1000) OF NVARCHAR2(255)
Step2:
CREATE OR REPLACE PROCEDURE Test
(i_test in string_varray,o_result out int)
IS
BEGIN
o_result:=i_test.count;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
NULL;
WHEN OTHERS
THEN
o_result:=0;
END arraytest;
Step3:
Use System.Data.OracleClient
C# Code:
OracleConnection conn = new OracleConnection("User Id=test;Password=test;Data Source=test");
OracleCommand cmd = new OracleCommand("Test", conn);
cmd.CommandType = CommandType.StoredProcedure;
string[] str = new string[] { "11", "22" };
OracleParameter p1 = new OracleParameter("i_test", OracleType.NVarChar);
p1.Direction = ParameterDirection.Input;
p1.Value = str;
cmd.Parameters.Add(p1);
OracleParameter p2 = new OracleParameter("o_result", OracleType.Int32);
p2.Direction = ParameterDirection.Output;
cmd.Parameters.Add(p2);
int i = 0;
try
conn.Open();
cmd.ExecuteNonQuery();
i =(int) p2.Value;
catch (Exception ex)
finally
conn.Close();
Error:
Execution Failed:ORA-06550:Line 1,Column 7:
PLS-00306:Test parameters when calling the number or types of errors
ORA-06550:Line 1,Column 7:
PL/SQL:Statement ignored
Edited by: user10133982 on Jun 4, 2009 7:13 AM. NET to call Oracle stored procedure, use an array of types of parameters
The use of ODP.net(Oracle 10g), the error is still the same
Step1:(In the Oracle database define an array of types)
CREATE OR REPLACE TYPE STRING_VARRAY AS VARRAY (1000) OF NVARCHAR2(255)
Step2:
CREATE OR REPLACE PROCEDURE Test
(i_test in string_varray,o_result out int)
IS
BEGIN
o_result:=i_test.count;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
NULL;
WHEN OTHERS
THEN
o_result:=0;
END arraytest;
Step3:
ODP.NET(Oracle 10g)
OracleConnection conn = new OracleConnection("User Id=test;Password=test;Data Source=test");
OracleCommand cmd = new OracleCommand("Test", conn);
cmd.CommandType = CommandType.StoredProcedure;
string[] str = new string[2] { "11", "222" };
cmd.ArrayBindCount=2;
OracleParameter p1 = new OracleParameter("i_test", OracleDbType.NVarChar);
p1.Direction = ParameterDirection.Input;
p1.CollectionType = OracleCollectionType.PLSQLAssociativeArray;
p1.Value = str;
p1.ArrayBindSize=new int[2]{2,3};
p1.ArrayBindStatus = new OracleParameterStatus[2]{
OracleParameterStatus.Success,
OracleParameterStatus.Success
cmd.Parameters.Add(p1);
OracleParameter p2 = new OracleParameter("o_result", OracleDbType.Int32);
p2.Direction = ParameterDirection.Output;
P2.CollectionType = OracleCollectionType.PLSQLAssociativeArray;
p2.Value=0;
cmd.Parameters.Add(p2);
int i = 0;
try
conn.Open();
cmd.ExecuteNonQuery();
i =(int) p2.Value;
catch (Exception ex)
finally
conn.Close();
Error:
Execution Failed:ORA-06550:Line 1,Column 7:
PLS-00306:Test parameters when calling the number or types of errors
ORA-06550:Line 1,Column 7:
PL/SQL:Statement ignored
Edited by: user10133982 on Jun 5, 2009 7:48 AM -
Using Assoc Arrays in OBPM 10GR3 for 25 million comparisons
Can we use Associative arrays in OBPM 10GR3 to do 25 million comparisons or even more than that?
I have two assoc arrays which I compare with each other 25 million times by looping them one inside the other.
For e.g.
for(int i = 0; i < 5000; i++)
for(j=0; j < 5000; j++)
if(i==j)
logMessage ("The value is equal");
when I try to do that, I get an error:-
Persistence Data error.
I get this error:-
Error while persisting the transaction data: 'An error occurred while accesing the database. Detail:SQL statement: 'unknown' ' Details: An error occurred while accesing the database. Detail:SQL statement: 'unknown' Caused by: Unexpected exception while enlisting XAConnection java.sql.SQLException: Transaction rolled back: Transaction timed out after 302 seconds BEA1-25BFB4A4F3934EFC9C00 at weblogic.jdbc.jta.DataSource.enlist(DataSource.java:1418) at weblogic.jdbc.jta.DataSource.refreshXAConnAndEnlist(DataSource.java:1330) at weblogic.jdbc.wrapper.JTAConnection.getXAConn(JTAConnection.java:189) at weblogic.jdbc.wrapper.JTAConnection.checkConnection(JTAConnection.java:64) at weblogic.jdbc.wrapper.Connection.preInvocationHandler(Connection.java:92) at weblogic.jdbc.wrapper.Connection.prepareStatement(Connection.java:482) at fuego.jdbc.FaultTolerantConnection.prepareStatement(FaultTolerantConnection.java:541) at fuego.server.persistence.jdbc.JdbcServerActivityPersMgr.insertInstanceEvent(JdbcServerActivityPersMgr.java:913) at fuego.server.persistence.Persistence.storeInstanceEvent(Persistence.java:944) at fuego.server.execution.EngineExecutionContext.persistEvents
So can we use such a big comparison on OBPM 10GR3. If yes, how?Don't use ASSOC Arrays. Use SETs.
Also increase the JTA timeout in Weblogic to like say 600 seconds. -
I'm using the pl/sql web toolkit, and have a page with checkboxes galore. These pass to the handling procedure as an owa_util.ident_arr. The values that are passed in this array correspond to codes that I need to have in a WHERE clause of some SQl on the handling page...I think I can do something like:
PROCEDURE P_STU_ALL_LIST
p_status_filter owa_util.ident_arr
IS
lv_status_in owa_util.ident_arr DEFAULT p_status_filter;
FOR i IN lv_status_in.FIRST..lv_status_in.LAST
LOOP
where_clause := lv_status(i)||',"
END LOOP;
and then do:
SELECT columns FROM table WHERE MyCodes IN where_clause
but I wonder if there's a way to simply pass the array to the SQL WHERE, like:
SELECT columns FROM table WHERE MyCodes IN table(case(lv_status as ???))
which is described here http://dbaforums.org/oracle/lofiversion/index.php?t15523.html but I can't seem to get the syntax right...I'm not sure what to use as the ??? datatype (anything I try gives errors).
Any ideas...?oBean wrote:
I'm using the pl/sql web toolkit, and have a page with checkboxes galore. These pass to the handling procedure as an owa_util.ident_arr. The values that are passed in this array correspond to codes that I need to have in a WHERE clause of some SQl on the handling page...I think I can do something like:
PROCEDURE P_STU_ALL_LIST
p_status_filter owa_util.ident_arr
IS
lv_status_in owa_util.ident_arr DEFAULT p_status_filter;
FOR i IN lv_status_in.FIRST..lv_status_in.LAST
LOOP
where_clause := lv_status(i)||',"
END LOOP;Horrible. You are creating non-shareable SQL. This is the #1 reason for shoddy Oracle performance.
You cannot use PL/SQL associative arrays in SQL - as the SQL engine does not support PL/SQL data types. PL/SQL however integrates with SQL and support SQL data types.
So you will need to convert the PL/SQL associative array to a SQL collection/array - and then use that SQL type as a bind variable in the SQL statement.
E.g.
{code}
SQL> create or replace type TStrings as table of varchar2(4000);
Type created.
SQL> create or replace procedure FunkyProc( c out sys_refcursor, arr OWA_UTIL.ident_arr ) is
2 sqlArr TStrings;
3 begin
4 sqlArr := new TStrings();
5 sqlArr.Extend( arr.Count );
6 for i in 1..arr.Count loop
7 sqlArr(i) := arr(i);
8 end loop;
9 open c for
10 select
11 object_type, object_name
12 from all_objects
13 where object_type member of sqlArr
14 and owner != 'SYS'
15 and rownum < 11
16 order by 2;
17 end;
18 /
Procedure created.
SQL>
SQL> var c refcursor
SQL> declare
2 arr OWA_UTIL.ident_arr;
3 begin
4 arr(1) := 'TYPE';
5 arr(2) := 'PACKAGE';
6 arr(3) := 'FUNCTION';
7
8 FunkyProc( :c, arr );
9 end;
10 /
PL/SQL procedure successfully completed.
SQL> print c
OBJECT_TYPE OBJECT_NAME
PACKAGE LT
FUNCTION WM$CONVERTDBVERSION
TYPE WM$ED_UNDO_CODE_NODE_TYPE
TYPE WM$ED_UNDO_CODE_TABLE_TYPE
TYPE WM$EVENT_TYPE
FUNCTION WM$GETDBVERSIONSTR
TYPE WM$LOCK_TABLE_TYPE
TYPE WM$NV_PAIR_NT_TYPE
TYPE WM$NV_PAIR_TYPE
TYPE WM_PERIOD
10 rows selected.
SQL>
{code}
PS. A bit of a hack is used to read the associative array - but mostly this will work as developers using associative arrays are ignorant as to how it should be used. They use it as a normal vanilla array. Including the idiots that designed the OWA_UTIL.ident_arr data type as an associative array as oppose to a standard array. -
How do I use an array variable in the assignment target?
Hi,
I am creating a BPEL process in which I have to use an array variable. The array variable needs to be initialized based on some condition.
The issue is I cannot find a way to set the value of the array variable. There are ways to GET the value of an array variable indexing into it.
But how do I set the value by using the Array variable in the <to> tag?
Any help is appreciated. I am using BPEL 10.1.2.0.2.
Thanks.You can declare a variable of type integer which will server as your index. Figure out based on some condition in your process which index of array to update. Assign to your integer variable you created.
And have Assign copy operation like this -
<copy>
<from variable="Var_Output_FetchDueDate"
part="OutputParameters"
query="/ns18:OutputParameters/ns18:DUEDATE"/>
<to variable="outputVariable" part="payload"
query="/client:GetCustomerAccountInformationProcessResponse/client:customer/client:accounts/client:account[$Var_Counter]/client:dueDate"/>
</copy>
I have been using this in my processes. -
Using MapViewer from PL/SQL vs Java
Hi group!
The MapViewer User's Guide has this to say about using MapViewer from PL/SQL:
"The usage model for the SDO_MVCLIENT package is almost identical to that of
MapViewer JavaBean-based API" etc etc .. "For usage and reference information about specific functions or procedures, see the description of the associated JavaBean-Based API. methods and interfaces in Chapter 4"
If I don't misunderstand the basic concept, in a Java Web App (using the MapViewer Bean) you create a MapViewer object for each HTTP-user-session, like so:
MapViewer mv = new MapViewer("http://my_corp.com:8888/mapviewer/omserver");
... which you would then store in the user's session object, so that the MapViewer Bean conveniently holds the map's state on the user's behalf.
To do the equivalent in PL/SQL, the User's Guide suggests:
"connect scott/tiger
call sdo_mvclient.createmapviewerclient(
'http://www.mycorp.com:8888/mapviewer/omserver') ;
The preceding example creates, in the current session, a unique MapViewer client
handle to the MapViewer service URL"
Does "current session" refer to the HTTP-user-session? While I've used PL/SQL before, I've not used the PL/SQL Web Toolkit. Is the session handling implicit here (and invisible?) or should the sdo_mvclient be subsequently stored in the PL/SQL equivalent of a (J2EE) HttpSession object?
YTPart of the answer will depend on how you plan to deploy the application. If you have a few, local clients you could go with the traditional client/server model. If you have a lot of clients and/or they are spread out over a relatively large area (like a campus setting), a web front-end will save you a lot of hassels down the road when it comes time to upgrade.
Regardless of the the front end, I can tell you that I have been greatly impressed with the throughput you can get by moving most of the code to PL/SQL packages. A few years ago we reworked a VB/Oracle app by moving a lot of the code out of VB and into packages, leaving the client to essentially call procedures and format the output. We had more than a 3x performance increase on the same hardware and our network utilization decreased noticably.
I am now in the process of replacing the client code with Java servlets/JSP, primarily because of the maintenance hassles I mentioned earlier. There are some limitations with an HTML page but most of these have been cosmetic so far.
We are still relying heavily on PL/SQL packages. The servlet code basically gets a request, calls a package to get the data, then hands the results to a JSP page. The JSP then formats the output and sends it to the client. We are little more than halfway through the re-write, but it appears performance will increase again. Not as noticably as before, but I will take what I can get. As you have seen, once something is rolled out it always ends up getting used more than you anticipated. Better to over-engineer now than have to patch it once it is live.
HTH -
Can we use different Databases (Oracle & SQL Server) in one report?
Post Author: venki5star
CA Forum: .NET
Hi there.
Can we use different databases (Oracle & SQL Server) in a same report?
If possible how?
Another question,
Can we change the Provider Name at runtime of the given report. If so the above question is useless...
Thanks in Advance.I tried this using Oracle Provider for OLEDB (the one that supplied by Oracle Client) and Crystal Reports 9. you can drag the column into designer but the image does not appear in preview.
I guess it's because CR does not recognized it as image, and there are no information that the blob data is an image at all. -
How to get multiple records using fn-bea:execute-sql()
Hi,
I created Proxy service(ALSB3.0) to get records from DB table. I have used Xquery function(fn-bea:execute-sql()). Using simple SQL query I got single record, but my table having multiple records. Please suggest how to get multiple records using fn-bea:execute-sql() and how to assign them in ALSB variable.
Regards,
Nagaraju
Edited by: user10373980 on Sep 29, 2008 6:11 AMHi,
Am facing the same issue stated above that I couldnt get all the records in the table that am querying in the Proxyservice.
For example:
fn-bea:execute-sql('EsbDataSource', 'student', 'select Name from StudentList' ) is the query that am using to fetch the records from the table called StudentList which contains more than one records like
Id Name
01 XXX
02 YYY
03 ZZZ
I tried to assign the result of the above query in a variable and while trying to log the variable, I can see the below
<student>
<Name>XXX</Name>
</student>
I want to have all the records from my table in xml format but it's not coming up. I get the value only from the first row of my table.
Please suggest.
regards,
Venkat -
I guess I'll show you what I am trying to do rather and then explain it
public class arraycalc
int[] dog;
public void arraycalc()
dog = new int[2];
public void setSize(int size)
dog[1] = size;
public int getSize()
return dog[1];
This gives me a null pointer exception...
How can I use my array from other methods?You have to make the array static. :)
Although I must admit, this is rather bad usage. What you want to do is use an object constructor to make this class an object type, and then create the array in your main class using this type, and then call the methods from this class to modify your array. Creating the array inside the other method leads to a whole bunch of other stuff that's ... well, bad. :)
Another thing: Because you're creating your array inside this class and you want to call your array from another class, you need to make the array static; to make it static, you must make your methods static. And according to my most ingenious computer science teacher, STATIC METHODS SUCK. :D
So, if you want to stick with your layout, it would look like:
public class arraycalc
static int[] dog;
public static void arraycalc()
dog = new int[2];
public static void setSize(int size)
dog[1] = size;
public static int getSize()
return dog[1];
}But I must warn you, that is absolutely horrible code, and you shouldn't use it. In fact, I don't even know why I posted it.
You should definitely read up on OOP, as this problem would be better solved by creating a new object type. -
How to change the frequency of pulse train on the fly using an array of values?
Hi all!
First I want to thank U for the great job you are doing for this forum.
Iam still busy trying to control a stepper motor, by sending pulses from my E-series 6024 to a compumotor s6- stepper Driver. I've managed to get it working. I desperately need to control the motor using the values from an array. I believe we can use two approaches for that:
1st - I can get an array of the "numbers of pulses". Each element must run for 10 milliseconds. Using that we can calculate the array of frequencies to send the number of pulses within 10 milliseconds for each specific element. Could we use the arrays of "number of pulses" and frequencies in a "finite pulse train " and up
date with each element every 10 millisecond?
2nd - Or Could we use of the frequency array in a "continuous pulse train vi" and update it every 10 milliseconds?
Please note that I must use the values as they are.
Can someone please built a good example for me? Your help will be appreciated.
Regards
Chris
Attachments:
number_of_steps.txt 17 KB
frequency.txt 15 KBTiano,
I will try to better explain the paragraph on LabVIEW. The original paragraph reads ...
"While in a loop for continuous pulse train generation, make two calls to Counter Set Attribute.vi to set the values for "pulse spec 1" (constant 14) and "pulse spec 2" (constant 15). Following these calls you would make a call to Counter Control.vi with the control code set to "switch cycle" (constant 7). The attached LabVIEW programs demonstrate this flow."
You can make two calls to Counter Set Attribute or you can make a call to Set Pulse Specs which, if you open this VI, you will see that it is just making two calls to Counter Set Attribute. What you are doing with the Counter Set Attribute VIs is setting two registers called "pulse s
pec 1" and "pulse spec 2". These two registers are used to configure the frequency and duty cycle of your output frequency.
The example program which is attached to this Knowledge Base demonstrates how to change the frequency of a continuous generation on the fly. Why continuous? Because changing the frequency of a finite train would be easy. When the train completes it's finite generation you would just change the frequency and run a finite train again. You would not care about the time delay due to reconfiguration of the counter.
If you would like to change the frequency of the pulse train using a knob, this functionality will have to be added in the while loop. The while loop will be continuously checking for the new value of the knob and using the knob value to set the pulse specs.
LabVIEW is a language, and as with learning all new languages (spoken or programatic) there is a lot of learning to be accomplished. The great thing is that LabVIEW is much easier than mo
st languages and the learning curve should be much smaller. Don't fret, you'll be an expert before you know it. Especially since you're tackling a challenging first project.
Regards,
Justin Britten -
Using a custom PL/SQL to populate the primary key in a tabular form
I want to use a Custom PL/SQL Function to populate the primary key when I insert a new record into a tabular form. I want to get the value from a hidden page Item. The code I am using for the primary key source is:
BEGIN
INSERT INTO TEAM_MEMBERS(TEAM_ID)
VALUES(:P75_TEAM_ID);
END;
When I try to insert a new record I get the following error:
Error ERR-1904 Unable to compute item default: type = Function Body computation_type= BEGIN INSERT INTO TEAM_MEMBERS(TEAM_ID) VALUES(:P75_TEAM_ID); END; .
ORA-06550: line 5, column 2: PLS-00103: Encountered the symbol ";" when expecting one of the following: begin case declare end exception exit for goto if loop mod null pragma raise return select update while with << close current delete fetch lock insert open rollback savepoint set sql execute commit forall merge pipe The symbol "exit" was substit
Any ideas what I am doing wrong?
Thanks!Brian - Sometimes whitespace at the end of the block causes this. Be sure to trim everything after the last semicolon including tabs and newlines.
Scott
Maybe you are looking for
-
Import data from excel + tables created..
hi, i use excel in some situations for data entry or to filter my tables.... my question, i notice that whenever i use excel data for a report or for a filter in other report , there are automatically generated some tables , such as TT0D6KAHL10DQ5E92
-
USB Storage devices not working with kernel in repositories [Solved]
I am experiencing a quite vexing problem with my USB Mass Storage devices, when I plug one in I get the following error in my dmesg: [ 1811.976758] usb 2-2: new high speed USB device number 5 using ehci_hcd [ 1812.101854] scsi7 : usb-storage 2-2:1.0
-
Placing Images on Content Areas in Text
Hello; I'd like to customize the position of an image on my content area. Adding text- and image-items is no problem, but I can't customize the position of the image so that it is diplayed e.g. on the right-hand side of the text. Adding a text-item a
-
OKB9 for secondary cost element
Hello all, Does anyone know a way to rederive cost center for secondary cost element posting? We have a need to re-derive the cost center of a production order at the time of settlement. I tried OKB9 and OKC9 and it didn't work. Any help will be grea
-
Key code is not valid or expired.
Hi All Problem: Upgrade from Crystal Reports XI Release 1 to Crystal Reports XI Release 2? Cannot use Release 1 Product Code when installing Release 2 Redistributable File on client workstations. .net 2005 Error msg: key code is not valid or expired.