From: Gustaf N. <ne...@wu...> - 2017-02-20 12:48:32
|
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 > > > > > |