More sql statements at once
Hello,
Can I send more commands (statements) at one calling separating them with semicolon?
For example:
.exec("INSERT INTO myTable (col1) VALUES (val1); INSERT INTO myTable (col1) VALUES (val2)"
I tried it through odbc and oci driver, but was unsuccessful.
In case using MS SQL this works fine.
Is there any chance to be able to do this in case Oracle?
Thanks in advance.
kind regards,
d.a.
>
Can I send more commands (statements) at one calling separating them with semicolon?
.exec("INSERT INTO myTable (col1) VALUES (val1); INSERT INTO myTable (col1) VALUES (val2)"Yes (see below), but you shouldn't for the above statements. You should use just one statement with bind variables, and execute it twice (or more). To make it even faster, you can even specify the bind variables via arrays to OCI to have only one round-trip to the DB.
Is there any chance to be able to do this in case Oracle?The Oracle way to do this is via an PL/SQL anonymous block:
.exec("BEGIN stmt1; stmt2; END;")
But again in this particular case, bind variable is the way. Read Tom Kyte on the subject, nobody explains it better than him. --DD
Similar Messages
-
BEx queries - one or more SQL statements generated?
Iu2019m a BusinessObjects man and BEx is new to meu2026When you execute a BEx query against a cube u2013 how does BEx manage that query and what gets send to the backend DB (e.g. Oracle)?
I understand the cube is one table in Oracle?, but other tables (dimensions?) will also be needed to return all the data for a given report/query.
Does BEx pass that as one query to Oracle, or is it performed as separate queries, with BEx pulling the result sets together?Hi Durgesh, Susan
Thank you to both of you for your response to Ed on this thread. The background to these questions on how SQL statements are generated from BEx queries that we are working with Ed in a project to test the capability of accelerating the performance of BEx queries via the following process described below. (Please excuse any terminology errors as like I do not have a background in SAP):
1. Export fact table InfoObjects relevant to queries for InfoCubes to be accelerated by defining as Open Hub destinations, creating mappings and a data transfer process. Trigger export from SAP BI via a Process Chain and then load data to external database via ETL tool. Master data (dimension tables) remain in SAP BI
This step was completed successfully, including exporting of data.
2. Create a Universal Data Connect (UDC) source system to map to the exported fact tables.
3. Create a virtual provider mapping to the UDC source defined in step 2 to enable access to external table via JDBC.
4. Execute BEx report, selecting the query properties 'Cache inactive' and 'Reading all data at once', specifying restrictions (variables) in the report which would result in a small subset of data being returned from the fact table if applied in the SQL passed to the external database.
We hoped that SAP BI would push down predicates which could be applied to the fact table into the SQL sent to the external database via the virtual provider, but instead an SQL query selecting all columns with no WHERE clause was generated with the result that a 36 million row results set was sent across a network to join with dimension data, rather than a few rows.
Is this how SAP BI works in version 7.0 or are there configuration options which can change this behaviour? Is so, if all tables (including master data (dimensions) were exported to external database would SAP BI then transmit the database queries as joins to the external database?
Sorry this was a bit long, and thank you in advance for any advice you can give.
Stuart. -
Pass ORG_ID as sql statement for parameter in request set
We are in a multi-org environment. We are running the request PRC: Generate Draft Revenue for a Single Project as part of the request set. We want the request to automatically fill in the open pa period as the accrue through date. We have been using the SQL Statement below as the value for the accrue through date parameter.
select end_date
from pa_periods_all
where status = 'O'
and current_pa_period_flag = 'Y'
Unfortunately that does not limit to a specific company. We a company that still have DEC-05 while another has an open period of JAN-06. This is causing the program fits. How do I pass the org_id to the request? [in beginners terms please]
Thanks.
AnneNo idea what might be wroong without more info...
Do some output. Test the ${params.id} variable passed to the second jsp. If that is correct, then error is in the select statement or display of jsp2. If it is correct the error comes from jsp1.
If I have to guess, then I would say the error comes from JSP1, and the ${row.vac_id} should only be called once. In which case I would do something like this:
//in jsp 1
<c:forEach var="row" items="${results.rows}" varStatus="counter" >
<c:set var="vac_id" value="${row.vac_id}" scope="page"/>
<tr>
<td>${vac_id}</td>
<td><a href="vacancydetails.jsp?id=${vac_id}">More</a></td>But that is a guess only...
Errr... Hold on to that as reference, but the it is entirely likely that I misspelled ${params.id} It may be ${param.id} I forget and away from my machine right now... -
Odd results from SQL statement in JSP
Hi.
Getting very strange results from my SQL statement housed in my JSP.
the last part of it is like so:
"SELECT DISTINCT AID, ACTIVE, REQUESTOR_NAME, ..." +
"REQUESTOR_EMAIL" +
" FROM CHANGE_CONTROL_ADMIN a INNER JOIN CHANGE_CONTROL_USER b " +
"ON a.CHANGE_CTRL_ID = b.CHANGE_CTRL_ID " +
" WHERE UPPER(REQUESTOR_NAME) LIKE ? "; I've set the following variables and statements:
String reqName = request.getParameter("requestor_name");
PreparedStatement prepstmt = connection.prepareStatement(preparedQuery);
prepstmt.setString(1, "%" + reqName.trim().toUpperCase() + "%");
ResultSet rslts = prepstmt.executeQuery();
rslts.next();
int aidn = rslts.getInt(1);
int actbox = rslts.getInt(2); String reqname = rslts.getString(3).toUpperCase();
String reqemails = rslts.getString(4);
String bizct = rslts.getString(5);
String dept = rslts.getString(6);
String loc = rslts.getString(7);
Date datereq = rslts.getDate(8);
String busvp = rslts.getString(9);
AND SO ONSo then I loop it, or try to with the following:
<%
try {
while ((rslts).next()) { %>
<tr class="style17">
<td><%=reqname%></td><td><%=reqemails %></td><td><%=bizct %></td>td><%=dept %></td>
<td><%=aidn %></td>
</tr>
<%
rslts.close();
selstmt.close();
catch(Exception ex){
ex.printStackTrace();
log("Exception", ex);
%>AND so on, setting 13 getXXX methods of the 16 cols in the SQL statement.
Trouble is I'm getting wildly inconsistent results.
For example, typing 'H' (w/o quotes) will spit out 20 duplicate records of a guy named Herman, with the rest of his corresponding info correct, just repeated for some reason.
Typing in 'He' will bring back the record twice (2 rows of the complete result set being queried).
However, typing in 'Her' returns nothing. I could type in 'ell' (last 3 letters of his name, Winchell) and it will again return two duplicate records, but typing in 'hell' would return nothing.
Am I omitting something crucial from the while statement that's needed to accurately print out the results set without duplicating it and that will ensure returning it?
There's also records in the DB that I know are there but aren't being returned. Different names (i.e. Jennifer, Jesse, Jeremy) won't be returned by typing in partial name strings like Je.
Any insight would be largely appreciated.
One sidenote: I can go to SQL Plus and accurately return a results set through the above query. Having said that, is it possible the JDBC driver has some kind of issue?
Message was edited by:
bpropes20
Message was edited by:
bpropes20Am I omitting something crucial from the while
statement that's needed to accurately print out the
results set without duplicating it and that will
ensure returning it?Yes.
In this code, nothing ever changes the value of reqname or any of the other variables.
while ((rslts).next()) { %>
<tr class="style17">
<td><%=reqname%></td><td><%=reqemails %></td><td><%=bizct %></td>td><%=dept %></td>
<td><%=aidn %></td>
</tr>
<%
} You code needs to be like this:while (rslts.next()) {
reqname = rslts.getString(3).toUpperCase();
reqemails = rslts.getString(4);
bizct = rslts.getString(5);
dept = rslts.getString(6);
loc = rslts.getString(7);
datereq = rslts.getDate(8);
busvp = rslts.getString(9);
%>
<tr class="style17">
<td><%=reqname%></td><td><%=reqemails %></td><td><%=bizct %></td>td><%=dept %></td>
<td><%=aidn %></td>
</tr>
<%
There's also records in the DB that I know are there
but aren't being returned. Different names (i.e.
Jennifer, Jesse, Jeremy) won't be returned by typing
in partial name strings like Je.Well, you're half-right, your loop won't display all the rows in the result set, because you call rslts.next(); once immediately after executing the query. That advance the result set to the first row; when the loop is entered, it starts displaying at the 2nd row (or later if there are more next() calls in the code you omitted). -
SQL Statement -- Throws GROUP BY issue on NVL
Hey All,
This is pretty much my first time tackling a very complex SQL Statement but the boss is adamant about it.
Anyways here is the information. I have 3 Tables. Table one Contains Work Order Infromation that will be listed or grouped. Table 2 and Table 3 house information that needs to be summed (Estimate hours and Actual Hours).
So my SQL Statement looked something like this... (Its a mess)
select workorder.wolo3, workorder.wojp1, workorder.wonum, workorder.description, workorder.location, workorder.status, workorder.wopriority, workorder.targstartdate, workorder.reportdate, workorder.pmnum, workorder.schedstart, sum(labtrans.regularhrs + labtrans.premiumpayhours) as actualhours, sum(wplabor.quantity * wplabor.laborhrs) as estimatehrs
from maximo.workorder left outer join maximo.labtrans on labtrans.regularhrs > 0 and labtrans.refwo = workorder.wonum and labtrans.siteid = workorder.siteid or labtrans.premiumpayratetype = 'MULTIPLIER' and labtrans.refwo = workorder.wonum and labtrans.siteid = workorder.siteid left outer join maximo.wplabor on wplabor.wonum = workorder.wonum and wplabor.siteid = workorder.siteid
where workorder.istask=0 and workorder.siteid='NTS' and workorder.status in ('INPRG','SCHED') and workorder.crewid in ('MAINT','DAF') and workorder.schedstart <= TO_DATE('12-13-2009','MM-DD-YYYY') and wolo3 is not null group by workorder.wonum, workorder.status, workorder.wopriority, workorder.pmnum, workorder.location, workorder.description, workorder.targstartdate, workorder.reportdate, workorder.schedstart, workorder.wolo3, workorder.wojp1
Now the problem is that the 2nd sum (Estimate Hrs) gets HUGE numbers if there are multiple rows in Actual Hours. So I did some searching. Seems that if I used the NVL function in the SQL Statement it would fix the issue...
select workorder.wolo3, workorder.wojp1, workorder.wonum, workorder.description, workorder.location, workorder.status, workorder.wopriority, workorder.targstartdate, workorder.reportdate, workorder.pmnum, workorder.schedstart, sum(labtrans.regularhrs + labtrans.premiumpayhours) as actualhours,
nvl((select sum(wplabor.quantity * wplabor.laborhrs) from maximo.wplabor where wplabor.wonum = workorder.wonum and wplabor.siteid = workorder.siteid),0)
from maximo.workorder left outer join maximo.labtrans on labtrans.regularhrs > 0 and labtrans.refwo = workorder.wonum and
labtrans.siteid = workorder.siteid or labtrans.premiumpayratetype = 'MULTIPLIER' and labtrans.refwo = workorder.wonum and
labtrans.siteid = workorder.siteid
where workorder.istask=0 and workorder.siteid='NTS' and workorder.status in ('INPRG','SCHED') and
workorder.crewid in ('MAINT','DAF') and workorder.schedstart <= TO_DATE('12-13-2009','MM-DD-YYYY') and wolo3 is not null
group by workorder.wonum, workorder.status, workorder.wopriority, workorder.pmnum, workorder.location, workorder.description, workorder.targstartdate, workorder.reportdate, workorder.schedstart, workorder.wolo3, workorder.wojp1
However If get the error not a GROUP BY expression.
I really need this to work. How can I get the NVL to work with out having to define a Group for it. The problem is that it is a "alias column" and you cannot Group by those fields. Frustation sets in... UGH!
Thanks in Advance, Ben.Hi, Ben,
Wlecome to the forum!
user12273726 wrote:
So my SQL Statement looked something like this... (Its a mess)You're right. Fix that first.
Put each SELECT item, each condition, and each GROUP BY expression on a separate line. Indent to show here the clauses (SELECT, FROM, WHERE) are.
For example:
SELECT workorder.wolo3
, workorder.wojp1
, workorder.wonum
, workorder.description
, workorder.location
, workorder.status
, workorder.wopriority
, workorder.targstartdate
, workorder.reportdate
, workorder.pmnum
, workorder.schedstart
, SUM (labtrans.regularhrs + labtrans.premiumpayhours) AS actualhours
, SUM (wplabor.quantity * wplabor.laborhrs) AS estimatehrs
FROM maximo.workorder
LEFT OUTER JOIN maximo.labtrans ON labtrans.regularhrs > 0
AND labtrans.refwo = workorder.wonum
AND labtrans.siteid = workorder.siteid
OR labtrans.premiumpayratetype = 'MULTIPLIER' -- WARNING! Don't mix AND and OR
AND labtrans.refwo = workorder.wonum
AND labtrans.siteid = workorder.siteid
LEFT OUTER JOIN maximo.wplabor ON wplabor.wonum = workorder.wonum
AND wplabor.siteid = workorder.siteid
WHERE workorder.istask = 0
AND workorder.siteid = 'NTS'
AND workorder.status IN ('INPRG','SCHED')
AND workorder.crewid IN ('MAINT','DAF')
AND workorder.schedstart <= TO_DATE ('12-13-2009','MM-DD-YYYY')
AND wolo3 IS NOT NULL
GROUP BY workorder.wonum
, workorder.status
, workorder.wopriority
, workorder.pmnum
, workorder.location
, workorder.description
, workorder.targstartdate
, workorder.reportdate
, workorder.schedstart
, workorder.wolo3
, workorder.wojp1
;When you post formatted text on this site, type these 6 characters:
{code}
(small letters only, inside curly brackets) before and after sections of formatted text, to preserve spacing.
Now the problem is that the 2nd sum (Estimate Hrs) gets HUGE numbers if there are multiple rows in Actual Hours. Huge numbers are not necessarily wrong. Do yo mean the numbers computed by your query are much bigger than they are supposed to be?
So I did some searching. Seems that if I used the NVL function in the SQL Statement it would fix the issue...
select workorder.wolo3, workorder.wojp1, workorder.wonum, workorder.description, workorder.location, workorder.status, workorder.wopriority, workorder.targstartdate, workorder.reportdate, workorder.pmnum, workorder.schedstart, sum(labtrans.regularhrs + labtrans.premiumpayhours) as actualhours,
nvl((select sum(wplabor.quantity * wplabor.laborhrs) from maximo.wplabor where wplabor.wonum = workorder.wonum and wplabor.siteid = workorder.siteid),0)
...It looks like you have a Chasm Trap, where you have multiple, independent one-to-many relationships on the same table, and the solution to aggregate them in separate queruies.
It looks like you're trying to aggregate wplabor in scalar sub-queries, which makes the GROUP BY more complicated (as you discovered), and is also very inefficient.
It would be easier to code and more efficient to run if you aggregated wplabor in a sub-query, and then joined to this sub-query (and not the actual wplabor table) in your main query.
If you'd like help, post a little sample data (CREATE TABLE and INSERT statements) for all three tables, and the results you want from that data.
Simplify as much as possible. Instead of GROUPing BY 11 columns, just GROUP BY, say, 3 columns: the 2 involved in the join condidiotns, and one more. Once you understand how to do this, adding the other expressions will be trivial.
You can also simplify by ignoring, for now, the WHERE clause, and, therefore, the columns involved in the WHERE clause. It looks like that has nothing to do with the problem. Again, adding the conditions later will be trivial. -
public synchronized Product GetProductItem (int productid) throws CategoryException
Statement stmt = null;
stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select c.CategoryName, p.ProductName from category_product cp inner join category c on cp.CategoryID = c.CategoryID inner join product p on cp.ProductID = ?");
Product p = new Product();
p.setCategoryName(rs.getString("CategoryName"));
p.setProductName(rs.getString("ProductName"));
}How can I make the SQL statement to get the int parameter productid? As I want to show the particular product with it's own id.
And, how can I display the product detail for that product? How can I show it as an object?I don't think your code will work. Don't you have to call next() on the ResultSet to advance the cursor to the first row? What if your query returns more than one row?
In either case, I think your code should look more like this:
ResultSet rs = ...;
List products = new ArrayList(); // Or something else
while (rs.next())
Product p = new Product();
// Set the values from the ResultSet
products.add(p);
rs.close();
statement.close();Once you've got those, you can either pass Product to a JSP and have it display the values or you can write the HTML response to the browser from the servlet. I'd go with JSP myself. - MOD -
Using bind variables with sql statements
We connect from a VB 6.0 program via OO4O to an Oracle 8.1.7 database, using bind variables in connection with select statements. Running ok, but performance again by using bind vars not as good as expected!
When looking into the table v$sqlarea, we were able to detect the reason. We expected that our program submits the sql statement with bind vars, Oracle parses this once, and with each select statement again, we do not have a reparse. But: It seems that with each new session Oracle reparses the sql statement, that is, Oracle is not able to memorize or cache bind vars and statements. Even more worrying, this kind of behaviour was visible with each new dynaset, but the same database/session.
Is there anybody our there with an idea of what is happening here?
Code snippet:
Dim OraSession As OracleInProcServer.OraSessionClass
Dim OraDatabase As OracleInProcServer.OraDatabase
Set OraSession = CreateObject("OracleInProcServer.XOraSession")
Set OraDatabase = OraSession.OpenDatabase(my database", "my connect", 0&)
OraDatabase.Parameters.Add "my_bind", 0, ORAPARM_INPUT
OraDatabase.Parameters("my_bind").DynasetOption = ORADYN_NOCACHE
OraDatabase.Parameters("my_bind").serverType = ORATYPE_NUMBER ' Bind Var Type
Dim RS As OracleInProcServer.OraDynaset
strSQLstatement= "Select * from my_table where igz= [my_bind] "
Set RS = OraDatabase.CreateDynaset(strSQLstatement, &H4)
OraDatabase.Parameters("my_bind").Value = myValue
RS.Refresh
Cheers and thanks a lot :)
Michael SonntagWe connect from a VB 6.0 program via OO4O to an Oracle 8.1.7 database, using bind variables in connection with select statements. Running ok, but performance again by using bind vars not as good as expected!
When looking into the table v$sqlarea, we were able to detect the reason. We expected that our program submits the sql statement with bind vars, Oracle parses this once, and with each select statement again, we do not have a reparse. But: It seems that with each new session Oracle reparses the sql statement, that is, Oracle is not able to memorize or cache bind vars and statements. Even more worrying, this kind of behaviour was visible with each new dynaset, but the same database/session.
Is there anybody our there with an idea of what is happening here?
Code snippet:
Dim OraSession As OracleInProcServer.OraSessionClass
Dim OraDatabase As OracleInProcServer.OraDatabase
Set OraSession = CreateObject("OracleInProcServer.XOraSession")
Set OraDatabase = OraSession.OpenDatabase(my database", "my connect", 0&)
OraDatabase.Parameters.Add "my_bind", 0, ORAPARM_INPUT
OraDatabase.Parameters("my_bind").DynasetOption = ORADYN_NOCACHE
OraDatabase.Parameters("my_bind").serverType = ORATYPE_NUMBER ' Bind Var Type
Dim RS As OracleInProcServer.OraDynaset
strSQLstatement= "Select * from my_table where igz= [my_bind] "
Set RS = OraDatabase.CreateDynaset(strSQLstatement, &H4)
OraDatabase.Parameters("my_bind").Value = myValue
RS.Refresh
Cheers and thanks a lot :)
Michael Sonntag -
FLEXFIELD DEFAULT SQL STATEMENT
Hello all.
I created a flexfield on the PO Lines with a default type of sql statement. The statement
uses the po_lines item id, however when accessing the PO Summary form the default statement
seems to be firing prior the po line block is accessed and causing the sql statement to raise
some exception. Is there a way around this?
thanks and more power.iccsi wrote:
My question is the 300 queries can be simplified as a simple SQL like
Select MyName, count(MyID) from myTable
where myName = 'Name1'
group by MyName
Select MyName, count(MyID) from myTable
where myName = 'Name2'
group by MyName
Select MyName, count(MyID) from myTable
where myName = 'Name3'
group by MyName
can be some one use like following
Select MyName, count(MyID) from myTable
group by MyName
or save as a stored procedure which the web server or web page only hit database server once instead of 300 times.
I would like to know does ColdFusion is smart enough to know the SQL are similar and only run SQL once against dabase server.
In my opinion, query-of-a-query is a smart enough solution to the problem. In the following example, ColdFusion visits the database just once!
<cfquery name="mainQuery" datasource="myDSN">
select MyName, count(MyID) from myTable
group by MyName
</cfquery>
<cfquery dbType="query" name="subQuery1">
select *
from myQuery
where myName = 'Name1'
</cfquery>
<cfquery dbType="query" name="subQuery2">
select *
from myQuery
where myName = 'Name2'
</cfquery>
<cfquery dbType="query" name="subQuery300">
select *
from myQuery
where myName = 'Name300'
</cfquery> -
How to see all sql statements on sql commands under history link
Hi All,
How to see the all the sql history on sql commands tab.
I want see all sql statements.
Where to set if we need to store more sql statments in history.
We are using Apex3.2 and 10g database(EE).
Thanks,
NrI just checked the source code of the SQL commands history region and that report fetches a maximum of 1000 records. I don't know if you change the setting somewhere in the builder, but seeing the code it looks as though 1000 is hard-coded in the report definition(apex 4.0).
If you need to see all the command history,you can query the original table: APEX_040000.WWV_FLOW_SW_SQL_CMDS
Note that is an internal table used by apex and hence you might not find any documentation about it(google got me one valid hit: Identifying Inactive Workspaces which seem to confirm the table's use).
Anyway, here's what you need to do, ask your dba to grant your workspace user select access on this table
Connect as dba user and run
GRANT SELECT ON APEX_040000.wwv_flow_sw_sql_cmds to '<WORKSPACE SCHEMA>'Now you can run the following command from your workspace to see the entire command history using
select * from APEX_040000.WWV_FLOW_SW_SQL_CMDS where parsed_schema = '<WORKSPACE SCHEMA>';You might want to revoke the grant once you have seen the data/taken out an export due to security issues. -
How could I find the SQL statement who get this message ?
ORA-01555 caused by SQL statement below (Query Duration=11191 sec, SCN: 0x0854.723b9c32)
... How could I find the SQL statement who got this message ?
Thanks, PaulORA-01555 means that the UNDO/ROLLBACK space is not large enough.
This occurs because the SELECT statement is attempting to read the UNDO, but the UNDO has been released (transactions have committed or rolled back) and reused.
The following are SOME of the reasons I have seen this to occur:
1) Updates in a loop, with commits happening in the same loop
- this will mark the UNDO available quickly and quickly reuse it. Then when the SELECT wants to rebuild a block, the UNDO used to rebuild the block has been reused (solution, make the UNDO bigger)
2) A SELECT cursor used to control a loop in which updates are performed, and a 'done' flag is marked against the current cursor record, and commits are performed at the end of each loop, prior to fetching the next record
- same problem as above, but it hits the current process. Same solution
3) A 'month end' activity spike occurs, and all sorts of transactions create updates. There is a report that reports the activity - amusingly it needs to start at the beginning of all the work and updates periodically by doing a huge SELECT up front. This is then used to drive a loop which attempts to get information from the various transactions that have been updated and committed. After a while, the SELECT gets an ORA-01555
- same problem as above and same solution. Get a bigger UNDO segment.
You say this only happens once a month. That should give a hint.
I wouldn't bother with which SELECT statement, as much as which APPLICATIONs are being run when it happens.
One way around this - use 10g and set the guaranteed retention period. All sorts of other things will break, by no more 1555. <g> -
Invoking 2 SQL statements one after another?
Hi,
Is it a good idea to invoke to 2 SQL statements one after another using the same connection & statement object? Some thing like this:-
method(){
String insertSql="insert into employee(Name,Age)values(?,?);
Connection conn=null;
PreparedStatement pst=null;
int insertRows=0;
ResultSet rs=null;
try{
conn=getConnection(); //will get the connection object
if(insertRows==0){
pst=conn.preparedStatement(insertSql);
pst.setString(1,"Jason");
pst.setString(2,"30");
insertRows=pst.executeUpdate();
conn.commit();
if(insertRows>0) {
pst=conn.createStatement("select * from employee");
//retrieving the data from the same table
rs=pst.executeQuery();
while(rs.next()){
System.out.println("The name is::"+rs.getString(1)+ " "+rs.getString(2));
}catch(Exception e){
}finally{
try{
if(pst != null) {
pst.close();
pst = null;
if(rs != null) {
rs.close();
rs = null;
if(conn != null) {
conn.close();
conn = null;
}catch(Exception e) {
e.printStackTrace();
Here one more thing is that i want the insertSQL statement to be invoked only once that is in the beginning and the next time the method() is called it should skip the insert block and should only retrieve the data using "select * from employee". How to do it? I tried with few options nothing works.. Please do provide a solution for this... It is really urgent.
ThanksIs it a good idea to invoke to 2 SQL statements one after another using the same connection & statement object? I think what you're asking is if you need a new Connection and/or Statement object for every query. The answer is no. In fact, most applications pool Connections so literally thousands or millions of queries are done in the lifetime of a Connection. You can reuse Statements and PreparedStatements as well as long as you intend on executing the same query.
-
SQl statement cause extreme Portal log growth
Our Portal server log file is growing very fast (30 - 50 Mb per minute). When examining the log file we see that the log file does contain only the error messages:
#1.5#00096BF521750058005A9CA900001E480003E80BD8A2C263#1099562506968#/System/Database/sql/jdbc/common#sap.com/irj#com.sap.sql.jdbc.common.StatementAnalyzerImpl#Guest#18####655e44612e4811d9b41300096bf52175#Thread[ThreadPool-Dispatcher,5,SAPEngine_Application_Thread[impl:3]_Group]##0#0#Error#1#com.sap.sql.jdbc.common.StatementAnalyzerImpl#Java#com.sap.sql.jdbc.common_1123#com.sap.sql.log.OpenSQLResourceBundle#The SQL statement "" contains the semantics error[s]: #2#SELECT MIN("ID"),"PRIORITY" FROM "KMC_TQ_QUEUE" WHERE "NAMESPACE_HASH" = ? AND "NAMESPACE" = ? AND "TASK_STATE" = 1 GROUP BY "PRIORITY" ORDER BY 2 DESC#type check error: the expression >>"NAMESPACE"<< (LONGVARCHAR) is not comparable and must not be used with "="
This message occurs more than 500 times per log file. It has something to do with Knowledge management, but we cannot find anything that triggers this sql statement.
Any ideas?
Noel Hendrikx & Pascal RijnartSAP tells us in reaction to our customer message:
"The table's definition is correct. What has to be changed is the
computed type for field NAMESPACE and the generated file for the table.
As I wrote before, if you make any change in the field NAMESPACE the
new computation is started (so change the description which has no
effect on the table's version on the database). Make the change and
save the table in the SapNetWeaver Developer Studio. You will then
see that the field's JDBC-type changes to VARCHAR.
Choose 'Create archive' for Dictionary Project the table belongs to
and deploy the sda on the database. Both can be done in the studio."
Can anyone tell us what to do now?
Noel Hendrikx -
Hello All,
I am supporting a Java 5 project on Tomcat. We've used Spring and Stored Procedure in the project.
Recently we deployed our application in a GoLive environment and have started seeing Timeout errors in log files. After around two days we also have to restart Tomcat as users are no more able to login to access the application.
Same application runs fine without any timeout issues on another environment.
The only difference between two environments is that the Go-Live env has a firewall between Tomcat and Database and the other environment hosts both Tomcat and Database on same machine (i.e. no firewall).
For GoLive env the only port open on firewall for JDBC connection is 1521 and is used in the connection string url for obtaining the connections.
When there is a Timeout error, the N/w admin guy observed that the JDBC connection was not attempted on 1521 port, but on some random port which is not open on firewall, due to which the Database server logs also do not show entry for this connection attempt as it gets blocked by the firewall.
I am not sure why a randam port should be used to connect when a specific port is mentioned in the connection url? Also what can be making this port switching?
Application uses Apache DBCP with Spring to obtain connections.
Has anyone experienced similar errors?
Any suggestions/help on this issue is greatly appreciated!
Many Thanks,
CD
===============================
Error Log Extract:
Error while extracting database product name - falling back to empty error codes
org.springframework.jdbc.support.MetaDataAccessException: Error while extracting DatabaseMetaData; nested exception is java.sql.SQLException: Closed Connection
java.sql.SQLException: Closed Connection
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:208)
at oracle.jdbc.driver.PhysicalConnection.getMetaData(PhysicalConnection.java:1605)
at org.apache.commons.dbcp.DelegatingConnection.getMetaData(DelegatingConnection.java:247)
at org.apache.commons.dbcp.DelegatingConnection.getMetaData(DelegatingConnection.java:247)
at org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.getMetaData(PoolingDataSource.java:231)
at org.springframework.jdbc.support.JdbcUtils.extractDatabaseMetaData(JdbcUtils.java:172)
at org.springframework.jdbc.support.JdbcUtils.extractDatabaseMetaData(JdbcUtils.java:207)
at org.springframework.jdbc.support.SQLErrorCodesFactory.getErrorCodes(SQLErrorCodesFactory.java:187)
at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.setDataSource(SQLErrorCodeSQLExceptionTranslator.java:126)
at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.<init>(SQLErrorCodeSQLExceptionTranslator.java:92)
at org.springframework.jdbc.support.JdbcAccessor.getExceptionTranslator(JdbcAccessor.java:96)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:294)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:348)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:352)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:356)
at com.o2.morse.dao.impl.sql.UserDaoImpl.batchLoad(UserDaoImpl.java:371)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:287)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:181)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:148)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:170)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:176)
at $Proxy3.batchLoad(Unknown Source)
at com.o2.morse.domain.User.doHousekeeping(User.java:667)
at com.o2.morse.domain.User$$FastClassByCGLIB$$372ff70b.invoke(<generated>)
at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149)
at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:705)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:148)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:170)
at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:643)
at com.o2.morse.domain.User$$EnhancerByCGLIB$$d5ac966a.doHousekeeping(<generated>)
at com.o2.morse.scheduler.EndOfDay.run(EndOfDay.java:63)
at com.o2.morse.scheduler.EndOfDay$$FastClassByCGLIB$$3b2d4927.invoke(<generated>)
at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149)
at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:705)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:148)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:170)
at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:643)
at com.o2.morse.scheduler.EndOfDay$$EnhancerByCGLIB$$488a9f86.run(<generated>)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.springframework.util.MethodInvoker.invoke(MethodInvoker.java:248)
at org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean$MethodInvokingJob.executeInternal(MethodInvokingJobDetailFactoryBean.java:165)
at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:90)
at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:525)
Could not close JDBC Connection
java.sql.SQLException: Already closed.
at org.apache.commons.dbcp.PoolableConnection.close(PoolableConnection.java:77)
at org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.close(PoolingDataSource.java:180)
at org.springframework.jdbc.datasource.DataSourceUtils.doReleaseConnection(DataSourceUtils.java:286)
at org.springframework.jdbc.datasource.DataSourceUtils.releaseConnection(DataSourceUtils.java:247)
at org.springframework.jdbc.datasource.DataSourceTransactionManager.doCleanupAfterCompletion(DataSourceTransactionManager.java:297)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.cleanupAfterCompletion(AbstractPlatformTransactionManager.java:754)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.processRollback(AbstractPlatformTransactionManager.java:615)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.rollback(AbstractPlatformTransactionManager.java:560)
at org.springframework.transaction.interceptor.TransactionAspectSupport.doCloseTransactionAfterThrowing(TransactionAspectSupport.java:284)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:100)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:170)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:176)
at $Proxy3.batchLoad(Unknown Source)
at com.o2.morse.domain.User.doHousekeeping(User.java:667)
at com.o2.morse.domain.User$$FastClassByCGLIB$$372ff70b.invoke(<generated>)
at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149)
at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:705)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:148)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:170)
at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:643)
at com.o2.morse.domain.User$$EnhancerByCGLIB$$d5ac966a.doHousekeeping(<generated>)
at com.o2.morse.scheduler.EndOfDay.run(EndOfDay.java:63)
at com.o2.morse.scheduler.EndOfDay$$FastClassByCGLIB$$3b2d4927.invoke(<generated>)
at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149)
at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:705)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:148)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:170)
at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:643)
at com.o2.morse.scheduler.EndOfDay$$EnhancerByCGLIB$$488a9f86.run(<generated>)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.springframework.util.MethodInvoker.invoke(MethodInvoker.java:248)
at org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean$MethodInvokingJob.executeInternal(MethodInvokingJobDetailFactoryBean.java:165)
at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:90)
at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:525)
Application exception overridden by rollback exception
org.springframework.jdbc.UncategorizedSQLException: StatementCallback; uncategorized SQLException for SQL [SELECT ID_USER_DETAILS, USERNAME, CREATED_ON, LAST_LOGIN FROM USER_DETAILS WHERE STATUS = 157 AND SUPERUSER <> 'Y']; SQL state [null]; error code [17002] ; Io exception: Connection timed out; nested exception is java.sql.SQLException: Io exception: Connection timed out
java.sql.SQLException: Io exception: Connection timed out
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:255)
at oracle.jdbc.driver.T4CStatement.executeForDescribe(T4CStatement.java:820)
at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1049)
at oracle.jdbc.driver.T4CStatement.executeMaybeDescribe(T4CStatement.java:845)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1154)
at oracle.jdbc.driver.OracleStatement.executeQuery(OracleStatement.java:1313)
at org.apache.commons.dbcp.DelegatingStatement.executeQuery(DelegatingStatement.java:205)
at org.apache.commons.dbcp.DelegatingStatement.executeQuery(DelegatingStatement.java:205)
at org.springframework.jdbc.core.JdbcTemplate$1QueryStatementCallback.doInStatement(JdbcTemplate.java:333)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:282)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:348)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:352)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:356)
at com.o2.morse.dao.impl.sql.UserDaoImpl.batchLoad(UserDaoImpl.java:371)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:287)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:181)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:148)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:170)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:176)
at $Proxy3.batchLoad(Unknown Source)
at com.o2.morse.domain.User.doHousekeeping(User.java:667)
at com.o2.morse.domain.User$$FastClassByCGLIB$$372ff70b.invoke(<generated>)
at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149)
at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:705)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:148)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:170)
at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:643)
at com.o2.morse.domain.User$$EnhancerByCGLIB$$d5ac966a.doHousekeeping(<generated>)
at com.o2.morse.scheduler.EndOfDay.run(EndOfDay.java:63)
at com.o2.morse.scheduler.EndOfDay$$FastClassByCGLIB$$3b2d4927.invoke(<generated>)
at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149)
at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:705)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:148)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:170)
at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:643)
at com.o2.morse.scheduler.EndOfDay$$EnhancerByCGLIB$$488a9f86.run(<generated>)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.springframework.util.MethodInvoker.invoke(MethodInvoker.java:248)
at org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean$MethodInvokingJob.executeInternal(MethodInvokingJobDetailFactoryBean.java:165)
at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:90)
at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:525)
Batch Job Failed: org.springframework.transaction.TransactionSystemException: Could not roll back JDBC transaction; nested exception is java.sql.SQLException: Closed ConnectionI am using latest Jrockit 16)5, ojdbc6_g.jar,spring.jar Weblogic 10.3 and Oracle 10G 10.2.4 .. whatever but always get "Closed Connection"
java.lang.Throwable: Closed Connection
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:208)
at oracle.jdbc.driver.PhysicalConnection.createStatement(PhysicalConnection.java:750)
at oracle.jdbc.OracleConnectionWrapper.createStatement(OracleConnectionWrapper.java:183)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:7053)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)
at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3902)
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2773)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:224)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:183) -
Extracting SQL statement from a Webi document's data provider using SDK.
Hi all,
Is it possible to extract the SQL statement from an existing Webi document's data provider using BO SDK? I've searched through the class library but haven't found any information on this yet. If you have done it, could you provide some guidance. Many thanks.I found the following Java code that might be of some help to you. I realize you are using .NET but this might push you down the right path.
The trick here is to use the Report Engine SDK to get the DataProvider of the DocumentInstance. Then, look at the SQLDataProvider to get your SQLContainer.
My apologies for the poor formatting. This didn't copy and paste over to the forums very well. I've cleaned up as much as I could.
<%@ page import="com.crystaldecisions.sdk.framework.*" %>
<%@ page import="com.crystaldecisions.sdk.exception.SDKException" %>
<%@ page import="com.crystaldecisions.sdk.occa.infostore.*" %>
<%@ page import="com.businessobjects.rebean.wi.*" %>
<%
boolean loginSuccessful = false;
IEnterpriseSession oEnterpriseSession = null;
String username = "username";
String password = "password";
String cmsname = "cms_name";
String authenticationType = "secEnterprise";
try
//Log in. oEnterpriseSession = CrystalEnterprise.getSessionMgr().logon( username, password, cmsname, authenticationType);
if (oEnterpriseSession == null)
out.print("<FONT COLOR=RED><B>Unable to login.</B></FONT>");
else
{ loginSuccessful = true;
catch (SDKException sdkEx)
{ out.print("<FONT COLOR=RED><B>ERROR ENCOUNTERED</B><BR>" + sdkEx + "</FONT>");}
if (loginSuccessful) { IInfoObject oInfoObject = null;
String docname = "WebI document name";
//Grab the InfoStore from the httpsession IInfoStore oInfoStore = (IInfoStore) oEnterpriseSession.getService("", "InfoStore"); //Query for the report object in the CMS. See the Developer Reference guide for more information the query language. String query = "SELECT TOP 1 * " + "FROM CI_INFOOBJECTS " + "WHERE SI_INSTANCE = 0 And SI_Kind = 'Webi' " + "AND SI_NAME='" + docname + "'";
IInfoObjects oInfoObjects = (IInfoObjects) oInfoStore.query(query);
if (oInfoObjects.size() > 0)
//Retrieve the latest instance of the report oInfoObject = (IInfoObject) oInfoObjects.get(0);
// Initialize the Report Engine ReportEngines oReportEngines = (ReportEngines)
oEnterpriseSession.getService("ReportEngines");
ReportEngine oReportEngine = (ReportEngine) oReportEngines.getService(ReportEngines.ReportEngineType.WI_REPORT_ENGINE);
// Openning the document DocumentInstance oDocumentInstance = oReportEngine.openDocument(oInfoObject.getID());
DataProvider oDataProvider = null;
SQLDataProvider oSQLDataProvider = null;
SQLContainer oSQLContainer_root = null;
SQLNode oSQLNode = null;
SQLSelectStatement oSQLSelectStatement = null;
String sqlStatement = null;
out.print("<TABLE BORDER=1>");
for (int i=0; i<oDocumentInstance.getDataProviders().getCount(); i++)
oDataProvider = oDocumentInstance.getDataProviders().getItem(i);
out.print("<TR><TD COLSPAN=2 BGCOLOR=KHAKI>Data Provider Name: " + oDataProvider.getName() + "</TD></TR>");
if (oDataProvider instanceof SQLDataProvider)
oSQLDataProvider = (SQLDataProvider) oDataProvider;
oSQLContainer_root = oSQLDataProvider.getSQLContainer();
if (oSQLContainer_root != null)
for (int j=0; j<oSQLContainer_root.getChildCount(); j++)
oSQLNode = (SQLNode) oSQLContainer_root.getChildAt(j);
oSQLSelectStatement = (SQLSelectStatement) oSQLNode;
sqlStatement = oSQLSelectStatement.getSQL();
out.print("<TR><TD>" + (j+1) + "</TD><TD>" + sqlStatement + "</TD></TR>");
else
out.print("<TR><TD COLSPAN=2>Data Provider is not a SQLDataProvider. SQL Statement can not be retrieved.</TD></TR>"); } } out.print("</TABLE>");
oDocumentInstance.closeDocument(); }
oEnterpriseSession.logoff();}%> -
Good evening,
I am new to applescript and have a newbie question regarding the following code. I am making a simple automator program to pull songs from iTunes to practice dancing to. I've started the program with a script that lets the user choose which dances (s)he wants to be played. Then I use applescript to run if statements for each dance, checking whether the dance was selected (and is therefore in "danceList"). If so, I call a separate app to handle finding and playing that dance. The whole thing runs perfectly once opened in automator.
The problem is when I try to open the app for the first time, whether in finder or in automator -- it calls every single one of the if-statement applications, all at once, before anything else has happened, and thus crashes itself. I have no idea why. I have searched various help sites, tried multiple variations of the if statement code (waltz is an example, below) and making the sub-applications into workflows, but that didn't help.
Any advice or pointers in the right direction/to appropriate resources would be greatly appreciated.
Here is a snippet from the relevant code: (didn't include it all, it's the same thing with more if statements)
on run {danceList}
if danceList is not null then
if danceList contains "Waltz" then
tell application "waltz"
run
end tell
delay 110
else
tell application "waltz"
quit
end tell
end if
if danceList contains "Tango" then
tell application "tango"
run
end tell
delay 110
end if
if danceList contains "Viennese Waltz" then
tell application "viennese"
run
end tell
delay 110
end if
... and so forth ...
end if
return danceList
end runOk, let me try to do a better job explaining.
I am making this app to simulate the rounds used in competitive ballroom dancing. It lets the user select the dances they will participate in, and then, for each dance, the program reads out the dance title, chooses all songs in iTunes with that genre, selects one at random, starts playing it, waits ninety seconds, and then stops the music. Then a twenty second pause before the next dance. I have made eleven apps for this; one is the main app that calls the others; the others are identical and handle the individual dances.
Here is all the code I have:
1. Ask for confirmation - dialogue box explaining app
2. Get specified text - list of all dances, passed to first section of applescript
3. First section of script - found on internet, altered for multiple selection; lets user choose multiple dances from a list (code is below pic)
on run {input, parameters}
choose item(s) from text
input: text - items are delimited by paragraphs (returns/newlines)
output: a list of paragraphs selected
set output to {}
set NameList to {}
set NameList to paragraphs of (input as text)
activate me
set TheChoice to (choose from list NameList with title "Choose Dances" with empty selection allowed and multiple selections allowed)
if TheChoice is false then
error number -128 -- cancel
else
set output to TheChoice
end if
return the output -- pass the result to the next action
end run
4. Store value of variable as "danceList" - probably unnecessary but gave it a name
5. Second section of applescript - what's been discussed previously, here's the full code:
on run {danceList}
if danceList is not "" then
if danceList contains "Waltz" then
tell application "waltz"
run
end tell
delay 110
end if
if danceList contains "Tango" then
tell application "tango"
run
end tell
delay 110
end if
if danceList contains "Viennese Waltz" then
tell application "viennese"
run
end tell
delay 110
end if
if danceList contains "Foxtrot" then
tell application "foxtrot"
run
end tell
delay 110
end if
if danceList contains "Quickstep" then
tell application "quickstep"
run
end tell
delay 110
end if
if danceList contains "Samba" then
tell application "samba"
run
end tell
delay 110
end if
if danceList contains "Cha cha" then
tell application "chacha"
run
end tell
delay 110
end if
if danceList contains "Rumba" then
tell application "rumba"
run
end tell
delay 110
end if
if danceList contains "Paso Doble" then
tell application "paso"
run
end tell
delay 110
end if
if danceList contains "Jive" then
tell application "jive"
run
end tell
delay 110
end if
end if
return danceList
end run
Here is the code for the waltz app. All the other dance apps are identical; they just search for different terms and have a different introduction spoken.
1. Get specified text - "Next Round is the Waltz, etc."
2. Speak text - reads text out loud so people know what's next
3. Find iTunes tracks where genre is "Waltz" or "waltz"
4. select these tracks
5. store all these in variable "tracks"
6. applescript to pick a random track from "tracks":
on run {tracks}
set maxNumber to count of tracks
set randy to random number from 1 to maxNumber
set chosenTrack to item randy of tracks
return chosenTrack
end run
7. 3 second pause between speech and music
8. Start playing the chosen track
9. 90 second wait while track plays
10. pause itunes (stop music)
11. end app
Again, my concern here is why the program runs fine once it has already been opened in automator (say second or third time running it there) but when run from finder, or first opened in automator, it calls all the dance apps at once. Then they give error messages because the speech section is first, and this can't be done simultaneously:
Also, not sure if this is relevant, but I have a spinning gear in the corner of my mac that I believe is automator launcher, and it's showing all the apps as running even after I've ok'd their error messages and they have disappeared from the dock. I can exit waltz and danceApp, which are the two actually running, but the others won't stop until I've ended automator launcher in activity monitor.
Hopefully this is more helpful. Thanks again.
Maybe you are looking for
-
Can I return my Macbook Pro and get a refund?
I bought my Macbook Pro 2 weeks ago (July 16th). I bought it with the student discount, and they also gave me a 100 dollar gift card to the Apple Store. I would like to return my macbook and get a refund however, because I see that a new macbook pro
-
X10 restarting frequently after 2.3 update
I am unable to use the phone after I updated to Android 2.3. The phone is frequently restarting randomly. I followed the information from http://talk.sonyericsson.com/thread/19735. I have tried to perform a software repair using PC Companion but it
-
i bought a tablet off of ebay before it sends out im wanting the seller to provide me whatever it is thats needed for verizon to attach a number to it...do you know what the something is so i can be knowing what im talking about to the seller? thanks
-
My Movie Won't Start on Frame 1? Newbie
Hi! This is my first shot at creating a flash website. I have three layers and I've divided the timeline up into sections so I have one for Contacts, Press, News, Home, etc... However, the home section starts on frames 1-10 but whenever I test the mo
-
Cant install adobe after effects on 32bit windows
Cant install my adobe after effects on 32bit windows Can sumbody help Is there a 32bit compatible installer somewhere?!?!?!