Oracle 在jruby中执行更新pl/sql失败

Oracle 在jruby中执行更新pl/sql失败,oracle,plsql,jruby,oracle-call-interface,Oracle,Plsql,Jruby,Oracle Call Interface,我正在尝试使用jdbc驱动程序连接到oracle db,这部分工作正常。之后,我想执行一些pl/sql代码,这就是我遇到的问题所在,这似乎是语法上的问题。谁能帮我修一下这个吗?我想弄清楚,但弄不清楚。下面是代码片段 userlist = ['John', 'Sam', 'Lucia'] $userlist.each do|usr| puts "Working on #{usr}" stmt = <<-EOF DECLARE

我正在尝试使用jdbc驱动程序连接到oracle db,这部分工作正常。之后,我想执行一些pl/sql代码,这就是我遇到的问题所在,这似乎是语法上的问题。谁能帮我修一下这个吗?我想弄清楚,但弄不清楚。下面是代码片段

   userlist = ['John', 'Sam', 'Lucia']

   $userlist.each do|usr|
   puts "Working on #{usr}"
   stmt = <<-EOF
       DECLARE
            CURSOR cur IS
                   SELECT sid, serial#
                   FROM v$session WHERE username = upper('#{usr}');

       BEGIN
                   FOR rec IN cur
                     LOOP
                       EXECUTE IMMEDIATE 'ALTER USER #{usr} IDENTIFIED BY chng';
                       dbms_output.put_line('Killing sessions which belong to #{usr}...');
                       EXECUTE IMMEDIATE 'ALTER SYSTEM KILL SESSION '''||session_rec.sid||','||session_rec.serial#'''';
                     END LOOP;
                   END;
       EOF

       #in the initialize method I established the connection and it is working fine.
       plsql_stmt = @conn.create_statement 
       plsql_stmt.execute_update(stmt)
   end
userlist=['John','Sam','Lucia']
$userlist.each do| usr|
将“处理#{usr}”

stmt==将大而坏的plsql重构为一个plsql过程,并用于从ruby调用它,该错误消息表明您有一个SQL语法错误,特别是在撇号附近。我将
放入stmt
并检查它。

您是否尝试过在sqldeveloper中执行代码?我将
放入stmt
并检查它。错误消息表明您有一个放错位置的撇号。我正在linux box上使用putty执行代码。@Shepmaster:谢谢您提出打印查询的建议。我在“Alter system kill”查询的末尾缺少“| |”。更正为
executeimmediate'ALTER SYSTEM KILL SESSION'| | | | | SESSION|rec.sid | | | | | | |'、| | | SESSION rec.serial | |'
   Working on John
   NativeException: java.sql.SQLException: ORA-06550: line 10, column 100:
   PLS-00103: Encountered the symbol "'" when expecting one of the following:

   . ( * @ % & = - + ; < / > at in is mod remainder not rem
   return returning <an exponent (**)> <> or != or ~= >= <= <>
   and or like like2 like4 likec between into using || bulk
   member submultiset
   The symbol "*" was substituted for "'" to continue.