Which is more efficient way to get result set from database server
Hi,
I am working on a project where I require to query database to fetch result set and then iterate through the resultset. Now, What I want is that I want to create one single java code that would call many different SQLs and create a list out of resultset. There are two approaches for me.
1.) To create a txt file where I can store my queries. My java program can read this file and get the appropriate query to be used.
2.) To create a stored procedure containing the queries and call the stored procedure from my java program. Also, not that some of the queries needs to be created dynamically depending upon the parameteters supplied.
Out of these two approches which is optimum and why?
Also, following things to be noted.
1. At times I want to create where clause of the query dynamically depenending upon the parameters passed.
2. I want one single java file that will handle all database calls.
3. Paramters to the stored procedure can be passed using array descriptor.
4. Conneciton I am making using JNDI.
Please do provide me optimum way of out these two. You may also suggest some other approaches, if any.
Thanks,
Rajan
Edited by: RP on Jun 26, 2012 11:11 PM
RP wrote:
In case of queries stored in text files. I will require to replace some pre defined placeholder with actual parameters and then pass that modified query to db engine. Even I liked the second approach as it is more easily maintainable. There are a couple of issues. Shared SQL is one. Irrespective of the method used, the SQL cursor that is created needs to have bind variables. This ensures re-usability of the cursor. This reduces the risk of Shared Pool fragmentation. This lowers hard parsing and reduces CPU utilisation.
Another issue is flexibility. If the SQL cursors are created by stored procedures, this code resides on the server and abstracts the Java client from the complexities of SQL and SQL performance. The code can easily be updated and fine tuned to deliver faster/better SQL cursors, or modified to take new Oracle features, changes in data model, and so on, into consideration. This stored proc can be updated without having to touch or recompile a single byte of Java client code.
There's also the security issue. What is more secure? SQL encapsulated in stored procs in a secure database and server environment? Or SQL "encapsulated" in text files on the client?
The less code you have running on the client, the less code you have running in the wild that can be compromised without having to first compromise the server.
Only I was worried about any performace issue might happen using this approach. Performance is not a factor of who creates the SQL cursor.
Whether Java client creates a SQL cursor, or a PL/SQL stored proc creates a SQL cursor, or a .Net client creates a SQL cursor - that SQL cursor does not know what the client is. It does not care what the client is. The SQL cursor performs as well as it is capable of.. given the execution plan, data volumes, server resources and speed/performance of the server.
The client language and SQL cursor interface used by the client (there are several in PL/SQL), determines the performance of the client's interaction with the cursor (e.g. round trips to the database when interfacing with the cursor). The client language (and its client interface to the cursor) does not dictate the actual performance of that SQL cursor on the database (does not make joins faster, or I/O faster)
One more question, Will my java program close the cursor that I opened in Procedure?That you need to ask your Java code. Java code leaking ref cursors are unfortunately all too common. You need to make sure that your Java client interface to SQL cursors, closes the cursor handle when done.
Similar Messages
-
Most efficient way to get a connection from a defined connection -pool [whole message]
Having recently load-tested the application we are developing I noticed that
one of the most expensive (time-wise) calls was my fetch of a db-connection
from the defined db-pool. At present I fetch my connections using :
private Connection getConnection() throws SQLException {
try {
Context jndiCntx = new InitialContext();
DataSource ds =
(DataSource)
jndiCntx.lookup("java:comp/env/jdbc/txDatasource");
return ds.getConnection();
} catch (NamingException ne) {
myLog.error(this.makeSQLInsertable("getConnection - could not
find connection"));
throw new EJBException(ne);
In other parts of the code, not developed by the same team, I've seen the
same task accomplished by :
private Connection getConnection() throws SQLException {
return DriverManager.getConnection("jdbc:weblogic:jts:FTPool");
From the performance-measurements I made the latter seems to be much more
efficient (time-wise). To give you some metrics:
The first version took a total of 75724ms for a total of 7224 calls which
gives ~ 11ms/call
The second version took a total of 8127ms for 11662 calls which gives
~0,7ms/call
I'm no JDBC guru som i'm probably missing something vital here. One
suspicion I have is that the second call first find the jdbc-pool and after
that makes the very same (DataSource)
jndiCntx.lookup("java:comp/env/jdbc/txDatasource") in order to fetch the
actual connection anyway. If that is true then my comparison is plain wrong
since one call is part of the second. If not, then the second version sure
seems a lot faster.
Apart from the obvious performance-differences in the two above approaches,
is there any other difference one should be aware of (transaction-context
for instance) between the two ? Basically I'm working in an EJB-environment
on weblogic 7.0 and looking for the most efficient way to get hold of a
db-connection in code. Comments anyone ?
//Linus Nikander - [email protected]Linus Nikander wrote:
Thank you for both your replies. As per your suggestions I've improved my
connectionhandling (I ended up implementing the Service Locator pattern as a
matter of fact).
One thing still puzzles me though. Which (and why) is the "proper" way to
fetch the actual dataSource. As I stated before in the code I've seen two
approaches within the code I've got.
1. myDs = myServiceLocator.getDataSource("jdbc:weblogic:jts:FTPool");
2. myDs = myServiceLocator.getDataSource("java:comp/env/jdbc/tgsDB");
where getDataSource does a dataSource = (DataSource)
initialContext.lookup(dataSourceName); dataSourceName being the input-string
obviously.
tgsDB is defined as
<reference-descriptor>
<resource-description>
<res-ref-name>jdbc/tgsDB</res-ref-name>
<jndi-name>tgs-dataSource</jndi-name>
</resource-description>
</reference-descriptor>
in weblogic-ejb-jar.xml
From what I can understand by your answer, you don't recommend using the
JNDI-lookup way of getting the connection at all ?Correct.
The service locator that
I implemented will still perform a JNDI lookup, but only once. Will the fact
that I'm talking to an RMI-object anyway significantly impact performance
(when compared to you non-jndi-method) ?In some cases, for earlier 7.0s, maybe yes. For the very latest, it shouldn't
hurt.
>
>
In my two examples above. If i use version 1. How will the server know
whether to give me a TX-bound connection and when not to ? In version 1
FTPool maps to a pool with both TX and non-TX datasources. In version 2.
tgsDB maps directly to a TX-dataSource.
I might be asking a lot of strange questions, probably because I'm just
getting the hang of all the resource-reference issues that EJBs are
associated with.Bear with me ;)
//Linus
"Joseph Weinstein" <[email protected]> wrote in message
news:[email protected]...
Hi. As Jon said, the lookups are redundant. Because you showed that otherway,
I will infer that this code is always being run in serverside code. Good.I will give you
a third way which is much better than either of the ones you showed. Thefirst method
you showed has a problem for all but the latest sps, your jdbc objectswill all be
going through an unnecessary level of indirection because you are gettingan rmi jdbc
object which talks to the jts driver object.
The second, faster method you showed also has a serious problem! Oneshould
never call DriverManager methods in multithreaded JDBC programs becauseall
DriverManager calls are class-synchronized, including some small internalones like
DriverManager.println(), which all JDBC drivers and even the constructorfor
SQLException call, so one slow getConnection() call can inadvertantly haltall other
JDBC being done in the whole JVM! Also, for JVMs that have lots of jdbcdrivers
registered, DriverManager is inefficient because it simply sends your URLand
properties to every driver it has registered until it finds one thatdoesn't throw an
exception and returns a connection.
Here's the fastest way:
// do once and reuse driver object everywhere. Can be used by multiplethreads
Driver d =(Driver)Class.forName("weblogic.jdbc.jts.Driver").newInstance();
Then, whenever you want a connection:
public myJDBCMethod()
Connection c = null; // always a method level object
try {
c = d.connect("jdbc:weblogic:jts:FTPool", null);
... do all the jdbc for the method...
c.close();
c = null;
catch (Exception e) {
... do whatever, if needed...
finally {
// close connection regardless of failure or exit path
if (c != null) try {c.close();}catch (Exception ignore){}
Joe
Linus Nikander wrote:
Having recently load-tested the application we are developing I noticed
that
one of the most expensive (time-wise) calls was my fetch of adb-connection
from the defined db-pool. At present I fetch my connections using :
private Connection getConnection() throws SQLException {
try {
Context jndiCntx = new InitialContext();
DataSource ds =
(DataSource)
jndiCntx.lookup("java:comp/env/jdbc/txDatasource");
return ds.getConnection();
} catch (NamingException ne) {
myLog.error(this.makeSQLInsertable("getConnection - couldnot
find connection"));
throw new EJBException(ne);
In other parts of the code, not developed by the same team, I've seenthe
same task accomplished by :
private Connection getConnection() throws SQLException {
return DriverManager.getConnection("jdbc:weblogic:jts:FTPool");
From the performance-measurements I made the latter seems to be muchmore
efficient (time-wise). To give you some metrics:
The first version took a total of 75724ms for a total of 7224 callswhich
gives ~ 11ms/call
The second version took a total of 8127ms for 11662 calls which gives
~0,7ms/call
I'm no JDBC guru som i'm probably missing something vital here. One
suspicion I have is that the second call first find the jdbc-pool andafter
that makes the very same (DataSource)
jndiCntx.lookup("java:comp/env/jdbc/txDatasource") in order to fetch the
actual connection anyway. If that is true then my comparison is plainwrong
since one call is part of the second. If not, then the second versionsure
seems a lot faster.
Apart from the obvious performance-differences in the two aboveapproaches,
is there any other difference one should be aware of(transaction-context
for instance) between the two ? Basically I'm working in anEJB-environment
on weblogic 7.0 and looking for the most efficient way to get hold of a
db-connection in code. Comments anyone ?
//Linus Nikander - [email protected] -
Please, Not getting result set from callable statement (Code posted)
I am posting some simple code which should get a ResultSet from a CallableStatement object using the executeQuery() Method.
It is returning "No RsultSet was produced"
If I modify the code and simply output the CallableableStatement using its executeUpdate() then getString() methods it works fine. Anything obviously wrong with this bit of code? Thanks.
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;
import db.util.query.*;
import db.util.pool.*;
public class oracle extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, java.io.IOException {
response.setContentType("text/html");
java.io.PrintWriter out = response.getWriter();
Connection con = ConnectionFactory.getConnection();
CallableStatement cs = null;
ResultSet rs = null;
int intID = 1;
try{
cs = con.prepareCall("{? = call test1(?)}");
cs.registerOutParameter(1, java.sql.Types.VARCHAR);
cs.setInt(2,intID);
/*These lines work on their own
*cs.executeUpdate();
*out.println("Name is : " + cs.getString(1));
//this code is what is not working...hmm
rs = cs.executeQuery();
while(rs.next()){
out.println(rs.getString("name"));
rs.close();
cs.close();
//the rest of this works too.
ConnectionFactory.releaseConnection(con);
catch(SQLException e){
out.println(e.getMessage());
Here's the stored procedure. I'm just trying to do a simple test to return multiple rows. The table has numberous records with the same id which is being passed to the function.
create or replace function test1 ( strInputID IN testtable.id%type)
return varchar2
is
strOutputName testtable.name%type;
found_it EXCEPTION;
begin
select name into strOutputName from testtable
where id = strInputID;
raise found_it;
exception
when no_data_found
then
return null;
when found_it
then
return strOutputName;
end;I've posted the code...it's doing a select. I think the problem is that to return multiple rows I need to return a cursor. But I've run into problems with both the MS and Oracle Drivers.
All I really want to do is to query a database using a callable statement(function in oracle) which will return multiple rows which I can process. I have been trying to do this in a servlet.
I can do it successfully for one column from one row, but not multiple columns from mulitple rows.
I've been searchging for some good examples and am trying different things but can't seem to get it to work. -
Getting result set from stored procedures in database controls in weblogic
I am calling a stored procedure from database control which actually returns a result set
when i call the stored procedure like
* @jc:sql statement="call PROC4()"
ResultSet sampleProc() throws SQLException;
it gives me exception saying
"weblogic.jws.control.ControlException: Method sampleProc is DML but does not return void or int"
I would appreciate any help
Thanks,
UmaThanks for you reply!
1) The stored procedure has head
CREATE OR REPLACE PROCEDURE X_OWNER.DISPLAY_ADDRESS
cv_1 IN OUT SYS_REFCURSOR
AS
err_msg VARCHAR2(100);
BEGIN
--Adaptive Server has expanded all '*' elements in the following statement
OPEN cv_1 FOR
Select ...
commit;
EXCEPTION
WHEN OTHERS THEN
err_msg := SQLERRM;
dbms_output.put_line (err_msg);
ROLLBACK;
END;
If I only run select .. in DBArtisan, it display all 2030,000 rows in 3:44 minutes
2) But when call stored procedure, it will take 80-100 minutes .
3) The stored procedure is translated from sybase using migration tools, it's very simple, in sybase it just
CREATE PROCEDURE X_OWNER.DISPLAY_ADDRESS
AS
BEGIN
select ..
The select part is exact same.
4) The perl code is almost exact same, except the query sql:
sybase verson: my $sql ="exec DISPLAY_ADDRESS";
and no need bind the cursor parameter.
This is batch job, we create a file with all information, and ftp to clients everynight.
Thanks!
Rulin -
How to get log information from database server?
Oracle 9.2 in Unix
we got blocking error in the production database last midnight for 40 min and nothing was being processed during that time which delayed our production night batch process. Then it was gone after 40min. I like to know what was happening during that time in the database. My question is where I can find error in the database server? In bdump? Appreciate any ideas.
Thanks
S.If you have jobs regularly collect statspack report, then it will be easier to troubleshoot. You can just pull the report from the time period.
A couple of things you can check if there's any storage issue during the time, like some backup or other jobs running taken all OS storage, so Oracle hung because no space to archive logs. Usually this will log errors in alert.log but if bdump destination also full, the error will not be logged.
Check OS activity during the time frame, what's CPU and IO activity. See if you have sar installed and configured
check OS message file. -
Problem of getting Result Set from Oracle 9iDB
I have Oracle 9i DB installed on Win NT system. I created a SCHEMA called SCHATTOP and created a TABLE TEAM. From Oracle SQL*Plus screen, I signed on with userID "SCHATTOP", and my password "ANU1SAL". Then at SQL> Connect SCHATTOP/ANU1SAL .. Getting msg Connected. Then I am doing Select * from SCHATTOP.TEAM; It shows the contents of the table. But when I wrote a small program like this .. when I am calling the program I am getting this msg
java DBLookup
Connection Successful to Oracle DataBase .. !!!!
SQLException caughtORA-00600: internal error code, arguments: [ttcgcshnd-1], [0], [], [], [], [], [], []
$
This is my program :
import java.io.*;
import java.sql.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class DBLookup {
public static void main(String[] args) throws Exception {
Connection con = null;
Statement stmt = null;
ResultSet rs = null;
try
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
String url= "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(HOST=9.5.185.229)(PROTOCOL=tcp)(PORT=1521))(CONNECT_DATA=(SID=SAL400)))";
con = DriverManager.getConnection(url,"SCHATTOP","ANU1SAL");
System.out.println("Connection Successful to Oracle DataBase .. !!!!");
stmt = con.createStatement( );
rs = stmt.executeQuery("SELECT * FROM SCHATTOP.TEAM");
while (rs.next()) {
System.out.println(rs.getString("FN") + " " + rs.getString("LN"));
catch (SQLException e) {
System.out.println("SQLException caught" + e.getMessage( ));
finally {
try {
if (con != null) con.close( );
catch (SQLException ignored) { }
Any help will be appreciated.Typically this error happens if a client tries to access a 9.0.1 database with an old 8.1.7 jdbc driver.
This should be fixed in the jdbc driver of the 8.1.7.2.1 Patchset for Windows.
Cheers
Stefan -
More efficient way to extract number from string
Hello guys,
I am using this Regexp to extract numbers from a string, and I doubt that there is a more efficient way to get this done:
SELECT regexp_replace (regexp_replace ( REGEXp_REPLACE (' !@#$%^&*()_+= '' + 00 SDFKA 324 000 8702 234 | " ' , '[[:punct:]]',''), '[[:space:]]',''), '[[:alpha:]]','') FROM dual
{code}
Is there a more efficient way to get this done ?
Regards,
FatehOr, with less writing, using Perl syntax \D (non-digit):
SELECT regexp_replace(' !@#$%^&*()_+= '' + 00 SDFKA 324 000 8702 234 | " ','\D')
FROM dual
REGEXP_REPLACE(
003240008702234
SQL>
{code}
SY. -
Most efficient way to get document names?
I was wondering what is the most efficient way to get the document names in a container? Use the built in 'name' index somehow, or is there an 'efficient' XPath/XQuery?
We've been using the XPath /* which is fine with small instances, but causes a java heap out of member error on large XML instances i.e. /* gets everything which is not ideal when all we want are document names.
Thx in advance,
AntHi Antony,
Here is an example for retrieving the document names on c++:
void doQuery(XmlContainer &container,
XmlQueryContext &context,
const std::string &XPath)
XmlResults results(container.queryWithXPath(0, XPath, &context));
// Iterate through the result set as is normal
XmlDocument theDocument;
while(results.next(theDocument))
std::cout << "Found document named: "
<< theDocument.getName() << std::endl;
Regards,
Bogdan Coman -
I currently have a requirement to create a time channel in the data portal and subsequently fill it with data. I've shown below how I am currently doing it:
Time_Ch = ChnAlloc("Time channel", 271214 , 1 , , "Time" ,1 ,1) 'Allocate time channel
For intLoop = 1 to 271214
ChD(intLoop,Time_Ch(0)) = CurrDateTimeReal 'Create time value
Next
I understand that the function to create and allocate memory for the time channel is extremely quick. However the time to store data in the channel afterwards is going to be highly dependent on the length I have assigned to the Time_Ch. In my application the length of Time_Ch is variable but could easily be in the order of 271214 or higher. Under such circumstances the time taken to fill Time_Ch is quite considerable. I am wondering whether this is the most appropriate way of doing things or whether there is a more efficient way of creating a time channel and filling it.
Thanks very much for any help.
Regards
MatthewHi Matthew,
You are correct that there is a more efficient way to do this. I'm a little confused about your "CurrDateTimeReal" assignment-- is this a constant? Most people want a Time channel that counts up linearly in seconds or fractions of a second over the duration of the measurement. But that looks like you would assign the same time value to all the rows of the new Time channel.
If you want to create a "normal" Time channel that increases at a constant rate, you can use the ChnGenTime() function:
ReturnValue = ChnGenTime(TimeChannel, GenTimeUnit, GenTimeXBeg, GenTimeXEnd, GenTimeStep, GenTimeMode, GenTimeNo)
If you really do want a Time channel filled with all the same values, you can use the ChnLinGen() function and simply set the GenXBegin and GenXEnd parameters to be the same value:
ReturnValue = ChnLinGen(TimeChannel, GenXBegin, GenXEnd, XNo, [GenXUnitPreset])
In both cases you can use the Time channel you've already created (which as you say executes quickly) and point the output of these functions to that Time channel by using the Group/Channel syntax of the Time channel you created for the first TimeChannel parameter in either of the above functions.
Brad Turpin
DIAdem Product Support Engineer
National Instruments -
Which is more efficient for includes/imports?
Which is more efficient?
1) <jsp:include
2) <%@ include file
3) <c:import
4) Custom tag version (tomcat 5)
<me:header/>
header.tag
navigation html stuff
Thanks,
KarmenDepends...
1) <jsp:include -- this is a runtime include. It will embed the included file at runtime.
2) <%@ include -- this is a compile-time include. It will copy the file's contents into the JSP page when it compiles it into a servlet. Also, typcially it will not recompile the main page if the include file changes, where as #1 above will.
3) <c:import -- ...well, I don't honestly know what this does.
4) Custom tag -- what this does clearly depends on what the tag is written to do. But most of the time, this is just going to write some simple HTML stuff out. You could do it that way, but using 1 or 2 to include some HTML or JSP fragment files would probably be better, since it would be easier to maintain. -
Just got girlfriend a new iPad2. Her iMac is a PowerPC G5 (Tiger version 10.4.11) with 512 mb RAM. What's the simplest, most efficient way to get her iPad2 up and running and synced to her Mac?
Most of the Apple store sales people and some of the genius bar people are only knowledgable on Apple's more recent offerings. They are not very knowledgable, I found, on older PowerPC based Apple computers, I'm afraid.
Here's the real scoop.
Your girlfriend's G5 can only install up to OS X 10.5 Leopard. This is the last compatible OS X version for PowerPC users.
OS X 10.6 Snow Leopard and OS X10.7 Lion are for newer Intel CPU Apple computers.
Early iMac G5's can only have up to 2 GBs of RAM.
Later iMac G5's (2005-2006) could take up to 2.5 GBs of RAM
2 GBs of RAM will run OS X 10.5 Leopard just fine.
The very latest iTunes (10.5.2) can be installed and runs on both PowerPC and Intel CPU Macs.
However, there are certain new iTunes feature that won't work without an Intel Mac.
One of iOS and iTunes feature is sync'g wirelessly over WiFi.
This will not work unless you have an iDevice running iOS 5 and Intel Mac running 10.6 Snow Leopard or better.
Although, I was disappointed I would not be able to do this with my G4 Mac, it's not a biggie problem for me.
So, your girlfriend's computer should be fine for what she intends to use it for.
The Apple people either just plain didn't know or we're trying to get you to think about buying a new Mac.
At least, as of now, not truly necessary.
If Apple, at some later point, drops support for PowerPC users running 10.5, then would be the time to consider a new or "newer" Intel CPU Mac.
My planned Mac computer upgrade is seeking out a " newer" last version G5 for my "new" Mac.
I can't afford, right now, to replace all of my core PowerPC software with Intel versions, so I need to stick with the older PowerPC Macs for the time being. The last of the G5's is what I seek. -
Implicit Join or Explicit Join...which is more efficient???
Which is more efficient?
An IMPLICIT JOIN
SELECT TableA.ColumnA1,
TableB.ColumnB2
FROM TableA,
TableB
WHERE TableA.ColumnA1 = TableB.ColumnB1
Or....An EXPLICIT JOIN
SELECT TableA.ColumnA1,
TableB.ColumnB2
FROM TableA
INNER JOIN TableB
ON TableA.ColumnA1 = TableB.ColumnB1
I have to write a pretty extensive query and there will be many parts and I just want to try and make sure it is efficient as possible. Can I EXPLAIN this in SQL Navigator as well to find out???
Thanks in advance for your review and hopeful for a reply.
PSULionRPAlex Nuijten wrote:
The Partition Outer Join is very handy, but it's an Oracle-ism - Not ANSI ...Ooh, "New thing learnt today" - check.
but then again who cares? ;)Oracle roolz! *{;-D -
A more efficient way to assure that a string value contains only numbers?
Hi ,
I'm using Oracle 9.2.0.6.
I was curious to know if there was any way I could write a more efficient query to determine if a string value contains only numbers.
Here's my current query. This SQL is from a sub query in a Join clause.
select distinct cta.CUSTOMER_TRX_ID, to_number(cta.SALES_ORDER) SALES_ORDER
from ra_customer_trx_lines_all cta
where length(cta.SALES_ORDER) = 6
and cta.SALES_ORDER is not null
and substr(cta.SALES_ORDER,1,1) in('1','2','3','4','5','6','7','8','9','0')
and substr(cta.SALES_ORDER,2,1) in('1','2','3','4','5','6','7','8','9','0')
and substr(cta.SALES_ORDER,3,1) in('1','2','3','4','5','6','7','8','9','0')
and substr(cta.SALES_ORDER,4,1) in('1','2','3','4','5','6','7','8','9','0')
and substr(cta.SALES_ORDER,5,1) in('1','2','3','4','5','6','7','8','9','0')
and substr(cta.SALES_ORDER,6,1) in('1','2','3','4','5','6','7','8','9','0')This is a string where I'm finding A-Z-a-z characters and '/' and '-' characters in all 6 positions, plus there are values that are longer than 6 characters. That's what the length(cta.SALES_ORDER) = 6 is for. Also, of course. some cells are NULL.
So the question is, is there a more efficient way to screen out only the values in this field that are 6 character numbers or is what I have the best I can do?
Thanks,I appreciate all of your very helpfull workarounds. The cost is a little better in all cases than my original where clause.
To address the discussion that's popped up about design from this question, I can say a few things that should clear , at least, my situation up.
First of all this custom quoting , purchase order , and sales order entry system WAS written by a bunch a of 'bad' coders who didn't document their work and then left. We don't even have an ER diagram
The whole project that I'm only a small part of is literally trying to put Humpty Dumpty together again and then move it from a bad custom solution into Oracle Applications.
We're rebuilding, documenting, and doing ETL. This is one of your prototypical projects from hell.
It's a huge database project so we're taking small bites as a time. Hopefully, somewhere right before Armageddon hits, this thing will be complete.
But until then,..., well,..., you know the drill.
Thanks Again. -
AS it stands now, in order to use the calculator that comes with the Dashboard, you cannot read from a list of numbers in, lets say, word or excel. The dashboard is full screen and nothing can stand along side it. Is there a way to get the calculator from the dashboard to appear along with other programs? Can anyone recommend a calculator which will work as a stand alone app?
there is one, just search with spotlight "Calculator".
It works great!
Hope this helps. -
MDX - More efficient way?
Hi
I am still learning MDX and have written this code. It needs to recalculate all employees in a cost center (COSTCENTER is a property of the DIM EMPLOYEE) when one of the assumptions (e.g P00205 etc) change. These assumptions are planned on cost center level and planned against employee DUMMY. Is there a more efficient way to write this code as there are lots of accounts that needs to be posted to::
*SELECT (%EMPLOYEE%, ID, EMPLOYEE, [COSTCENTER] = %COSTCENTER_SET%)
//Workmens Comp
*XDIM_MEMBERSET P_ACCT = "IKR0000642000"
*FOR %EMP% = %EMPLOYEE%
[EMPLOYEE].[#%EMP%] = ( [P_ACCT].[P00205],[EMPLOYEE].[DUMMY ]) * ( [P_ACCT].[P00400],[EMPLOYEE].[%EMP%] )
*NEXT
*COMMIT
//Fringe Benefits Employer
*XDIM_MEMBERSET P_ACCT = "IKR0000628100"
*FOR %EMP% = %EMPLOYEE%
[EMPLOYEE].[#%EMP%] = ( [P_ACCT].[P00210],[EMPLOYEE].[DUMMY ]) * ( [P_ACCT].[P00400],[EMPLOYEE].[%EMP%] )
*NEXT
*COMMIT
//Fringe Benefits Other
*XDIM_MEMBERSET P_ACCT = "IKR0000626100"
*FOR %EMP% = %EMPLOYEE%
[EMPLOYEE].[#%EMP%] = ( [P_ACCT].[P00209],[EMPLOYEE].[DUMMY ]) * ( [P_ACCT].[P00400],[EMPLOYEE].[%EMP%] )
*NEXT
*COMMITMaybe the following?
*SELECT (%EMPLOYEE%, ID, EMPLOYEE, [COSTCENTER] = %COSTCENTER_SET%)
*XDIM_MEMBERSET EMPLOYEE = %EMPLOYEE%
*XDIM_MEMBERSET P_ACCT = IKR0000642000,IKR0000628100,IKR0000626100
//Workmens Comp
[P_ACCT].[#IKR0000642000] = ( [P_ACCT].[P00205],[EMPLOYEE].[DUMMY] ) * ( [P_ACCT].[P00400] )
//Fringe Benefits Employer
[P_ACCT].[#IKR0000628100] = ( [P_ACCT].[P00210],[EMPLOYEE].[DUMMY] ) * ( [P_ACCT].[P00400] )
//Fringe Benefits Other
[P_ACCT].[#IKR0000626100] = ( [P_ACCT].[P00209],[EMPLOYEE].[DUMMY] ) * ( [P_ACCT].[P00400] )
*COMMIT
You should probably also restrict explicitly on all other dimensions in your applications so that none are accidentally left open that don't need to be.
Ethan
Maybe you are looking for
-
I'm trying to implement a line reader class, but my code does not seem to compile, giving the error that there is no return statement. here's my code. import java.io.*; import java.util.*; public class InputLineReader public static String lineRe
-
Export----Ok on Solaris,but no good On Win2000
I execute the command , exp lottery/lottery@pgdb file=FC_YJBF_200307081020.dmp log=FC_YJBF_200307081020.log tables="(FC_Lottery_INFO)" query=\"WHERE \( Bet_Type , Issue_ID \) IN \(SELECT Bet_Type , Issue_ID FROM FC_CYCLE_INFO WHERE Status='1001'\)\"
-
Illustrator CC (2014) update failed
Have tried clicking the Retry button and restarting. Below is the exact error message. Error message: Installation failed Installation encountered an error. Please restart your system and try again.(15) More information Exit Code: 15 Please see speci
-
Question on Lightroom 5 student and teacher edition.
hello, i've decided to purchase lightroom 5 and i've noticed that there is a Student and Teacher edition at a discounted price and i'm a little confused on the differences between the two versions , besides the price. Is there any differences between
-
Deleted the iTunes Store app from my ipad
My student deleted the iTunes Store app from my iPad. How do I get it back??