如何在oracle apex进程中执行DDL命令CREATE或ALTER或DROP?

问题描述 投票:0回答:2

我想从 oracle apex 形式终止会话, 我怎样才能执行终止会话命令,

我尝试了以下方法:

1-使用此 SELECT 语句创建了带有表单的交互式报告

select sid , serial# , blocking_session from v$session;

2- 在与此网格链接的表单中,我选择 SID 和 SERIAL

3-我创建了流程并使用了代码:

begin
alter system kill session ''' ||  :P90_SID || ',' || :P90_SERIAL_H  || ''';
 end;

但我收到错误:

ORA-06550: line 2, column 1: PLS-00103: Encountered the symbol "ALTER" when expecting one of the following: ( begin case declare exit for goto if loop mod null pragma raise return select update while with <an identifier> <a double-quoted delimited-identifier> <a bind variable> << continue close current delete fetch lock insert open rollback savepoint set sql execute commit forall merge pipe purge json_exists json_value json_query json_object json_array

如何解决这个错误并执行kill session?

oracle-apex
2个回答
0
投票

对我来说,编写要执行的语句更容易;这样做,很容易验证它看起来是否正常。然后执行它。

我会在表单页面上创建一个按钮,它运行一个如下所示的流程:

declare
  l_str varchar2(200);
begin
  l_str := 'alter system kill session ' || chr(39) || :P90_SID || ', '|| :P90_SERIAL_H || chr(39);
  execute immediate l_str;
end;

当然,用户(按下该按钮的)必须具有适当的权限。不是每个人都可以改变系统。


0
投票

在 apex 中,API

APEX_STRING
可用于避免多重串联并使代码更具可读性。这与@Littlefoots的答案相同。

DECLARE
  l_statement VARCHAR2(1000);
BEGIN
  l_statement := q'!ALTER SYSTEM KILL SESSION '%0,%1'!';
  l_statement := apex_string.format(l_statement, :P90_SID, :P90_SERIAL_H);
  EXECUTE IMMEDIATE l_statement;
END;
© www.soinside.com 2019 - 2024. All rights reserved.