小编Cha*_*ler的帖子

Oracle:在包和过程中设置会话参数

我是一名 SQL Server DBA,目前正在了解 Oracle。我正在尝试为 SQL Server 但为 Oracle 创建与 sp_WhoIsActive 非常相似的东西,而无需重新发明轮子。本质上我所做的就是从 v$session 中选择一些值并将它们插入到表中(穷人的 ASH/AWR)。

在 Oracle 12.1 中,查询字典视图时似乎存在一个错误,由于解析逻辑错误,查询可能会花费很长时间(错误 22225899:复杂查询的缓慢解析)。解决方法是设置会话参数:

alter session set "_optimizer_squ_bottomup"=false;

在 T-SQL 中,我可以非常轻松地在会话中执行存储过程并在运行时设置此变量。但在 Oracle 中,情况似乎并非如此。

示例代码:

CREATE OR REPLACE PROCEDURE SP_DB_ACTIVITY
(
    v_temp NUMBER :=1
) IS
BEGIN
alter session set "_optimizer_squ_bottomup"=false;
INSERT INTO SY_DB_ACTIVITY 
    SELECT  
       <fields>
    FROM
      v$session;
commit;
Run Code Online (Sandbox Code Playgroud)

当我运行这个时,我收到错误:

“PLS-00103:在预期以下情况之一时遇到符号“ALTER”...”

目前,我知道如何执行此操作的唯一方法是通过像 SQL Plus 这样的实用程序来启动交互式用户会话。谁能告诉我 Oracle 如何处理这种情况?我想将其捆绑到 SP 或包中,然后从 Oracle Scheduler 调用它。

sql oracle plsql oracle-sqldeveloper oracle12c

3
推荐指数
1
解决办法
3146
查看次数

标签 统计

oracle ×1

oracle-sqldeveloper ×1

oracle12c ×1

plsql ×1

sql ×1