ORA-06550: line 40, column 3:
PLS-00103: Encountered the symbol "ALTER" when expecting one of the following:
begin case declare end exit for goto if loop mod null pragma
raise return select update while with <an identifier>
<a double-quoted delimited-identifier> <a bind variable> <<
close current delete fetch lock insert open rollback
savepoint set sql execute commit forall merge
<a single-quoted SQL string> pipe
相关代码段:
v_FetchString := SELECT id,serial FROM t_KILL_SPID;
DBMS_SQL.PARSE(v_Cursor,v_FetchString,DBMS_SQL.NATIVE);
DBMS_SQL.DEFINE_COLUMN(v_Cursor,1,v_SPID);
DBMS_SQL.DEFINE_COLUMN(v_Cursor,2,v_Serial);
v_Dummy:=DBMS_SQL.EXECUTE(v_Cursor);
LOOP
IF DBMS_SQL.FETCH_ROWS(v_Cursor) = 0 THEN
EXIT;
END IF;
DBMS_SQL.COLUMN_VALUE(v_Cursor,1,v_SPID);
DBMS_SQL.COLUMN_VALUE(v_Cursor,2,v_Serial);
DBMS_SQL.EXECUTE (v_SQL);
ALTER SYSTEM KILL SESSION v_SPID,v_Serial immediate;
END LOOP;
***
**ALTER SYSTEM KILL SESSION v_SPID,v_Serial immediate;
应该是这句的问题,和权限有关么?
当**ALTER SYSTEM KILL SESSION v_SPID,v_Serial immediate;的问题,在存储过程中不能直接执行这样的语句,应做如下的修正
建一个变量comm_str varchar2(200);
ALTER SYSTEM KILL SESSION v_SPID,v_Serial immediate;修正为:
comm_str:=ALTER SYSTEM KILL SESSION ||CHR(10)||CHR(39)||session_id||,||serial_num||CHR(39);
EXECUTE IMMEDIATE comm_str;