Hi Brian,

I am not sure, how this ever worked, ... and maybe there is a big difference in the end-of-file treament of sqlplus under windows, but altering the tcl command "open" does not look right (this is used for all "open" operations).

Doesn't the anwer in
http://serverfault.com/questions/87035/run-oracle-sql-script-and-exit-from-sqlplus-exe-via-command-prompt
help?  (writing "exit\n" to the pipe, open pipe with "r+")?

-g

Am 20.02.17 um 13:01 schrieb Brian Fenton:

Hi all

We’re in the early stages of an attempt to migrate from AOLserver to Naviserver. For now, we’re just looking at the Windows version of Naviserver, but I guess this might be an issue on Unix versions too.

We’ve already run into an issue with some OpenACS code that that uses “open” to open a pipe to Oracle’s SQL*Plus command, and then runs a SQL script. It looks like AOLserver was doing something extra, which Naviserver doesn’t seem to do.

As a bit of background, when you run a SQL script in SQL*Plus, the script needs to have an EXIT command on the last line, which tells SQL*Plus to exit when finished. For some reason, in OpenACS, none of the provided SQL scripts have this EXIT, but with AOLserver it was never an issue. It seemed to close the channel after SQL*Plus was finished running.


With Naviserver, the pipe hangs while waiting on SQL*Plus to exit. The obvious fix is to add the EXIT to the 1000s of SQL scripts included in OpenACS, but I’m hoping there’s a smarter solution (something along the lines of this, if necessary http://serverfault.com/a/87038/9044 ).

Here’s an example of what I’m talking about:

*Create a file called hello.sql which contains the following line:*

select 'brian says hi' from dual;

*From your command line, run it as follows:*
sqlplus user/pass@SID @hello.sql

You will find that it doesn’t exit the SQL*Plus session, unless you add an EXIT to the end of hello.sql

*Here is a version of the OpenACS code, that works on AOLserver (without the EXIT command in the SQL script) but is hanging on Naviserver:*

set file "c:/temp/hello.sql"

cd [file dirname $file]

set user_pass "user/pass@SID"

set fp [open "|[file join $::env(ORACLE_HOME) bin sqlplus] $user_pass @$file" "r"]

set output ""

while { [gets $fp line] >= 0 } {

append output $line

}

close $fp

ns_log Notice $output

*If hello.sql has an EXIT, you will see output similar to below. Otherwise, it just waits, and you have to kill it.*

SQL*Plus: Release 12.1.0.2.0 Production on Fri Feb 17 16:45:34 2017Copyright (c)

1982, 2014, Oracle. All rights reserved.Connected to:Oracle Database 11g Relea

se 11.2.0.3.0 - 64bit Production'BRIANSAYSHI'-----------------------------------

----brian says hiDisconnected from Oracle Database 11g Release 11.2.0.3.0 - 64bi

t Production

Any thoughts?

Brian






------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
_______________________________________________
naviserver-devel mailing list
naviserver-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/naviserver-devel

Reply via email to