VORTEX and Perl
It seems that when doing a SELECT of a LONG datatype in Oracle,
the returned value for that column is always empty/NULL. Is this
a known problem?
Please check sample3.pl in the VORTEXperl kit. This shows
how to insert and retrieve Oracle LONG.
I want to develop an application (Mod Perl) to connect to an Appache
server running on Solaris 2.6 to Informix 7.3, also on Solaris 2.6.
Will your product do that? What do I need to
purchase? Also, do I need to use the Informix connect product? If I want to
connect via ODBC do I need to install the odbc drivers and Informix connect?
You need VORTEXperl on your Apache system and VORTEXserver on your Informix
You do not need ODBC. VORTEXperl uses a socket directly to VORTEXserver on
your DBMS machine.
I get an error when attempting a bulk insert into SQL Server.
The problem is that the SQL Server/Sybase bulk interface requires values
for all columns. Your code is passing in only 6 values/row instead of 8.
In order to get it to work, you must do:
$db->sql($c1,"insert into tblQueryDBSequence ".
"(QueryDBSequenceID,DatabaseName, ProteinSequenceID, Definition, GoldSilver, ".
"ProteinSequence, Owner,DateCreated) ".
SQL Server will put in the correct values for the QueryDBSequenceID.
With vortex the fetch returns a non-error status (which is technically
correct). I have tried to use the numOutputCols -- and it appears to
return the columns even though nothing was selected -- and the endOfScan
seems to only work for a return of at least 1 row.
numOutputCols will return the number of columns regardless of whether or not
there are any data rows matching the query.
I would like to try an evaluation copy of VORTEXperl for connecting
a client DEC Alpha (running digital unix 3.2c) to a Windows MS SQL Server.
I can't build the sybase driver on the alpha
as the client machine does not have a sybase installation.
You do not need the SQL server driver on Alpha. The alpha needs our VORTEXperl
class libraries and the Window server needs our VORTEXserver. Both of these are
available for evaluation from our web site. VORTEXperl reads/writes directly
to the socket and so there is no need to rebuild it on the Alpha.
When left unused overnight, the Vortex server stops accepting
connections and we must kill the resident process and restart the server.
Is this a known bug? Vtxping indicates the server is "alive and kicking!"
but it does not connect from Vortex Perl.
The evaluation copy times out after four hours.
Adabas D requires that LONG data types be inserted and selected through
a separate function call outside the standard insert and select. We are
unable to find an equivalent call in VORTEXPerl. Is there one? Also,
will we have this problem in using VORTEXperl with other database systems
such as Oracle, Informix, Sybase, et al? This is an extremely important
issue for us.
Use the putBlob, getBlob, and setBlobParam methods to handle blobs. See
sample3.pl for an example.
I am not clear on the allocation of a new cursor, and particularly when to
do a cursor_close. Should I use a different cursor for each type of SQL
operation I need to do? I would typically be doing things like inserting a
row (using parameters, now that I figured that out, with your help) for each
record I create, and possibly future programs might need to fetch a row with
some information, from a different table.
If you are going to reuse the statement, then do not close the cursor. Otherwise,
you can either reuse the same one for different statements or allocate new ones.
You will have a slight performance improvement by using more cursors since
we will not have to close it first but you may eventually use up all the ones
you allocated in your dbChannel() call, the maxLogicalCursors parameter.
When my application gets to the "execute", I get this error:
./load_queries.plx: DB Error at source line 146: BULK INSERT command not allowed
within multi-statement transaction. at ./load_queries.plx line 190.
More on the saga of SQL Server's ancestor, Sybase. The Sybase kernel does
not allow a bulk insert within a transaction. Why? Who knows, other DBMSs
do not have a problem with it although I suppose they do not want to slow
down bulk processing and it is true that SQL Server/Sybase bulk operations are
much faster than other DBMS's. Anyway, to solve your problem, make sure that
the commit() before the bulk insert is commit(0). This will prevent the
driver from starting a new transaction.
I get a syntax error if I leave off "@dbsv". What is "pathname"?
We implemented all the connect methods for Informix. Pathname is the
quoted pathname to the database directory up to the parent directory of the
.dbs directory. Take a look at page 1-83 of the Informix Guide to SQL: Syntax.
I do not know of anyone using pathname but we implemented it just the same.
How does VORTEXserver work? I understand that it works as a daemon,
so would you need to run a VORTEXserver for every single database to
which you wished to connect?
VORTEXperl uses sockets to communicate with the VORTEXnet server. There is
one VORTEXnet daemon that accepts the connection requests and starts up the
requested DBMS server based upon the connect string passed in.
I tried to connect your Perl client to my database without success.
(database and remote server are started)
Is this release of the Perl module only for Vortex? Or do you have some
sample scripts to connect to other databases like ADABAS?
VORTEXperl writes directly to the socket interface and thus does not need to
be rebuilt on the various platforms. It communicates with VORTEXserver on the
DBMS system to make the connect to ADABAS D. You must download an evaluation
copy of the VORTEXserver for your particular DBMS platform.
I have my Linux machine running Perl 5.003 talking to
Windows or Sparc box running Sybase. Do your products rely
on the CTlib stuff?
The Perl library writes to the socket directly and does not use any vendor
libraries on the client side. In fact, you do not even have to rebuild the
Perl library on the client side.
Does VORTEXperl allow a web server (in this case running on
Solaris) to make SQL queries to a Microsoft SQL server?
I am writing some applications using Perl and VORTEXperl.
I would like to do an update on a record, but if the
record doesn't exists, then I would like to do an insert.
The problem is execute() returns false when the record
doesn't exists. Is it possible this is a bug?
What error status do I have to check after an update so
I can do an insert if it fails.
Execute() returns true to indicate an error condition. You can
then call sqlError() to get the error code and message.
Actually returning false is not a bug since the update did not fail,
it simply did not update any rows. Call getRowsAffected() after
the update. If this is 0, then no records matched the update criteria.
Updated 6 Sep 2011.